Kubernetes 通过watch的机制进行每个组件的协作,每个组件之间的设计实现了解耦
K8S 集群中Pod创建过程
1. 用户使用create yaml创建pod,请求给API Server,API Server将yaml中的属性信息(meta data)写入ETCD
2. API Server触发watch机制准备创建pod,信息转发给Scheduler,Scheduler使用调度算法选择node,Scheduler将node信息给API Server,API Server将绑定的node信息写入ETCD
3. API Server又通过watch机制,调用Kubelet,指定pod信息,触发docker run命 令创建容器
4. 创建完成之后反馈给Kubelet, Kubelet又将pod的状态信息给API Server,
5. API Server又将pod的状态信息写入ETCD
其中kubectl get pods命令调用的时etcd_的信息
注意:图中有三次write
- 元信息
- pod分配到哪个node
- 记录pod状态
K8S 集群中Pod的终止过程
1、用户发出删除 pod 命令
2、Pod 对象随着时间的推移更新,在宽限期(默认情况下30秒),pod 被视为“dead”状态
3、将 pod 标记为“Terminating”状态
4、第三步同时运行,监控到 pod 对象为“Terminating”状态的同时启动 pod 关闭过程
5、第三步同时进行,endpoints 控制器监控到 pod 对象关闭,将pod与service匹配的 endpoints 列表中删除
6、如果 pod 中定义了 preStop 钩子处理程序,则 pod 被标记为“Terminating”状态时以同步的方式启动执行;若宽限期结束后,preStop 仍未执行结束,第二步会重新执行并额外获得一个2秒的小宽限期
7、Pod 内对象的容器收到 TERM 信号
8、宽限期结束之后,若存在任何一个运行的进程,pod 会收到 SIGKILL 信号
9、Kubelet 请求 API Server 将此 Pod 资源宽限期设置为0从而完成删除操作