Pod的生命周期
本页面讲述Pod的生命周期。Pod遵循一个预定义的生命周期,起始于阶段,如果至少其中有一个主要容器正常启动,则进入,之后取决于Pod中是否有容器以失败状态结束而进入Succeeded或者Failed阶段。
在Pod运行期间,能够重启容器以处理一些失效场景。在Pod内部,KuberNetes跟踪不同容器的状态并确定使Pod重新变得健康所需要采取的动作。
在KubernetesAPI中,Pod包含规约部分和实际状态部分。Pod对象的状态包含了一组Pod状况(Conditions)。如果应用需要的话,你也可以向其中注入自定义的就绪性信息。
Pod在其生命周期中只会被调度一次。一旦Pod被调度(分派)到某个节点,Pod会一直在该节点运行,直到Pod停止或者被终止。
Pod生命期
和一个个独立的应用容器一样,Pod也被认为是相对临时性(而不是长期存在)的实体。Pod会被创建、赋予一个唯一的ID(UID),并被调度到节点,并在终止(根据重启策略)或删除之前一直运行在该节点。
如果一个节点死掉了,调度到该节点的Pod也被计划在给定超时期限结束后删除。

Pod自身不具有自愈能力。如果Pod被调度到某节点而该节点之后失效,Pod会被删除;类似地,Pod无法在因节点资源耗尽或者节点维护而被驱逐期间继续存活。Kubernetes使用一种高级抽象来管理这些相对而言可随时丢弃的Pod实例,称作控制器。
任何给定的Pod(由UID定义)从不会被“重新调度(rescheduled)”到不同的节点;相反,这一Pod可以被一个新的、几乎完全相同的Pod替换掉。如果需要,新Pod的名字可以不变,但是其UID会不同。
如果某物声称其生命期与某Pod相同,例如存储卷,这就意味着该对象在此Pod(UID亦相同)存在期间也一直存在。如果Pod因为任何原因被删除,甚至某完全相同的替代Pod被创建时,这个相关的对象(例如这里的卷)也会被删除并重建。
Pod阶段
Pod的字段是一个PodStatus对象,其中包含一个字段。
Pod的阶段(Phase)是Pod在其生命周期中所处位置的简单宏观概述。该阶段并不是对容器或Pod状态的综合汇总,也不是为了成为完整的状态机。
Pod阶段的数量和含义是严格定义的。除了本文档中列举的内容外,不应该再假定Pod有其他的值。
下面是可能的值:
取值 | 描述 |
---|---|
(悬决) | Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间。 |
(运行中) | Pod 已经绑定到了某个节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。 |
(成功) | Pod 中的所有容器都已成功终止,并且不会再重启。 |
(失败) | Pod 中的所有容器都已终止,并且至少有一个容器是因为失败终止。也就是说,容器以非 0 状态退出或者被系统终止。 |
(未知) | 因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败。 |
如果某节点死掉或者与集群中其他节点失联,Kubernetes会实施一种策略,将失去的节点上运行的所有Pod的设置为。
容器状态
Kubernetes会跟踪Pod中每个容器的状态,就像它跟踪Pod总体上的阶段一样。你可以使用容器生命周期回调来在容器生命周期中的特定时间点触发事件。
一旦调度器将Pod分派给某个节点,kubelet就通过容器运行时开始为Pod创建容器。容器的状态有三种:(等待)、(运行中)和
Terminated
(已终止)。
要检查Pod中容器的状态,你可以使用
kubectldescribepod
。其输出中包含Pod中每个容器的状态。
每种状态都有特定的含义:
Waiting(等待)
如果容器并不处在或
Terminated
状态之一,它就处在状态。处于状态的容器仍在运行它完成启动所需要的操作:例如,从某个容器镜像仓库拉取容器镜像,或者向容器应用Secret数据等等。当你使用来查询包含状态的容器的Pod时,你也会看到一个Reason字段,其中给出了容器处于等待状态的原因。
Running(运行中)
状态表明容器正在执行状态并且没有问题发生。如果配置了回调,那么该回调已经执行且已完成。如果你使用来查询包含状态的容器的Pod时,你也会看到关于容器进入状态的信息。
Terminated(已终止)
处于
Terminated
状态的容器已经开始执行并且或者正常结束或者因为某些原因失败。如果你使用来查询包含
Terminated
状态的容器的Pod时,你会看到容器进入此状态的原因、退出代码以及容器执行期间的起止时间。
如果容器配置了回调,则该回调会在容器进入
Terminated
状态之前执行。
容器重启策略
Pod的中包含一个
restartPolicy
字段,其可能取值包括Always、OnFailure和Never。默认值是Always。
restartPolicy
适用于Pod中的所有容器。
restartPolicy
仅针对同一节点上的容器重启动作。当Pod中的容器退出时,会按指数回退方式计算重启的延迟(10s、20s、40s、…),其最长延迟为5分钟。一旦某容器执行了10分钟并且没有出现问题,对该容器的重启回退计时器执行重置操作。
Pod状况
Pod有一个PodStatus对象,其中包含一个PodConditions数组。Pod可能通过也可能未通过其中的一些状况测试。
字段名称 | 描述 |
---|---|
Pod 状况的名称 | |
表明该状况是否适用,可能的取值有 ““, “” 或 ““ | |
lastProbeTime
|
上次探测 Pod 状况时的时间戳 |
lastTransitionTime
|
Pod 上次从一种状态转换到另一种状态时的时间戳 |
机器可读的、驼峰编码(UpperCamelCase)的文字,表述上次状况变化的原因 | |
人类可读的消息,给出上次状态转换的详细信息 |
Pod就绪态
FEATURESTATE:Kubernetesv1.14[stable]
你的应用可以向PodStatus中注入额外的反馈或者信号:PodReadiness(Pod就绪态)。要使用这一特性,可以设置Pod规约中的
readinessGates
列表,为kubelet提供一组额外的状况供其评估Pod就绪态时使用。
就绪态门控基于Pod的
status.conditions
字段的当前值来做决定。如果Kubernetes无法在
status.conditions
字段中找到某状况,则该状况的状态值默认为“”。
这里是一个例子:
kind: Pod...spec:readinessGates:- conditionType: "www.example.com/feature-1"status:conditions:- type: Ready# 内置的 Pod 状况status: "False"lastProbeTime: nulllastTransitionTime: 2018-01-01T00:00:00Z- type: "www.example.com/feature-1"# 额外的 Pod 状况status: "False"lastProbeTime: nulllastTransitionTime: 2018-01-01T00:00:00ZcontainerStatuses:- containerID: docker://abcd...ready: true...
你所添加的Pod状况名称必须满足Kubernetes标签键名格式。
Pod就绪态的状态
命令
kubectlpatch
不支持修改对象的状态。如果需要设置Pod的
status.conditions
,应用或者Operators需要使用操作。你可以使用Kubernetes客户端库之一来编写代码,针对Pod就绪态设置定制的Pod状况。
对于使用定制状况的Pod而言,只有当下面的陈述都适用时,该Pod才会被评估为就绪:
当Pod的容器都已就绪,但至少一个定制状况没有取值或者取值为,将Pod的状况设置为
ContainersReady
。
容器探针
probe是由kubelet对容器执行的定期诊断。要执行诊断,kubelet既可以在容器内执行代码,也可以发出一个网络请求。
检查机制
使用探针来检查容器有四种不同的方法。每个探针都必须准确定义为这四种机制中的一种:
探测结果
每次探测都将获得以下三种结果之一:
探测类型
针对运行中的容器,可以选择是否执行以下三种探针,以及如何针对探测结果作出反应:
何时该使用存活态探针?
FEATURESTATE:Kubernetesv1.0[stable]
如果容器中的进程能够在遇到问题或不健康的情况下自行崩溃,则不一定需要存活态探针;将根据Pod的
restartPolicy
自动执行修复操作。
如果你希望容器在探测失败时被杀死并重新启动,那么请指定一个存活态探针,并指定
restartPolicy
为“”或“”。
何时该使用就绪态探针?
FEATURESTATE:Kubernetesv1.0[stable]
如果要仅在探测成功时才开始向Pod发送请求流量,请指定就绪态探针。在这种情况下,就绪态探针可能与存活态探针相同,但是规约中的就绪态探针的存在意味着Pod将在启动阶段不接收任何数据,并且只有在探针探测成功后才开始接收数据。
如果你希望容器能够自行进入维护状态,也可以指定一个就绪态探针,检查某个特定于就绪态的因此不同于存活态探测的端点。
如果你的应用程序对后端服务有严格的依赖性,你可以同时实现存活态和就绪态探针。当应用程序本身是健康的,存活态探针检测通过后,就绪态探针会额外检查每个所需的后端服务是否可用。这可以帮助你避免将流量导向只能返回错误信息的Pod。
如果你的容器需要在启动期间加载大型数据、配置文件或执行迁移,你可以使用启动探针。然而,如果你想区分已经失败的应用和仍在处理其启动数据的应用,你可能更倾向于使用就绪探针。
何时该使用启动探针?
FEATURESTATE:Kubernetesv1.18[beta]
对于所包含的容器需要较长时间才能启动就绪的Pod而言,启动探针是有用的。你不再需要配置一个较长的存活态探测时间间隔,只需要设置另一个独立的配置选定,对启动期间的容器执行探测,从而允许使用远远超出存活态时间间隔所允许的时长。
如果你的容器启动时间通常超出
initialDelaySeconds+failureThreshold×periodSeconds
总值,你应该设置一个启动探测,对存活态探针所使用的同一端点执行检查。
periodSeconds
的默认值是10秒。你应该将其
failureThreshold
设置得足够高,以便容器有充足的时间完成启动,并且避免更改存活态探针所使用的默认值。这一设置有助于减少死锁状况的发生。
Pod的终止
由于Pod所代表的是在集群中节点上运行的进程,当不再需要这些进程时允许其体面地终止是很重要的。一般不应武断地使用信号终止它们,导致这些进程没有机会完成清理操作。
设计的目标是令你能够请求删除进程,并且知道进程何时被终止,同时也能够确保删除操作终将完成。当你请求删除某个Pod时,集群会记录并跟踪Pod的体面终止周期,而不是直接强制地杀死Pod。在存在强制关闭设施的前提下,kubelet会尝试体面地终止Pod。
通常情况下,容器运行时会发送一个TERM信号到每个容器中的主进程。很多容器运行时都能够注意到容器镜像中
STopSIGNAL
的值,并发送该信号而不是TERM。一旦超出了体面终止限期,容器运行时会向所有剩余进程发送KILL信号,之后Pod就会被从API服务器上移除。如果或者容器运行时的管理服务在等待进程终止期间被重启,集群会从头开始重试,赋予Pod完整的体面终止限期。
下面是一个例子:
强制终止Pod
默认情况下,所有的删除操作都会附有30秒钟的宽限期限。
kubectldelete
命令支持
--grace-period=
选项,允许你重载默认值,设定自己希望的期限值。
将宽限期限强制设置为意味着立即从API服务器删除Pod。如果Pod仍然运行于某节点上,强制删除操作会触发立即执行清理操作。
执行强制删除操作时,API服务器不再等待来自的、关于Pod已经在原来运行的节点上终止执行的确认消息。API服务器直接删除Pod对象,这样新的与之同名的Pod即可以被创建。在节点侧,被设置为立即终止的Pod仍然会在被强行杀死之前获得一点点的宽限时间。
失效Pod的垃圾收集
对于已失败的Pod而言,对应的API对象仍然会保留在集群的API服务器上,直到用户或者控制器进程显式地将其删除。
控制面组件会在Pod个数超出所配置的阈值(根据
kube-controller-manager
的
terminated-pod-gc-threshold
设置)时删除已终止的Pod(阶段值为或)。这一行为会避免随着时间演进不断创建和终止Pod而引起的资源泄露问题。
怎么在kubernetes里面搭建hadoop集群
Kubernetes是一个开源项目,它把谷歌的集群管理工具引入到虚拟机和裸机场景中。 它可以完美运行在现代的操作系统环境(比如CoreOS和red Hat Atomic),并提供可以被你管控的轻量级的计算节点。 Kubernetes使用Golang开发,具有轻量化、模块化、便携以及可扩展的特点。 我们(Kubernetes开发团队)正在和一些不同的技术公司(包括维护着Mesos项目的MesoSphere)合作来把Kubernetes升级为一种与计算集群交互的标准方式。 Kubernetes重新实现了Google在构建集群应用时积累的经验。 这些概念包括如下内容:Pods:一种将容器组织在一起的方法;Replication Controllers:一种控制容器生命周期的方法(译者注:Replication Controller确保任何时候Kubernetes集群中有指定数量的pod副本(replicas)在运行);Labels:一种可以找到和查询容器的方法;Services:一个用于实现某一特定功能的容器组;因此,只要使用Kubernetes你就能够简单并快速的启动、移植并扩展集群。 在这种情况下,集群就像是类似虚拟机一样灵活的资源,它是一个逻辑运算单元。 打开它,使用它,调整它的大小,然后关闭它,就是这么快,就是这么简单。 Mesos和Kubernetes的愿景差不多,但是它们在不同的生命周期中各有不同的优势。 Mesos是分布式系统内核,它可以将不同的机器整合在一个逻辑计算机上面。 当你拥有很多的物理资源并想构建一个巨大的静态的计算集群的时候,Mesos就派上用场了。 有很多的现代化可扩展性的数据处理应用都可以在Mesos上运行,包括Hadoop、Kafka、Spark等,同时你可以通过容器技术将所有的数据处理应用都运行在一个基础的资源池中。 在某个方面来看,Mesos是一个比Kubernetes更加重量级的项目,但是得益于那些像Mesosphere一样的贡献者,Mesos正在变得更加简
苏教版一年级科学 大树是怎么长高的
一棵树的常高过程大概经过种子萌发、幼苗生长、成熟植株三个过程。 1、种子萌发:种子萌发是指种子从吸胀作用开始的一系列有序的生理过程和形态发生过程。 种子的萌发需要适宜的温度,适量的水分,充足的空气。 种子萌发时,首先是吸水。 种子浸水后使种皮膨胀、软化,可以使更多的氧透过种皮进入种子内部,同时二氧化碳透过种皮排出,里面的物理状态发生变化。 其次是空气,种子在萌发过程中所进行的一系列复杂的生命活动,只有种子不断地进行呼吸,得到能量,才能保证生命活动的正常进行;最后是温度,温度过低,呼吸作用受到抑制,种子内部营养物质的分解和其它一系列生理活动,都需要在适宜的温度下进行的。 2、幼苗生长:根茎叶等器官均已分化,能自行吸收营养,进行光合作用,累积养料,供细胞不断分化、分裂生长,朝着成熟植株生长。 3、成熟植株:植株成熟是指植物的各项器官均已分化成熟,能够开花结果。 扩展资料:树木的年龄将一根树木纵向剖开,我们在横截面上能看到很多圆圈圈,这就是树木的年轮。 树木茎干的韧皮部内侧有一圈细胞分裂速度非常快,它们能在很短的时间内分裂,形成新的木材和韧皮组织,这一层组织就是树木的形成层。 树木的生长几乎全依赖于它的形成层。 细胞的生长在春夏秋冬四季也有很明显的差异,一般来说,春夏季的气候是比较利于树木生长的。 在这一时段,形成层的细胞分裂极快,所产生的细胞体积大,输送水分的导管数目多,这个时候我们称之为春材或早材。 而到了秋冬季,形成层细胞分裂开始减缓,生长速度开始减慢,产生的细胞体积也就不会太大,输送水分的导管数目也较少,这个时候我们称之为秋材或晚材。 树干横截面上有一圈圈的纹路,而且每一圈的质地和颜色都有所不同。 颜色较浅、质地疏松的就是早材;颜色较深、质地紧密的就是晚材。 早材和晚材合起来就是一个圆环,这个圆环就代表树木一年所形成的木材,称为年轮。 所以,年轮一年只有一圈,一棵树有多少圈就代表这棵树有多大岁数了。 并不是所有的树木都是一年一个圈的,有些树木的年轮就不符合这种规律,我们称之为“假年轮”。 这是因为树木的生长周期是不一样的,有的树木生长周期短,一年能够有节奏地生长三次甚至多次,会形成三个或多个年轮,但是不能将其当做三年来计算。 参考资料:网络百科-树木参考资料:新华网-为什么从年轮上可以看出树木的年龄?
晚期胃癌有救吗?
一般晚期的是很少有治愈的希望的。
胃癌:核桃树枝100克、木贼草60克、山药20克、石斛20克、铁树叶20克、白术20克、茯苓10克、木香10克、沙参10克、枳壳10克、露蜂房10克、桂枝5克、炙甘草5克。 水煎服,每日一剂,分2次服。
偏方:制草乌24克。 文武火水煎2次,兑于一起,共480毫升,每次20毫升口服,每日2次,服12日后,休息4天,重复上述1个疗程,28日为1个周期,至少完成2个周期。 本方适用于阳虚晚期胃癌。
发表评论