摘要: 为什么需要 CNI 在 kubernetes 中,pod 的网络是使用 network namespace 隔离的,但是我们有时又需要互相访问网络,这就需要一个网络插件来实现 pod 之间的网络通信。CNI 就是为了解决这个问题而诞生的。CNI 是 container network interfa 阅读全文
posted @ 2024-04-20 22:59 daemon365 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 启动流程 containerd 作为一个 api 服务,提供了一系列的接口供外部调用,比如创建容器、删除容器、创建镜像、删除镜像等等。使用 docker 和 ctr 等工具,都是通过调用 containerd 的 api 来实现的。 kubelet 通过 cri 调用 containerd 和这些不 阅读全文
posted @ 2023-12-07 23:10 daemon365 阅读(674) 评论(0) 推荐(0) 编辑
摘要: CDI 是什么? Container Device Interface (CDI) 是一个提议的标准,它定义了如何在容器运行时环境中向容器提供设备。这个提议的目的是使得设备供应商能够更容易地将其设备集成到 Kubernetes 集群中,而不必修改 Kubernetes 核心代码。 CDI 插件通常负 阅读全文
posted @ 2023-11-19 19:53 daemon365 阅读(729) 评论(0) 推荐(0) 编辑
摘要: Reference https://atbug.com/kubelet-source-code-analysis/ kubelet 简介 kubernetes 分为控制面和数据面,kubelet 就是数据面最主要的组件,在每个节点上启动,主要负责容器的创建、启停、监控、日志收集等工作。它是一个在每个 阅读全文
posted @ 2023-11-07 22:19 daemon365 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 早期 kubelet 创建容器工作原理 因为 docker 出生的比 k8s 早,所以 k8s 早期的容器运行时都是基于 docker 的,kubelet 通过 docker 的 api 创建容器。后来,k8s 官方不想绑死在 docker 这架马车上,就把容器运行时抽象出来,定义了一个接口,叫 C 阅读全文
posted @ 2023-10-14 22:27 daemon365 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 介绍 BoltDB 是一个用 Go 语言编写的嵌入式键/值数据库。以下是关于 BoltDB 的一些基本介绍: 键/值存储: BoltDB 为应用程序提供了简单的键/值存储接口。 事务: BoltDB 支持完整的 ACID 事务。 嵌入式: 与像 MySQL 或 PostgreSQL 这样的数据库系统 阅读全文
posted @ 2023-09-09 21:18 daemon365 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 概念 kratos 为了使http协议的逻辑代码和grpc的逻辑代码使用同一份,选择了基于protobuf的IDL文件使用proto插件生成辅助代码的方式。 protoc http插件的地址为:https://github.com/go-kratos/kratos/tree/main/cmd/pro 阅读全文
posted @ 2023-06-29 22:32 daemon365 阅读(220) 评论(0) 推荐(0) 编辑
摘要: ## net/http 路由注册 ```go func test1() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello world!") }) err := htt 阅读全文
posted @ 2023-06-28 20:48 daemon365 阅读(24) 评论(0) 推荐(0) 编辑
摘要: ## 关于 Cobra 是 Go 的 CLI 框架。它包含一个用于创建功能强大的现代 CLI 应用程序的库,以及一个用于快速生成基于 Cobra 的应用程序和命令文件的工具。 Cobra 由 Go 项目成员和 hugo 作者 [spf13](https://github.com/spf13) 创建, 阅读全文
posted @ 2023-06-28 00:30 daemon365 阅读(436) 评论(0) 推荐(0) 编辑
摘要: ## 责任链模式 **责任链模式**是一种行为设计模式, 允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。比如 `kratos`,`gin`等开源库的中间件实现。 ### 代码实现 ```go package main import ( 阅读全文
posted @ 2023-06-26 23:27 daemon365 阅读(15) 评论(0) 推荐(0) 编辑