kubernetes-POD

kubernetes-POD,第1张

kubernetes-POD 什么是POD?

Pod 是可以在 Kubernetes 中创建和管理的、可部署的最小的计算单元。

这些容器共享存储、网络、以及怎样运行这些容器的声明。Pod 所建模的是特定于应用的“逻辑主机”,其中包含一个或多个应用容器, 这些容器是相对紧密的耦合在一起的。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于 在同一逻辑主机上运行的云应用。

Init容器

除了应用容器,Pod 还可以包含在 Pod 启动期间运行的 Init 容器。 你也可以在集群中支持临时性容器 的情况下,为调试的目的注入临时性容器。

有些 Pod 具有 Init 容器 和 应用容器。 Init 容器会在启动应用容器之前运行并完成。

POD内容器共享:Pod 天生地为其成员容器提供了两种共享资源:网络和 存储。

POD的生命周期

生命周期示意图

POD&容器状态

POD的状态

Kubernetes 以 PodStatus.Phase 抽象 Pod 的状态(但并不直接反映所有容器的状态)。可能的 Phase 包括:

取值描述Pending(悬决)Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间,Running(运行中)Pod 已经绑定到了某个节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。Succeeded(成功)Pod 中的所有容器都已成功终止,并且不会再重启。Failed(失败)Pod 中的所有容器都已终止,并且至少有一个容器是因为失败终止。也就是说,容器以非 0 状态退出或者被系统终止。Unknown(未知)因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败。

POD中容器的状态

容器的状态有三种:Waiting(等待)、Running(运行中)和 Terminated(已终止)。

每种状态都有特定的含义:

Waiting (等待) 
如果容器并不处在 Running 或 Terminated 状态之一,它就处在 Waiting 状态。 处于 Waiting 状态的容器仍在运行它完成启动所需要的 *** 作:例如,从某个容器镜像 仓库拉取容器镜像,或者向容器应用 Secret 数据等等。 当你使用 kubectl 来查询包含 Waiting 状态的容器的 Pod 时,你也会看到一个 Reason 字段,其中给出了容器处于等待状态的原因。

Running(运行中) 
Running 状态表明容器正在执行状态并且没有问题发生。 如果配置了 postStart 回调,那么该回调已经执行且已完成。 如果你使用 kubectl 来查询包含 Running 状态的容器的 Pod 时,你也会看到 关于容器进入 Running 状态的信息。

Terminated(已终止) 
处于 Terminated 状态的容器已经开始执行并且或者正常结束或者因为某些原因失败。 如果你使用 kubectl 来查询包含 Terminated 状态的容器的 Pod 时,你会看到 容器进入此状态的原因、退出代码以及容器执行期间的起止时间。

如果容器配置了 preStop 回调,则该回调会在容器进入 Terminated 状态之前执行。

要检查 Pod 中容器的状态,你可以使用 kubectl describe pod 。 其输出中包含 Pod 中每个容器的状态。

POD的状况 

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

  • PodScheduled:Pod 已经被调度到某节点;
  • ContainersReady:Pod 中所有容器都已就绪;
  • Initialized:所有的 Init 容器 都已成功启动;
  • Ready:Pod 可以为请求提供服务,并且应该被添加到对应服务的负载均衡池中。

 

  

容器探针

kubelet对容器状态执行定期检查,确保容器处于正常。可以选择是否执行以下三种探针:

  • livenessProbe(存活性探针)        指示容器是否正在运行。如果存活态探测失败,则 kubelet 会杀死容器, 并且容器将根据其重启策略决定未来。如果容器不提供存活探针, 则默认状态为 Success。
  • readinessProbe(就绪性探针)     指示容器是否准备好为请求提供服务。如果就绪态探测失败, 端点控制器将从与 Pod 匹配的所有服务的端点列表中删除该 Pod 的 IP 地址。 初始延迟之前的就绪态的状态值默认为 Failure。 如果容器不提供就绪态探针,则默认状态为 Success。
  • startupProbe(启动探针)          指示容器中的应用是否已经启动。如果提供了启动探针,则所有其他探针都会被 禁用,直到此探针成功为止。如果启动探测失败,kubelet 将杀死容器,而容器依其 重启策略进行重启。 如果容器没有提供启动探测,则默认状态为 Success。

每种探针都可以执行三种探测 *** 作:

  • exec                在容器内执行指定命令。如果命令退出时返回码为 0 则认为诊断成功。
  • httpGet            对容器的 IP 地址上指定端口和路径执行 HTTP Get 请求。如果响应的状态码大于等于 200 且小于 400,则诊断被认为是成功的。
  • tcpSocket        对容器的 IP 地址上的指定端口执行 TCP 检查。如果端口打开,则诊断被认为是成功的。

每次探测会返回的状态都是三种结果之一: 

  • Success(成功):容器通过了诊断。
  • Failure(失败):容器未通过诊断。
  • Unknown(未知):诊断失败,因此不会采取任何行动。

何时使用探针?:

  • 如果你希望容器在探测失败时被杀死并重新启动,那么请指定一个存活态探针, 并指定restartPolicy 为 "Always" 或 "OnFailure"。
  • 如果要仅在探测成功时才开始向 Pod 发送请求流量,请指定就绪态探针。
  • 对于所包含的容器需要较长时间才能启动就绪的 Pod 而言,启动探针是有用的。

Init容器

Init 容器是一种特殊容器,在 Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。

你可以在 Pod 的规约中与用来描述应用容器的 containers 数组平行的位置指定 Init 容器(pod.spec.initContainers)。initContainers字段支持containers中所有字段,除了健康检查的各种探针。

如果 Pod 的 Init 容器失败,kubelet 会不断地重启该 Init 容器直到该容器成功为止。 然而,如果 Pod 对应的 restartPolicy 值为 "Never",并且 Pod 的 Init 容器失败, 则 Kubernetes 会将整个 Pod 状态设置为失败。

如果为一个 Pod 指定了多个 Init 容器,这些容器会按顺序逐个运行。 每个 Init 容器必须运行成功,下一个才能够运行。当所有的 Init 容器运行完成时, Kubernetes 才会为 Pod 初始化应用容器并像平常一样运行。

容器生命周期回调

可以使用容器生命周期回调,实现容器启用后一些环境的准备或者终止前程序的优雅退出。

启用后和终止前钩子:

poststart        启用后

prestop        终止前

FIELDS:
   exec	
     One and only one of the following should be specified. Exec specifies the
     action to take.

   httpGet	
     HTTPGet specifies the http request to perform.

   tcpSocket	
     TCPSocket specifies an action involving a TCP port. TCP hooks not yet
     supported
 

参考文档

Pod 的生命周期 | Kuberneteshttps://kubernetes.io/zh/docs/concepts/workloads/pods/pod-lifecycle/

容器生命周期回调 | Kuberneteshttps://kubernetes.io/zh/docs/concepts/containers/container-lifecycle-hooks/

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/5181730.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-18
下一篇2022-11-18

发表评论

登录后才能评论

评论列表(0条)