k8s–基础–12.2–pod–生命周期,状态,重启策略
1、pod生命周期
- 在Pod被创建时,会被指派一个唯一的ID,并被调度到Node中,直到Pod被终止或删除。
- 如果Pod所在的Node宕机,原先的Pod不会被重新调度,它将被完全相同的Pod所替代。
- 如果Pod被删除,即使完全相同的副本被创建,则相关存储卷等也会被删除,并会为Pod创建一个新的存储卷等。
2、pod生命周期包含什么内容
- Init容器
- 主容器
- 主容器启动后钩子
- 容器结束前钩子
- 容器探针
2.1、Init容器(初始化容器)
- 是做初始化工作的容器。
- 可以有一个或多个,如果是多个,按照定义的顺序依次执行。
- 由于一个Pod里的存储卷是共享的,所以Init容器里产生的数据可以被主容器使用到
- Init容器可以在多种K8S资源里被使用到,如
- Deployment
- DaemonSet
- StatefulSet
- Job等
2.1.1、查看定义
kubectl explain pods.spec
2.2、主容器
- Init容器完成后,主容器才启动。
- 主容器有2个钩子
- 主容器启动后钩子(postStart)
- 容器结束前钩子(preStop)
2.2.1、主容器启动后钩子(postStart)
- 在主容器被创建后立刻触发
- 功能:通知容器它已经被创建
- 如果该钩子对应的hook(构子) handler方法执行失败,则该容器会被杀死,并且根据该容器的重启策略决定是否要重启该容器
- 这个钩子不需要传递任何参数
2.2.2、容器结束前钩子(preStop)
- 该钩子在容器被删除前触发,其所对应的hook(构子) handler方法 必须在 删除该容器的请求发送给Docker daemon之前完成。
- 在该钩子对应的hook(构子) handler方法完成后不论执行的结果如何,Docker daemon会发送一个SGTERN信号量给Docker daemon来删除该容器
- 这个钩子不需要传递任何参数
2.2.3、查看定义
# postStart定义
kubectl explain pods.spec.containers.lifecycle.postStart
# preStop定义
kubectl explain pods.spec.containers.lifecycle.preStop
2.3、容器探针
- 容器存活探针
- 容器就绪探针
2.3.1、livenessProbe
- 判断容器是否存活。
- 如果存活探测失败
- kubelet 会杀死容器,并且容器将受到其重启策略的影响。
- 如果容器不提供存活探针,则默认状态为Success。
2.3.2、readinessProbe
- 用于判断容器是否启动完成。
- 如果就绪探测失败,端点控制器将从与 Pod 匹配的所有Service 的端点中删除该 Pod 的 IP 地址。
- 初始延迟之前的就绪状态默认为Failure。
- 如果容器不提供就绪探针,则默认状态为Success
2.3.3、查看定义
# livenessProbe定义
kubectl explain pods.spec.containers.livenessProbe
# readinessProbe定义
kubectl explain pods.spec.containers.readinessProbe
3、状态
3.1、Pending:挂起
3.1.1、场景
- 我们在请求创建pod时,条件不满足,调度没有完成,没有任何一个节点能满足调度条件。
- 已经创建了但是没有适合它运行的节点,调度没有完成。
- API server已经创建该server,但pod内有一个或多个容器的镜像还未创建,可能在下载中
3.2、Running:运行状态
Pod内所有的容器已创建,且至少有一个容器处于运行状态,正在启动或重启状态
3.3、Failed:表示失败
Pod内所有容器都已退出,或者至少有一个容器退出失败
3.4、Succeeded:表示成功状态
3.5、Unknown:未知状态
如果节点之上的kubelet本身出故障,那么api server就连不上kubelet,得不到信息了,就会看Unknown
4、重启策略
4.1、策略
4.1.1、Always
- 只要容器挂了就重启
- 默认重启策略
4.1.2、OnFailure
只有容器状态为Failed的时候才重启
1. 容器终止运行,且退出码不为0
4.1.3、Never
从不重启容器
4.2、重启策略定义
kubectl explain pods.spec.restartPolicy