Pod 的 phase 和 conditions 的区别

news2024/11/26 17:26:00

目录

前言        

PodStatus对象

pod 的 phase 字段

phase 作用

有哪些 phase

pod 的 conditions 字段

pod 有了 phase,为什么还要有 conditions

pod 的 conditions 的作用

pod 的 conditions 分类

conditions设计原则

condition字段内容


前言        

        Kubernetes 中, pod 从创建到成功运行会分别处于不同的阶段,每个阶段又分为不同的状态,本文将简单介绍这个环节。

在 K8S 源码中,使用了 PodPhase 这个变量定义这几个阶段信息,如下图所示:

  • 运行中(Pod Running):该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。
  • 等待中(Pod Pending): 创建 Pod 的请求已被 Kubernetes 系统接受,但有一个或者多个容器镜像尚未创建。可能的原因有,写数据到etcd,调度,pull镜像,启动容器这四个阶段中的任何一个阶段,pending 伴随的事件通常会有:ADDED, Modified这两个事件的产生。等待时间包括调度 Pod 的时间和下载镜像的时间,这可能需要花些时间。
  • 正常终止(Pod Succeeded):pod中的所有的容器已经正常的自行退出,并且k8s永远不会自动重启这些容器,一般会是在部署job的时候会出现。
  • 异常停止(Pod Eailed):Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或者被系统终止。
  • 未知状态(Pod Unkonwn):出于某种原因,无法获得Pod的状态,通常是由于与Pod主机通信时出错。

 实际上还有一中状态Terminating,在代码和文档中都没有说明,但却是存在。这种情况出现杂无法获取所在主机的资源情况,一直在尝试建立连接。

PodStatus对象

Pod 有一个 PodStatus 对象,其中包含一个 PodConditions 数组。Pod 可能通过也可能未通过其中的一些状况测试。

pod 的 phase 字段

phase 作用

用于描述、查看、分析 pod 当前处于什么状态。

有哪些 phase

通常情况下,在 pod 的生命周期中,每个 pod 会处于 5 个不同的 phase:pending,running,succeed,failed,unknown。同一时间,1 个 pod 只能处于 1 个 phase。

  • 当 pod 刚被创建时,它处于 pending 这个 phase,等待被调度;
  • 如果 pod 中的一个或多个 container 处于运行状态时,那么 pod 就处于 running phase;
  • 如果 pod 中的 container 不是被设置为无限运行下去的情况下(比如执行定时任务或一次性任务),且 container 运行结束,那么 pod 处于 succeed phase;
  • 反之,如果 pod 中的 container 不是被设置为无限运行下去的情况下(比如执行定时任务或一次性任务),且 container 运行失败,那么 pod 处于 failed phase;
  • 如果 pod 所在 node 上的 kubelet 出现故障或意外,而停止向 Kubernetes API server 报告它所在 node 上的 pod 的状态时,那么此时该 node 上的 pod 就处于 unknown phase;

pod 的 conditions 字段

pod 有了 phase,为什么还要有 conditions

因为 pod 的 phase 比较简单的描述了 pod 处于哪个具体情况,但是没有明确说明具体原因。

pod 的 conditions 的作用

用于描述 1 个 pod 当前是否处于哪个 phase,以及处于该 phase 的原因。及作为一个辅助手段,详细的展示 pod 的状态信息,用于问题排查分析时提供更多依据。同一时间,1 个 pod 可能处于多个 conditions。

Pod 的 conditions 表示了 Pod 的一些条件,是一个数组。pod的 conditions 状况默认有4个,它是由Pod controller生成,里面包含一些 Pod 必须满足的条件,只有所有的条件为 True 时,Pod 才可以提供服务。

pod 的 conditions 分类

通常分为 4 个 conditions:PodScheduled,Initialized,ContainersReady,Ready。见名知意:

  • PodScheduled:意味着 pod 是否已经被调度到某个 node;
  • Initialized:Pod 的 init containers 是否全部完成;
  • ContainersReady:pod 中的所有 container 是否全部就绪;但这并不意味着 pod 也 ready;
  • Ready:pod 是否就绪;只有 pod 中的所有 container 就绪,且 pod 的 readiness probe 也完成了,意味着 pod 可以对外提供服务了,才是 ready 状态。

Pod Lifecycle | KubernetesThis page describes the lifecycle of a Pod. Pods follow a defined lifecycle, starting in the Pending phase, moving through Running if at least one of its primary containers starts OK, and then through either the Succeeded or Failed phases depending on whether any container in the Pod terminated in failure.Whilst a Pod is running, the kubelet is able to restart containers to handle some kind of faults. Within a Pod, Kubernetes tracks different container states and determines what action to take to make the Pod healthy again.https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-conditions

