Pod创建过程及生命周期
简述一下上图:
- kuctl向kubeApi发送指令
- kubeApi会调用到kubelet(调度过程是通过etcd来完成的)
- kubelet会对应操作cr
- cr去完成容器环境的初始化,初始化过程中它会启动一个pause的基础容器,这是google给我们做的一个非常经典容器,他负责我们的网络和存储卷的共享,就是说同一个pod中,里面所有的容器都是共享的
- 接着cr会进行一个或者多个init C(容器)的初始化(这取决于你的pod中有多少个容器),当然init C也可以没有,Init C在初始化完成后要是正常退出,退出码会是0,如果是非0则是不正常退出。(前一个Init C如果没有正常退出,后一个是不会继续执行的)如果Pod的Init容器失败,kubernetes会不断重启该Pod(重启pod所有的Init都会重新执行),直到Init容器成功为止.然而如果Pod对应的restartPolicy为Never,他则不会重新启动
- 多个初始化的容器步骤完成后,就会进入MainC的运行了
在mainC刚start(启动)的时候,会允许他去执行一条命令或者一个命令脚本
mainC在stop(关闭)的时候,也会允许他去执行一条命令,也就是我在退出的时候,我接下来要怎么办,在start(启动)和stop(关闭)的过程中,会有readines和Liveness的参与,readlines在容器运行多少秒后进行探测,在readines没有进行就绪检测之前,pod的状态不可能为running或者Read,当readlines检测之后,这个pod的状态才会变成running或者Read,在这个过程当中还有Liveness的参与,liveness他会伴随整个的主容器的生命周期,当主容器进程跟liveness检测结果不一致的时候,比如主容器出现损坏了或者不能正常工作了,那我就可以执行对应的重启,或者删除命令,这跟我们设定的策略有关
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
爱吃可爱多!
喜欢就支持一下吧
打赏
微信
支付宝