pod生命周期
我们一般将pod对象从创建致终的这段时间范围称为pod的生命周期,它主要包含下面的过程:
- pod创建过程
- 运行初始化容器过程
- 运行主容器过程
- 容器启动后钩子,容器终止钩子
- 容器的存活性探测,就绪性探测
- pod终止过程
在整个生命周期中,pod会出现5种状态,分别如下:
- 挂起(pinging):apiserver已经创建了pod资源对象,但它尚未被调度完成或者仍处理下载镜像的过程中。
- 运行中(runing):pod已经被调度至某节点,并且所有容器都被k8s创建完成。
- 成功(successdes):pod中的所有容器都已经成功终止并且不会被重启
- 失败(failed):所有容器都已经终止,但至少有一个容器终止失败,即容器返回了非0值的退出状态。
- 未知(Unknown):apiserver无法正常获取到pod对象的状态信息,通常由网络通信失败所导致。
pod创建和终止
pod的创建过程
- 用户通过kubectl或其他api客户端提交需要创建的pod信息给apiserver
- apiServer开始生成pod对象的信息,并将信息存入etcd,然后返回确认信息至客户端
- apiServer开始反映etcd中的pod对象的变化,其它组件使用watch机制来跟踪检查apiServer上的变动
- schedule发现有新的pod对象要创建,开始为pod分配主机并将结果信息更新至apiserver
- node节点上的kubectl发现有pod调度过来,尝试调用docker启动容器,并将结果回送至apiserver
- apiserver将接收到的pod状态信息存入etcd
pod的终止过程
- 用户向apiserver发送删除pod对象的命令
- apiserver中的pod对象信息会随着时间的推移而更新,在宽限期内(默认30秒),pod被视为dead
- 将pod标记为terminationg状态
- kubectl在监控到pod对象转移为terminating状态的同时启动pod关闭过程
- 端点控制器监控到pod对象关闭行为时将其从所有匹配到此端点的server的端点列表中移除
- 如果当前pod对象定义了preStop钩子处理器,则在其标记为terminating后即会同步的方式启动执行
- pod对象中的容器进程收到停止信息
- 宽限期结束后,若pod中还存在仍在运行的进程,那么pod对象会收到立即终止的信息
- kubectl请求apiserver将此pod资源的宽限期设置为0从而完成删除操作,此时pod对于用户已不可见
注意:非原创,是跟着黑马视频学习一个字一个字敲出来的笔记
视频地址:
https://www.bilibili.com/video/BV1xX4y1K7nb?p=2