From 641d1c207cf4868bbc20ace5e55dff681dc42460 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Sat, 16 Dec 2023 21:39:30 +0800 Subject: [PATCH] [zh-cn] sync pods/pod-lifecycle.md Signed-off-by: xin.li --- .../concepts/workloads/pods/pod-lifecycle.md | 103 ++++++++++++++---- 1 file changed, 82 insertions(+), 21 deletions(-) diff --git a/content/zh-cn/docs/concepts/workloads/pods/pod-lifecycle.md b/content/zh-cn/docs/concepts/workloads/pods/pod-lifecycle.md index 40aa1744c7..ba1c6d8f14 100644 --- a/content/zh-cn/docs/concepts/workloads/pods/pod-lifecycle.md +++ b/content/zh-cn/docs/concepts/workloads/pods/pod-lifecycle.md @@ -294,21 +294,44 @@ the `Terminated` state. The `spec` of a Pod has a `restartPolicy` field with possible values Always, OnFailure, and Never. The default value is Always. -The `restartPolicy` applies to all containers in the Pod. `restartPolicy` only -refers to restarts of the containers by the kubelet on the same node. After containers -in a Pod exit, the kubelet restarts them with an exponential back-off delay (10s, 20s, -40s, …), that is capped at five minutes. Once a container has executed for 10 minutes -without any problems, the kubelet resets the restart backoff timer for that container. +The `restartPolicy` applies to {{< glossary_tooltip text="app containers" term_id="app-container" >}} +in the Pod and to regular [init containers](/docs/concepts/workloads/pods/init-containers/). +[Sidecar containers](/docs/concepts/workloads/pods/sidecar-containers/) +ignore the Pod-level `restartPolicy` field: in Kubernetes, a sidecar is defined as an +entry inside `initContainers` that has its container-level `restartPolicy` set to `Always`. +For init containers that exit with an error, the kubelet restarts the init container if +the Pod level `restartPolicy` is either `OnFailure` or `Always`. --> ## 容器重启策略 {#restart-policy} Pod 的 `spec` 中包含一个 `restartPolicy` 字段,其可能取值包括 Always、OnFailure 和 Never。默认值是 Always。 -`restartPolicy` 适用于 Pod 中的所有容器。`restartPolicy` 仅针对同一节点上 -`kubelet` 的容器重启动作。当 Pod 中的容器退出时,`kubelet` +`restartPolicy` 应用于 Pod +中的{{< glossary_tooltip text="应用容器" term_id="app-container" >}}和常规的 +[Init 容器](/zh-cn/docs/concepts/workloads/pods/init-containers/)。 +[Sidecar 容器](/zh-cn/docs/concepts/workloads/pods/sidecar-containers/)忽略 +Pod 级别的 `restartPolicy` 字段:在 Kubernetes 中,Sidecar 被定义为 +`initContainers` 内的一个条目,其容器级别的 `restartPolicy` 被设置为 `Always`。 +对于因错误而退出的 Init 容器,如果 Pod 级别 `restartPolicy` 为 `OnFailure` 或 `Always`, +则 kubelet 会重新启动 Init 容器。 + + +当 kubelet 根据配置的重启策略处理容器重启时,仅适用于同一 Pod +内替换容器并在同一节点上运行的重启。当 Pod 中的容器退出时,`kubelet` 会按指数回退方式计算重启的延迟(10s、20s、40s、...),其最长延迟为 5 分钟。 一旦某容器执行了 10 分钟并且没有出现问题,`kubelet` 对该容器的重启回退计时器执行重置操作。 +[Sidecar 容器和 Pod 生命周期](/zh-cn/docs/concepts/workloads/pods/sidecar-containers/#sidecar-containers-and-pod-lifecycle)中解释了 +`init containers` 在指定 `restartpolicy` 字段时的行为。 * `PodScheduled`:Pod 已经被调度到某节点; -* `PodReadyToStartContainers`:Pod 沙箱被成功创建并且配置了网络(Alpha 特性,必须被[显式启用](#pod-has-network)); +* `PodReadyToStartContainers`:Pod 沙箱被成功创建并且配置了网络(Beta 特性,[默认](#pod-has-network)启用); * `ContainersReady`:Pod 中所有容器都已就绪; * `Initialized`:所有的 [Init 容器](/zh-cn/docs/concepts/workloads/pods/init-containers/)都已成功完成; * `Ready`:Pod 可以为请求提供服务,并且应该被添加到对应服务的负载均衡池中。 @@ -369,7 +392,7 @@ specify a list of additional conditions that the kubelet evaluates for Pod readi --> ### Pod 就绪态 {#pod-readiness-gate} -{{< feature-state for_k8s_version="v1.14" state="stable" >}} +{{< feature-state for_k8s_version="v1.29" state="beta" >}} 你的应用可以向 PodStatus 中注入额外的反馈或者信号:**Pod Readiness(Pod 就绪态)**。 要使用这一特性,可以设置 Pod 规约中的 `readinessGates` 列表,为 kubelet @@ -464,26 +487,28 @@ When a Pod's containers are Ready but at least one custom condition is missing o {{< note >}} -这种状况已从 PodHasNetwork 重命名为 PodReadyToStartContainers。 +在其早期开发过程中,这种状况被命名为 `PodHasNetwork`。 {{< /note >}} -在 Pod 被调度到某节点后,它需要被 Kubelet 接受并且挂载所需的卷。 +在 Pod 被调度到某节点后,它需要被 kubelet 接受并且挂载所需的存储卷。 一旦这些阶段完成,Kubelet 将与容器运行时(使用{{< glossary_tooltip term_id="cri" >}}) 一起为 Pod 生成运行时沙箱并配置网络。如果启用了 `PodReadyToStartContainersCondition` -[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/), -kubelet 会通过 Pod 的 `status.conditions` 字段中的 `PodReadyToStartContainers` 状况来报告 -Pod 是否达到了初始化里程碑。 +[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/) +(Kubernetes {{< skew currentVersion >}} 版本中默认启用), +`PodReadyToStartContainers` 状况会被添加到 Pod 的 `status.conditions` 字段中。 +从 Kubernetes 1.29 开始,如果你的 Pod 包含一个或多个 Sidecar +容器(重启策略为 `Always` 的 Init 容器),kubelet 将延迟向这些 +Sidecar 容器发送 TERM 信号,直到最后一个主容器完全终止。 +Sidecar 容器将以 Pod 规约中定义的相反顺序终止。 +这可确保 Sidecar 容器继续为 Pod 中的其他容器提供服务,直到不再需要它们为止。 + + +请注意,主容器的缓慢终止也会延迟边车容器的终止。 +如果宽限期在终止过程完成之前到期,Pod 可能会进入紧急终止状态。 +在这种情况下,Pod 中的所有剩余容器将在短暂的宽限期内同时终止。 + + +同样,如果 Pod 的 preStop 回调超过了终止宽限期,则可能会发生紧急终止。 +一般来说,如果你在没有 Sidecar 容器的情况下使用 preStop 回调来控制终止顺序, +那么现在可以删除它们从而允许 kubelet 自动管理 Sidecar 终止。 +{{}} +