Pod的生命周期及状态
POD启动过程及运行过程
Pod中主容器运行之间会运行一系列的pod来保证主容器可正常运行
Pod运行过程中用根据就绪探针和存活探针来检测Pod是否可用
Pod启动过程如下
Pause容器网络和数据卷初始化
Init容器,完成初始化的相关工作
Init容器特点:
- Init 容器总是运行到完成为止
- Init容器串行执行,上一个容器执行完成,下一个容器执行开始
- Init容器失败,当restartPolicy为never POD不会重启;当值为always POD不断重启,直到Init容器成功为止
Init容器优势:
- Init 容器具有应用程序单独的镜像,具有的优势
- 包含并运行实用工具
- 使用工具定制化代码来安装
- 应用程序镜像可以分离创建的角色
- 提供了简单阻塞延迟应用容器的启动方法,直到满足先决条件
注意:Pod重启 Init容器必现重新执行
Pod探针
探针:对容器执行定期诊断
探针检测的方式主要包括
ExecAction:在容器中执行指定命令,退出返回0,诊断成功
TcpSocketAction:指定端口上的容器的IP地址TCP检查,端口打开,诊断成功
HTTPGetAction :对指定端口和路径上的容器IP地址执行HTTP Get请求,响应状态码在200且小于400之间,诊断成功
诊断结果
成功:通过了诊断
失败:容器未通过诊断
未知:诊断失败,不采取行动
Pod常用的探针
- LivenessProbe:指示容器是否正在运行,容器存活探针,失败,kublet杀死容器,根据restartPolicy值选择是否重启。如果容器不提供存活探针默认为Success
- ReadinessProbe:指示容器是否准备好服务请求,若失败断点控制器将从Pod匹配的所有service的端点中删除该Pod的IP地址,初始化完成之前状态默认为Faliure。如果容器不提供就绪探针默认为Success
常见的pod状态
- Pending Pod已被k8s系统接受,但是1个或者多个容器镜像尚未被出创建
- Running 该Pod已被绑定到一个节点,Pod中所有容器被创建
- Succeeded Pod中容器被成功终止,并且不会再重启
- Failed Pod的容器已终止完,至少有个容器因为失败终止,即容器以非0状态退出或者被系统终止
- Unknown 无法取得Pod状态,通常是因为与pod所在主机通信失败