Kubernetes - Kubelet
架构
每个
Node上运行一个Kubelet服务进程,默认监听10250端口
- 接收并执行
Master的指令 - 管理 Pod 以及 Pod 中的容器
- 在 API Server 注册 Node 信息,定期向 Master 汇报 Node 的资源使用情况
- 通过
cAdvisor监控 Node 和容器的资源 cAdvisor通过Cgroups收集并上报容器的资源用量
- 通过
Node 管理
Node
自注册+ Node状态更新
自注册模式:Kubelet 通过启动参数--register-node来确定是否向API Server注册- Kubelet
没有选择自注册模式- 用户需要
自己配置Node 资源信息 - 告知 Kubelet 集群上的 API Server 的位置
- 用户需要
- Kubelet
选择自注册模式- Kubelet
定时向API Server发送 Node 信息 - API Server 在接收到 Node 信息后,转存到
etcd
- Kubelet
Pod 管理
syncLoop- Kubelet 本身也是控制器模式
computePodActions - 比对
Pod Manifest和实际 Pod的差异,来决定 Action
PLEG- Pod LifecycleEventGenerator - 上报给API Server- relist 间隔1 秒执行 1 次
获取 Pod 清单的 4 种方式
| Type | Method | Desc |
|---|---|---|
| Pull | File |
20 秒检查一次启动参数 --config 指定的配置目录下的文件默认为 /etc/kubernetes/manifests |
| Pull | HTTP Endpoint |
20 秒检查一次启动参数 --manifest-url 设置 |
| Push | API Server |
通过 API Server 监听 etcd 目录,同步 Pod 清单 |
| Push | HTTP Server |
Kubelet 监听 HTTP 请求,并响应简单的 API 以提交新的 Pod 清单 |
Pod 启动流程
CSI -> CRI -> CNI
WaitForAttachAndMount –CSI
pause -
SandBox Container- SleepIndefinitely- 非常巧妙和优雅的设计
- 同一个 Pod 内的多个容器共享某些资源,
SandBox Container作为底座不消耗 CPU 资源,且极度稳定
Init Container和主 Container在运行时就需要网络就绪的前提- 将
Network Namespace关联到SandBox Container,即便主 ContainerCrash,Pod 网络依然是稳定的
- 将
1 | $ k get po |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.