conditions设计原则

   conditions寄居于资源对象的status字段中,与status其他字段值一样都用来表示资源的状态。 不过conditions的设计初衷是提供一种通用的数据结构表示资源的状态,它通常能够提供比status其他字段更详细的信息(比如状态切换时间、更新时间),conditions实际上是一种扩展机制,外部监控程序可以根据conditions无差别地监控各种资源的状态,而不必过分关注资源对象status中的其他信息。

        通常status.conditions字段类型为切片,切片中的每个元素表示资源的某个状态,该状态由特定的控制器更新,比如Deployment控制器会更新deployment对象的status.conditions信息。conditions作为扩展机制,它还支持第三方控制器增加新的状态。通常status.conditions中的信息由控制器根据资源的status其他字段计算出来。

condition字段内容

通常一个condition必须包含type(状态类型)和status(状态值)两个信息。在Kubernetes v1.19版之前,关于condition并没有统一的标准,导致众多API都自行定义了condition。比如:

  • Deployment使用的Condition为type DeploymentCondition struct;
  • Pod使用的Condition为type PodCondition struct;

庆幸的是,在Kubernetesv1.19版本社区提供了一个标准的condition类型定义,由于兼容性考虑,Kubernetes既有的API不一定能采用这一标准类型,但对于后续新增的API将会使用这一标准类型,并且笔者建议用户设计的CRD扩展也应使用这一标准类型。

标准的condition类型定义如下所示:

type ConditionStatus string
 
const (
    ConditionTrue    ConditionStatus = "True"
    ConditionFalse   ConditionStatus = "False"
    ConditionUnknown ConditionStatus = "Unknown"
)
 
