cfanbo / cfanbo.github.io

1 stars 0 forks source link

创建Pod源码解析 | 学习笔记 #241

Open cfanbo opened 10 months ago

cfanbo commented 10 months ago

https://blog.haohtml.com/archives/33163/

在上一篇《Kubelet 服务引导流程》中我们介绍了 kubelet 服务启动的大致流程,其中提到过对 Pod 的管理,这一节将详细介绍一下对Pod的相关操作,如创建、修改、删除等操作。建议先了解一下上节介绍的内容。 在 kubelet 启动的时候,会通过三种 pod source 方式来获取 pod 信息: file: 这种方式只要针对 staticPod 来处理,定时观察配置文件是否发生变更情况来写入 pod http方式: 就是通过一个http请求一个 URL 地址,用来获取 simple Pod 信息 clientSet: 这种方式直接与 APIServer 通讯,对 pod 进行watch 上面这三种 pod source ,一旦有pod 的变更信息,将直接写入一个 kubetypes.PodUpdate 这个 channel(参考: https://github.com/kubernetes/kubernetes/blob/v1.27.3/pkg/kubelet/kubelet.go#L278-L313),然后由下面我们要讲的内容进行读取消费。 对于pod 的操作除了这一个地方可以实现对 pod 的操作,还有l四个地方也可以触发对 pod 的操作。 在启动服务函数 Kubelet.Run(updates <-chan kubetypes.PodUpdate{}) 中参数 updates是一个 kubetypes.PodUpdate的类型,其结构如下 type PodUpdate struct { Pods []*v1.Pod Op PodOperation Source string } // PodOperation 定义了将对pod配置进行哪些更改。 type PodOperation int // These constants identify the PodOperations that can be made on a pod configuration.