Pod 在其生命周期中只会被调度一次。 一旦 Pod 被调度(分派)到某个节点,Pod 会一直在该节点运行,直到 Pod 停止或者被终止。
Pod 会被创建、赋予一个唯一的 ID, 并被调度到节点,并在终止(根据重启策略)或删除之前一直运行在该节点。
如果一个节点死掉了,调度到该节点的 Pod 也会在给定超时期限结束后删除。
Pod的生命周期可以分为以下几个阶段:
Pending(等待中):Pod已经被创建,但还没有被调度到具体的节点上运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间。
Running(运行中):Pod已经被调度到节点上,Pod 中所有的容器都已被创建,至少有一个容器在运行。此时,Pod的状态为Running,在这个阶段,容器会一直运行,直到被终止或者删除。
Succeeded(成功):Pod中的所有容器已经成功地完成了它们的任务,并且退出了。此时,Pod的状态为Succeeded。
Failed(失败):Pod中的一个或多个容器已经失败或退出,也就是说,容器以非 0 状态退出或者被系统终止,此时,Pod的状态为Failed。
Unknown(未知):无法获取Pod的状态,通常是因为与 Pod 所在主机通信失败导致的。
如果某节点挂掉或者与集群中其他节点失联,Kubernetes 会将失联节点上运行的所有 Pod 的 状态设置为 Failed。
Pod 的 spec 中包含一个 restartPolicy 字段,这个字段就是Pod的重启策略,取值包括 Always、OnFailure 和 Never。默认值是 Always
Always(总是重启):当容器意外终止时,Kubernetes 会自动重启该容器,无论终止的原因是什么。
OnFailure(仅在失败时重启):只有当容器以非零状态码退出时(即失败时),Kubernetes 才会自动重启该容器。
Never(永不重启):当容器终止时,Kubernetes 不会自动重启该容器。
kubelet重启失效容器的时间间隔以sync-frequency乘以2n来计算,例如1、2、4、8倍等,最长延时5min,并且在成功重启后的10min后重置该时间。
Pod的重启策略(RestartPolicy)应用于Pod内的所有容器,并且仅在Pod所处的Node上由kubelet进行判断和重启操作。当某个容器异常退出或者健康检查失败时,kubelet将根据RestartPolicy的设置来进行相应的操作。