type Condition struct {
    // 类型(使用驼峰风格),如”Available“。
    Type string
    // 状态(枚举值:”True“、”False“和”Unknown“)。
    Status ConditionStatus
    // 观察到的generation。
    // 如果ObservedGeneration 比metada.generation小,说明不是最新状态。
    // +optional
    ObservedGeneration int64
    // 上次变化时间
    LastTransitionTime Time
    // 状态变化原因(使用驼峰风格),如”NewReplicaSetAvailable“
    Reason string
    // 描述信息,如”Deployment has minimum availability“
    Message string `json:"message" protobuf:"bytes,6,opt,name=message"`
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/649710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高颜值测试报告- XTestRunner

基于unittest框架现代风格测试报告。 特点 漂亮测试报告让你更愿意编写测试。支持单元、Web UI、API 各种类型的测试。支持Selenium运行失败/错误自动截图。支持失败重跑。支持标签黑、白名单。支持发邮件功能。支持多语言en、zh-CN 等。支持HTML/XML不同格式的报告。 安装 …

ADG-rac备库的问题处理

第一次配置rac to rac的的adg,ADG过程就不叙述了,备库同步完成后,使用srvctl加入集群时未报错,但是使用crsctl status res -t查看状态时,发现了问题,如下图 ASM1:/home/gridhydb1> crsctl status res -…

达梦数据库DSC集群搭建:两节点与多节点(三节点)集群搭建

目录 说明... 4 两节点集群搭建... 5 一、创建共享磁盘... 6 1、DMDSC01添加硬盘... 6 2、DMDSC02添加共享磁盘... 8 二、搭建DMDSC集群... 12 1、安装完成数据库配置资源限制... 12 2、添加用户变量... 13 3、共享磁盘分区... 14 4、新建udev规则文件-裸设备绑定...…

如何将PDF转换为Excel?这4个方法请收好

PDF(便携式文档格式)因其安全且易于访问而广泛用于在线共享和存档文档。但是,很多时候您可能需要从 PDF 文档中提取数据以在 Excel 中使用它。这是将 PDF 转换为 Excel 发挥作用的地方。在本文中,我们将探讨将 PDF 文件转换为 Exc…

HarmonyOS学习路之开发篇—Java UI框架(自定义组件与布局 一)

HarmonyOS提供了一套复杂且强大的Java UI框架,其中Component提供内容显示,是界面中所有组件的基类。ComponentContainer作为容器容纳Component或ComponentContainer对象,并对它们进行布局。 Java UI框架也提供了一部分Component和ComponentC…

linux系统总结

linux系统总结: linux系统总结 一、网络:1.七层模型:2.三次握手,四次挥手:3.网络层:ARP,icmp4.总结tcp和udp的不同:5.端口号的作用:6.VRRP的原理:SNAT DNAT7…

论文解读 | 超越人类智慧!类脑多模态混合神经网络助力机器人精准定位

原创 | 文 BFT机器人 01 研究内容 这篇论文的研究内容是基于大脑启发的多模态混合神经网络,用于机器人地点识别。研究人员设计了一个名为NeuroGPR的系统,该系统可以模拟大脑的多模态感知机制,从传统和神经形态传感器中编码和整合多模态线索&a…

消息队列的基本概念

每种消息队列都有自己的一套消息模型,像队列(Queue)、主题(Topic)或是分区(Partition)这些名词概念,在每个消息队列模型中都会涉及一些,含义还不太一样。 为什么出现这种…

1.8C++流提取运算符重载

C流提取运算符重载 在 C中,流提取运算符(>>)是用于从流中提取数据的运算符。 C中的流提取运算符可以被重载,使得程序员可以自定义输入对象的方式,更方便地输入自定义的数据类型,也可以使得输入更加…

阿里云轻量应用服务器和云服务器ECS区别(终于懂了)

阿里云服务器ECS和轻量应用服务器有什么区别?云服务器ECS是明星级云服务器,轻量应用服务器可以理解为简化版的云服务器ECS,轻量适用于单机应用,云服务器ECS适用于集群类高可用高容灾应用,阿里云百科来详细说下阿里云轻…

dbGet 快速学习教程

dbGet是innovus/encounter工具自带的"database access command"命令中的一部分,它几乎可以用来获取设计相关的一切信息。 输入dbGet 按[Tab]键,能看到三个选项,分别是head / top /selected。这三个选项所代表的意义如下: head --…

Vue3对于一个前端来讲意味着什么?

最近很多技术网站,讨论的最多的无非就是Vue3了,大多数都是Composition API和基于Proxy的原理分析。但是今天想着跟大家聊聊,Vue3对于一个低代码平台的前端更深层次意味着什么? 首先,Vue是前端三大主流框架之一&#xf…

python,如何设置定时执行python代码-windows本地

最近写了一个python小程序,希望能每天定时执行,但是又不想用jenkins这样的工具,后来发现windows本地就可以设置,而且很好用,具体步骤如下: 首先,需确保本地python代码已编写好,环境…

c++创建对象常见的坑

c创建对象常见的坑 创建对象的时候不要在对象名后面加空的圆括号,编译器误认为是声明函数。(如果没有构造函数、构造函数没有参数、构造函数的参数都有默认参数)在构造函数名后面加括号和参数不是调用构造函数,是创建匿名对象。以…

【有奖调研】HarmonyOS新物种,鸿蒙流量新阵地——元服务邀你来答题!

“聊技术无话不谈,一起来吹吹元服务!畅聊你对元服务的想法,说不定,你就能撬动元服务的爆发增长!” 元服务(即原子化服务)是华为“轻量化”服务的新物种,可提供全新的服务和交互方式…

人工智能(pytorch)搭建模型12-pytorch搭建BiGRU模型,利用正态分布数据训练该模型

大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型12-pytorch搭建BiGRU模型,利用正态分布数据训练该模型。本文将介绍一种基于PyTorch的BiGRU模型应用项目。我们将首先解释BiGRU模型的原理,然后使用PyTorch搭建模型…

uniApp -- 学习笔记(vue3+ts)

uniApp学习笔记目录 一.关于界面节点信息 6月15 一.关于界面节点信息 6月15 uniApp官网介绍 (一) 个人理解是官网返回一个 SelectorQuery 对象实例。 并且可以在这个实例上使用 select 等方法选择节点,并使用 boundingClientRect 等方法选择…

使用 Sharesheet分享Android 应用链接

使用 Sharesheet分享Android 应用链接 使用 Sharesheet 进行丰富的链接共享 Android App Links 允许您的应用程序打开网页链接,而不是使用网络浏览器。处理这些深层链接已在我们的《深层链接入门课程》中介绍过。除了能够打开深层链接外,您的应用程序还…

《Lua程序设计》--学习8

编译,执行和错误 编译 可以认为dofile函数就是这样: loadfile函数从文件中加载Lua代码段,但它不会运行代码,只是编译代码,然乎将编译后的代码段作为一个函数返回 函数loadfile更灵活。在发生错误的情况中&#xff0…

100种思维模型之排列组合思维模型-78

说到模型,一般人会觉得特别难,会觉得是学霸级别的人才能做出来的高科技。 然实际上并不是! 西方人常说Model,模型在西方人眼里是一个非常常见的词。 查理芒格,多元思维模型倡导者和践行者,他说任何能够帮助…