在Kubernetes (k8s) 中,Pod是应用的最小可部署单元,它包含了至少一个容器以及存储资源和网络标识符。Pod的生命周期从创建开始,经历一系列阶段直至最终终止或被删除。以下是Pod生命周期的主要阶段:
- 创建(Creation):
- 用户通过创建一个新的Pod对象来请求Kubernetes调度器为Pod分配资源。
- Kubernetes系统会赋予Pod一个唯一的ID(UID)。
- 调度(Scheduling):
- Pod被提交到集群后,调度器根据节点资源可用性和Pod的资源需求、亲和性/反亲和性规则等选择合适的节点,并将Pod绑定到该节点上。
- 初始化容器启动(Init Containers Execution):
- 若Pod定义中包含初始化容器(init containers),这些容器会在主容器启动前按顺序执行,用于设置运行主容器所需的条件或环境。
- 镜像拉取(Image Pulling):
- 主容器对应的镜像如果没有在节点上,则kubelet负责从注册表中拉取镜像。
- 容器创建与运行(Container Creation and Running):
- kubelet根据Pod Spec创建并启动主容器。
- 容器状态会经历从
Pending
(等待中)到Running
(运行中)的变化。
- 健康检查与就绪检测(Liveness and Readiness Probes):
- 在容器运行期间,kubelet可以配置并执行健康检查(liveness probes)和就绪检查(readiness probes)以确保容器正常工作。
- Liveness Probe用于判断容器是否存活,若失败则可能重启容器。
- Readiness Probe用于决定容器是否准备好接收流量,只有当容器处于ready状态时,Service才会将其添加到服务端点列表中。
- 重启策略(Restart Policy):
- 根据Pod的重启策略(
Always
、OnFailure
或Never
),kubelet会决定在容器退出时应采取何种行动。
- 清理(Termination):
- 当Pod被删除或者由于某种原因需要终止时,kubelet会按照预定义的优雅关闭策略通知容器停止服务,并等待一段时间让容器完成任何必要的清理操作。
- 清理完成后,kubelet会真正删除Pod及其相关的容器实例和其他资源。
- 终止(Terminated):
- Pod完全从节点上移除,不再占用任何资源。
综上所述,整个Pod生命周期由Kubernetes系统自动管理,每个阶段都体现了对容器化应用程序生命周期精细控制的能力。