diff --git a/content/zh-cn/docs/concepts/workloads/pods/disruptions.md b/content/zh-cn/docs/concepts/workloads/pods/disruptions.md index 24e7ac25dc..e4510bc564 100644 --- a/content/zh-cn/docs/concepts/workloads/pods/disruptions.md +++ b/content/zh-cn/docs/concepts/workloads/pods/disruptions.md @@ -18,12 +18,12 @@ weight: 60 -本指南针对的是希望构建高可用性应用程序的应用所有者,他们有必要了解可能发生在 Pod 上的干扰类型。 +本指南针对的是希望构建高可用性应用的应用所有者,他们有必要了解可能发生在 Pod 上的干扰类型。 文档同样适用于想要执行自动化集群操作(例如升级和自动扩展集群)的集群管理员。 @@ -31,7 +31,7 @@ cluster actions, like upgrading and autoscaling clusters. -我们把这些不可避免的情况称为应用的*非自愿干扰(Involuntary Disruptions)*。例如: +我们把这些不可避免的情况称为应用的**非自愿干扰(Involuntary Disruptions)**。例如: -我们称其他情况为*自愿干扰(Voluntary Disruptions)*。 -包括由应用程序所有者发起的操作和由集群管理员发起的操作。典型的应用程序所有者的操 -作包括: +我们称其他情况为**自愿干扰(Voluntary Disruptions)**。 +包括由应用所有者发起的操作和由集群管理员发起的操作。 +典型的应用所有者的操作包括: @@ -135,7 +135,7 @@ Here are some ways to mitigate involuntary disruptions: 以下是减轻非自愿干扰的一些方法: - 确保 Pod 在请求中给出[所需资源](/zh-cn/docs/tasks/configure-pod-container/assign-memory-resource/)。 -- 如果需要更高的可用性,请复制应用程序。 +- 如果需要更高的可用性,请复制应用。 (了解有关运行多副本的[无状态](/zh-cn/docs/tasks/run-application/run-stateless-application-deployment/) - 和[有状态](/zh-cn/docs/tasks/run-application/run-replicated-stateful-application/)应用程序的信息。) -- 为了在运行复制应用程序时获得更高的可用性,请跨机架(使用 + 和[有状态](/zh-cn/docs/tasks/run-application/run-replicated-stateful-application/)应用的信息。) +- 为了在运行复制应用时获得更高的可用性,请跨机架(使用 [反亲和性](/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity) - 或跨区域(如果使用[多区域集群](/zh-cn/docs/setup/best-practices/multiple-zones/))扩展应用程序。 + 或跨区域(如果使用[多区域集群](/zh-cn/docs/setup/best-practices/multiple-zones/))扩展应用。 -Kubernetes 提供特性来满足在出现频繁自愿干扰的同时运行高可用的应用程序。我们称这些特性为 -*干扰预算(Disruption Budget)*。 +Kubernetes 提供特性来满足在出现频繁自愿干扰的同时运行高可用的应用。我们称这些特性为 +**干扰预算(Disruption Budget)**。 集群管理员和托管提供商应该使用遵循 PodDisruptionBudgets 的接口 (通过调用[Eviction API](/zh-cn/docs/tasks/administer-cluster/safely-drain-node/#the-eviction-api)), @@ -219,38 +218,41 @@ and the Kubernetes-on-GCE cluster upgrade script (`cluster/gce/upgrade.sh`). 例如,`kubectl drain` 命令可以用来标记某个节点即将停止服务。 -运行 `kubectl drain` 命令时,工具会尝试驱逐机器上的所有 Pod。 -`kubectl` 所提交的驱逐请求可能会暂时被拒绝,所以该工具会定时重试失败的请求, -直到所有的 Pod 都被终止,或者达到配置的超时时间。 +运行 `kubectl drain` 命令时,工具会尝试驱逐你所停服的节点上的所有 Pod。 +`kubectl` 代表你所提交的驱逐请求可能会暂时被拒绝, +所以该工具会周期性地重试所有失败的请求, +直到目标节点上的所有的 Pod 都被终止,或者达到配置的超时时间。 -PDB 指定应用程序可以容忍的副本数量(相当于应该有多少副本)。 +PDB 指定应用可以容忍的副本数量(相当于应该有多少副本)。 例如,具有 `.spec.replicas: 5` 的 Deployment 在任何时间都应该有 5 个 Pod。 -如果 PDB 允许其在某一时刻有 4 个副本,那么驱逐 API 将允许同一时刻仅有一个而不是两个 Pod 自愿干扰。 +如果 PDB 允许其在某一时刻有 4 个副本,那么驱逐 API 将允许同一时刻仅有一个(而不是两个)Pod 自愿干扰。 -使用标签选择器来指定构成应用程序的一组 Pod,这与应用程序的控制器(Deployment,StatefulSet 等) +使用标签选择器来指定构成应用的一组 Pod,这与应用的控制器(Deployment,StatefulSet 等) 选择 Pod 的逻辑一样。 -Pod 控制器的 `.spec.replicas` 计算“预期的” Pod 数量。 -根据 Pod 对象的 `.metadata.ownerReferences` 字段来发现控制器。 +Pod 的“预期”数量由管理这些 Pod 的工作负载资源的 `.spec.replicas` 参数计算出来的。 +控制平面通过检查 Pod 的 +`.metadata.ownerReferences` 来发现关联的工作负载资源。 -由于应用程序的滚动升级而被删除或不可用的 Pod 确实会计入干扰预算, -但是控制器(如 Deployment 和 StatefulSet)在进行滚动升级时不受 PDB -的限制。应用程序更新期间的故障处理方式是在对应的工作负载资源的 `spec` 中配置的。 +由于应用的滚动升级而被删除或不可用的 Pod 确实会计入干扰预算, +但是工作负载资源(如 Deployment 和 StatefulSet) +在进行滚动升级时不受 PDB 的限制。 +应用更新期间的故障处理方式是在对应的工作负载资源的 `spec` 中配置的。 -## PDB 例子 {#pdb-example} +## PodDisruptionBudget 例子 {#pdb-example} 假设集群有 3 个节点,`node-1` 到 `node-3`。集群上运行了一些应用。 其中一个应用有 3 个副本,分别是 `pod-a`,`pod-b` 和 `pod-c`。 @@ -316,7 +318,7 @@ This puts the cluster in this state: --> 例如,假设集群管理员想要重启系统,升级内核版本来修复内核中的缺陷。 -集群管理员首先使用 `kubectl drain` 命令尝试排空 `node-1` 节点。 +集群管理员首先使用 `kubectl drain` 命令尝试腾空 `node-1` 节点。 命令尝试驱逐 `pod-a` 和 `pod-x`。操作立即就成功了。 两个 Pod 同时进入 `terminating` 状态。这时的集群处于下面的状态: @@ -426,7 +428,7 @@ can happen, according to: - the type of controller - the cluster's resource capacity --> -- 应用程序需要多少个副本 +- 应用需要多少个副本 - 优雅关闭应用实例需要多长时间 - 启动应用新实例需要多长时间 - 控制器的类型 @@ -449,7 +451,7 @@ may make sense in these scenarios: there is natural specialization of roles - when third-party tools or services are used to automate cluster management --> -- 当有许多应用程序团队共用一个 Kubernetes 集群,并且有自然的专业角色 +- 当有许多应用团队共用一个 Kubernetes 集群,并且有自然的专业角色 - 当第三方工具或服务用于集群自动化管理