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 LifecycleEvent
Generator - 上报给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
,即便主 Container
Crash,Pod 网络依然是稳定
的
- 将
1 | $ k get po |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.