diff --git a/content/zh-cn/docs/concepts/architecture/nodes.md b/content/zh-cn/docs/concepts/architecture/nodes.md index e344336021..c7b9c247a2 100644 --- a/content/zh-cn/docs/concepts/architecture/nodes.md +++ b/content/zh-cn/docs/concepts/architecture/nodes.md @@ -847,89 +847,6 @@ Message: Pod was terminated in response to imminent node shutdown. ``` {{< /note >}} - -## 节点非体面关闭 {#non-graceful-node-shutdown} - -{{< feature-state state="beta" for_k8s_version="v1.26" >}} - - -节点关闭的操作可能无法被 kubelet 的节点关闭管理器检测到, -是因为该命令不会触发 kubelet 所使用的抑制锁定机制,或者是因为用户错误的原因, -即 ShutdownGracePeriod 和 ShutdownGracePeriodCriticalPod 配置不正确。 -请参考以上[节点体面关闭](#graceful-node-shutdown)部分了解更多详细信息。 - - -当某节点关闭但 kubelet 的节点关闭管理器未检测到这一事件时, -在那个已关闭节点上、属于 StatefulSet 的 Pod 将停滞于终止状态,并且不能移动到新的运行节点上。 -这是因为已关闭节点上的 kubelet 已不存在,亦无法删除 Pod, -因此 StatefulSet 无法创建同名的新 Pod。 -如果 Pod 使用了卷,则 VolumeAttachments 不会从原来的已关闭节点上删除, -因此这些 Pod 所使用的卷也无法挂接到新的运行节点上。 -所以,那些以 StatefulSet 形式运行的应用无法正常工作。 -如果原来的已关闭节点被恢复,kubelet 将删除 Pod,新的 Pod 将被在不同的运行节点上创建。 -如果原来的已关闭节点没有被恢复,那些在已关闭节点上的 Pod 将永远滞留在终止状态。 - - -为了缓解上述情况,用户可以手动将具有 `NoExecute` 或 `NoSchedule` 效果的 -`node.kubernetes.io/out-of-service` 污点添加到节点上,标记其无法提供服务。 -如果在 `kube-controller-manager` 上启用了 `NodeOutOfServiceVolumeDetach` -[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/), -并且节点被通过污点标记为无法提供服务,如果节点 Pod 上没有设置对应的容忍度, -那么这样的 Pod 将被强制删除,并且该在节点上被终止的 Pod 将立即进行卷分离操作。 -这样就允许那些在无法提供服务节点上的 Pod 能在其他节点上快速恢复。 - - -在非体面关闭期间,Pod 分两个阶段终止: -1. 强制删除没有匹配的 `out-of-service` 容忍度的 Pod。 -2. 立即对此类 Pod 执行分离卷操作。 - -{{< note >}} - -- 在添加 `node.kubernetes.io/out-of-service` 污点之前,应该验证节点已经处于关闭或断电状态(而不是在重新启动中)。 -- 将 Pod 移动到新节点后,用户需要手动移除停止服务的污点,并且用户要检查关闭节点是否已恢复,因为该用户是最初添加污点的用户。 -{{< /note >}} - - @@ -1091,6 +1008,91 @@ are emitted under the kubelet subsystem to monitor node shutdowns. kubelet 子系统中会生成 `graceful_shutdown_start_time_seconds` 和 `graceful_shutdown_end_time_seconds` 度量指标以便监视节点关闭行为。 + +## 节点非体面关闭 {#non-graceful-node-shutdown} + +{{< feature-state state="beta" for_k8s_version="v1.26" >}} + + +节点关闭的操作可能无法被 kubelet 的节点关闭管理器检测到, +是因为该命令不会触发 kubelet 所使用的抑制锁定机制,或者是因为用户错误的原因, +即 ShutdownGracePeriod 和 ShutdownGracePeriodCriticalPod 配置不正确。 +请参考以上[节点体面关闭](#graceful-node-shutdown)部分了解更多详细信息。 + + +当某节点关闭但 kubelet 的节点关闭管理器未检测到这一事件时, +在那个已关闭节点上、属于 StatefulSet 的 Pod 将停滞于终止状态,并且不能移动到新的运行节点上。 +这是因为已关闭节点上的 kubelet 已不存在,亦无法删除 Pod, +因此 StatefulSet 无法创建同名的新 Pod。 +如果 Pod 使用了卷,则 VolumeAttachments 不会从原来的已关闭节点上删除, +因此这些 Pod 所使用的卷也无法挂接到新的运行节点上。 +所以,那些以 StatefulSet 形式运行的应用无法正常工作。 +如果原来的已关闭节点被恢复,kubelet 将删除 Pod,新的 Pod 将被在不同的运行节点上创建。 +如果原来的已关闭节点没有被恢复,那些在已关闭节点上的 Pod 将永远滞留在终止状态。 + + +为了缓解上述情况,用户可以手动将具有 `NoExecute` 或 `NoSchedule` 效果的 +`node.kubernetes.io/out-of-service` 污点添加到节点上,标记其无法提供服务。 +如果在 `kube-controller-manager` 上启用了 `NodeOutOfServiceVolumeDetach` +[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/), +并且节点被通过污点标记为无法提供服务,如果节点 Pod 上没有设置对应的容忍度, +那么这样的 Pod 将被强制删除,并且该在节点上被终止的 Pod 将立即进行卷分离操作。 +这样就允许那些在无法提供服务节点上的 Pod 能在其他节点上快速恢复。 + + +在非体面关闭期间,Pod 分两个阶段终止: + +1. 强制删除没有匹配的 `out-of-service` 容忍度的 Pod。 +2. 立即对此类 Pod 执行分离卷操作。 + +{{< note >}} + +- 在添加 `node.kubernetes.io/out-of-service` 污点之前, + 应该验证节点已经处于关闭或断电状态(而不是在重新启动中)。 +- 将 Pod 移动到新节点后,用户需要手动移除停止服务的污点, + 并且用户要检查关闭节点是否已恢复,因为该用户是最初添加污点的用户。 +{{< /note >}} +