当前位置: 首页 > news >正文

Kubernetes Pod的生命周期概述

概述

在Kubernetes的世界中,Pod作为最基本的应用进程单元, 其生命周期也代表着应用进程的整个生命周期。了解其生命周期是掌握云计算中一个计算单元如何在Kubernetes世界周转的基石。

本期文章主要针对于Pod的生命周期的不同阶段进行介绍,让读者能够对Pod 从创建Pending到运行Running,然后到如何优雅的退出Terminating等整个周期有个框架性的了解,从而在实际工作中遇到问题和难题的时候能够更快定位并解决。

Pod Lifecycle

Kubernetes官方网站将Pod 的生命周期通过PodStatus 分为以下五种:

PendingThe Pod has been accepted by the Kubernetes cluster, but one or more of the containers has not been set up and made ready to run. This includes time a Pod spends waiting to be scheduled as well as the time spent downloading container images over the network.
RunningThe Pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting.
SucceededAll containers in the Pod have terminated in success, and will not be restarted.
FailedAll containers in the Pod have terminated, and at least one container has terminated in failure. That is, the container either exited with non-zero status or was terminated by the system, and is not set for automatic restarting.
UnknownFor some reason the state of the Pod could not be obtained. This phase typically occurs due to an error in communicating with the node where the Pod should be running.

Pending

当Pod 通过各种Controller(比如Deployment, StatefulSet, DaemonSet等)创建后,Kubernetes Scheduler 接受Pod的创建,在真正Pod 运行起来Running 之前,需要等待某些条件完成后才能进入运行起来,这些条件包括:

  1. 集群中有足够多的内存和CPU来运行该Pod
  2. Pod中定义的Container Image拉取完毕
  3. ...

当且仅当所以运行的条件都满足之后,Pod 才由Pending 变为Running. 

Running

Running代表着Pod 正常运行的过程,其中Running 说明Pod是时时刻刻可以介绍外来请求并相应的。但是如果一个Pod中进程挂了,Kubernetes 如果更新并了解Pod的内部运行程序的最新情况呢?这个就需要最Pod上配置readinessProbe 和livenessProbe 了。通过这两个配置让你告诉kubernetes的kubelet 如何实时监控并定义你的Pod中容器的运行情况。

livenessProbe 和readinessProbe的官方定义如下:

livenessProbe

Indicates whether the container is running. If the liveness probe fails, the kubelet kills the container, and the container is subjected to its restart policy. If a container does not provide a liveness probe, the default state is Success.

只有livenessProbe 通过,kubelet才认为该container是“活着的”,否则将直接重启container。

readinessProbe

Indicates whether the container is ready to respond to requests. If the readiness probe fails, the endpoints controller removes the Pod's IP address from the endpoints of all Services that match the Pod. The default state of readiness before the initial delay is Failure. If a container does not provide a readiness probe, the default state is Success.

readinessProbe是让kubelet认为你的容器是“ready for服务”的,这个跟你的业务是绑定的。

比如你的Pod里面跑的是一个Nginx 的服务器,你想要跑一个www.abcde.com网站,然后返回“ok”.只有这样才算是真正的“ready for服务”。

status:
  conditions:
    - type: Ready                              # a built in PodCondition
      status: "False"
      lastProbeTime: null
      lastTransitionTime: 2018-01-01T00:00:00Z

如果readinessProbe返回False,那么对应的与网络相关的比如Service等组件会自动将该Pod 摘除下来,并将该Pod 置为“Unavailable”等并做出对应的行为。

其他类似的组件或者自定义的Controller也可以Pod.Status.Condition中的Ready项中的True or False 为基准做出对应的判断。

Succeeded Failed Unknown

这三种状态都代表Pod的非运行状态。

  • Succeeded 表示Container中的进程运行结束并return 0;
  • Failed 表示至少有一个Container 返回非0;
  • 而其它位置的状态的过程都可以归结为Unknown的状态。

当一个Pod是一个长期运行并接受请求并相应的服务时。这三个状态的Pod都不是想要的状态,Running才是其正常大部分时间需要的。

Terminating

当用户通过kubectl 或者kube-client对某个pod 发出delete的请求的时候,Pod就会触发并进入Terminating状态。直到Pod 被彻底删除并消失。

该状态中的Pod会根据用户的配置进入优雅退出(GracefulTermination)的流程。关于该流程会专门整理一篇文章来介绍。

总结

Pod作为最基本的应用进程单元, 其生命周期也代表着应用进程的整个生命周期。根据Pod状态来得知容器进程处于不同的阶段,是最快感知Kubernetes进程的方式。

本文是概述各个状态的基本介绍,大家感兴趣的话,会对其中细节一一展开介绍。有什么问题和意见欢迎留言指正。谢谢

相关文章:

  • LearnOpenGL-笔记-其二
  • DeepSeek-实用集成大礼包
  • 基于某著名企业IPD与质量管理体系融合的研发质量管理方案(64页PPT)
  • 【保姆级教程】使用 oh-my-posh 和 clink 打造个性化 PowerShell 和 CMD
  • 十二天-双指针技术:链表问题的高效解法
  • springboot433-基于SpringBoot的流浪猫爱心救助系统(源码+数据库+纯前后端分离+部署讲解等)
  • Fast DDS Security--多方密钥协商协议
  • 人脸识别之数据集中 PI20 和 CFMT 之间关联的模型预测贝叶斯(Python+论文代码实现)
  • 接口使用实例和Object类及内部类
  • 本地部署 DeepSeek R1 的几种常见方法
  • 在 UniApp 开发的网站中使图片能够缓存,不一直刷新
  • 委外订单不能删除提示领料未发量不能小于零
  • 【 PyQt】事件的触发:信号与槽
  • GitHub 项目版本管理与 Release 发布流程记录
  • HTTPS工作原理与安全机制详解(仅供参考)
  • 【RabbitMQ】事务
  • 查看端口被占用命令
  • FX-函数重载、重写(覆盖)、隐藏
  • Rust与Cargo版本关系(Rust版本、rustc、rustup)
  • 信息安全意识之安全组织架构图
  • 佩斯科夫:俄方代表团15日将在伊斯坦布尔等候乌克兰代表团
  • 《克莱默夫妇》导演罗伯特·本顿去世,终年92岁
  • 今天北京白天气温超30℃,晚间为何下冰雹?
  • 人才争夺战,二三线城市和一线城市拼什么?洛阳官方调研剖析
  • 脑血管支架:救命神器还是定时炸弹?听听医生的大实话
  • 最高降九成!特朗普签署降药价行政令落地存疑,多家跨国药企股价收涨