Pod 的 phase 和 conditions 的区别

这篇具有很好参考价值的文章主要介绍了Pod 的 phase 和 conditions 的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言        

PodStatus对象

pod 的 phase 字段

phase 作用

有哪些 phase

pod 的 conditions 字段

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

pod 的 conditions 的作用

pod 的 conditions 分类

conditions设计原则

condition字段内容


前言        

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

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

Pod 的 phase 和 conditions 的区别

  • 运行中(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 和 conditions 的区别

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 的 phase 和 conditions 的区别

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 的 phase 和 conditions 的区别

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-conditionsPod 的 phase 和 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类型定义如下所示:文章来源地址https://www.toymoban.com/news/detail-489412.html

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"`
}

到了这里,关于Pod 的 phase 和 conditions 的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 修改k8s pod的挂载目录

    2024年02月14日
    浏览(39)
  • Kubernetes详解(十五)——Pod对象创建过程

    今天继续给大家介绍Linux运维相关知识,本文主要内容是Pod对象创建过程。 Pod对象是Kubernetes集群的基础对象,其创建过程如下所示: 从上图中可以看出,Pod的创建过程主要有以下步骤: 1、用户通过kubele或者其他API客户端提交Pod创建指令。 2、API将Pod对象的相关信息存入ETC

    2024年02月05日
    浏览(32)
  • k8s-kubectl命令详解、Pod创建过程、Pod的生命周期、定制Pod、资源对象文件

    kubectl是用于管理Kubernetes集群的命令行工具 kubectl [command] [TYPE] [NAME] [flags] command:子命令,如create,get,describe,delete type:资源类型,可以表示为单数,复数或缩写形式 name:资源的名称,如果省略,则显示所有资源信息 flags:指定可选标志,或附加的参数 子命令 说明 help

    2024年03月22日
    浏览(42)
  • 【云原生】kubernetes深入理解Pod对象:基本管理

    目录 一、Pod 基本概念 二、pod 常用命令 三、Pod 资源共享实现机制 3.1 共享网络 3.2 共享存储 四、Pod 状态管理 五、重启策略和健康检查 5.1 基本概念 5.1.1 重启策略 5.1.2 健康检查有以下三种类型: 5.1.3 支持以下三种检查方法: 5.2 示例讲解 5.2.1 就绪健康检查示例 六、Pod环境变

    2024年02月07日
    浏览(51)
  • k8s资源对象(1) namespace&&pod

    Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。 默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的

    2024年01月18日
    浏览(50)
  • 【探索 Kubernetes|作业管理篇 系列 9】Pod 的服务对象

    大家好,我是秋意零。 在上一篇中,我们介绍了 Pod 的生命周期以及区分 Pod 字段的层次级别,相信你对此有了充分的认识。 今天,我们还会接着以 Pod 展开,说说它的 “服务对象”,一听就知道是对 Pod 提供服务的对象,接下来就一起来看看, “服务对象” 是否有趣吧!!

    2024年02月09日
    浏览(35)
  • 在K8S中,Pod不同探针有何区别?

    在Kubernetes(K8s)中,Pod可以配置三种类型的探针来监控容器的运行状态: 存活探针(LivenessProbe) : Liveness探针用于检查容器是否仍处于正常运行状态。如果liveness探针连续多次失败(未通过健康检查),Kubernetes会认为该容器内部已经发生无法恢复的错误,kubelet会终止并重

    2024年02月19日
    浏览(41)
  • k8s企业级应用系列(二):对象管理及Pod原理

    本节介绍对象的相关概念和管理机制。只有了解了这些机制,我们才能轻松的对k8s资源进行编排。 1 对象 Object k8s对象 即是对应用程序、工作负载、存储、网络等资源的抽象表示,如 image、pod、node、volume、service 等。集群中每个对象都有一个 名称 来标识其在 同类资源中 的

    2024年04月14日
    浏览(46)
  • 在K8S中,静态、动态、自主式Pod有何区别?

    在Kubernetes(简称K8s)中,静态Pod、自主式Pod和动态Pod是不同管理方式下的Pod类型,它们的区别主要体现在创建和管理方式上: 静态Pod : 静态Pod是由kubelet直接管理的,其配置文件存储在节点本地而非通过API Server创建。 kubelet会根据指定路径下的静态Pod配置文件来创建和管理

    2024年02月19日
    浏览(34)
  • 【云原生|探索 Kubernetes 系列 8】探究 Pod 的 API 对象属性级别与重要字段用法

    大家好,我是秋意零。 本专栏上一篇中,我们介绍了 Pod 的核心思想以及 Pod 的工作原理。今天我们还是探讨 Pod ,聊一聊 Pod 的基本概念。 👿 简介 🏠 个人主页 : 秋意零 🧑 个人介绍 :在校期间参与众多云计算相关比赛,如:🌟 “省赛”、“国赛” ,并斩获多项奖项荣

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包