一、kubelet架构
每个节点都运行一个kubelet进程,默认监听10250端口,kubelet作用非常重要,是节点的守护神。
- 接收并执行 master发来的指令。
- 管理Pod及Pod中的容器。
- 每个kubelet进程会在API Server 上注册节点自身信息,定期向master
节点汇报节点的资源使用情况,并通过cAdvisor监控节点和容器的资源。
二、节点管理
节点管理主要是节点自注册和节点状态更新:
- kubelet 可以通过设置启动参数–register-node 来确定是否向API Server 注册自己;
- 如果kubelet没有选择自注册模式,则需要用户自己配置Node资源信息,同时需要告知 kubelet集群上的API
Server的位置; - kubelet 在启动时通过API Server 注册节点信息,并定时向API Server发送节点新消息,API
Server在接收到新消息后,将信息写入etcd。
三、pod管理
接收APIServer请求,由syncLoop和PodWorker处理请求调用CRI接口,PLEG完成pod状态的上报。
3.1 Pod启动流程
kubelet启动pod主进程之前会先启动一个沙箱进程,用于配置网络namespace,配置pod网络。因为kubelet并不确定主进程是否是安全的,会不会异常退出,配置网络属于操作系统级的操作,比较消耗资源。举个例子:
其中k8s.gcr.io/pause就是沙箱进程,是一个不消耗资源永远sleep的进程,用来配置pod网络,提供稳定的网络基座。
这张图描述了CSI、CRI、CNI的关系,以及创建pod调用的先后顺序。