From d28edadb02679a23af22b39770879d3d0e1b36d2 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 18 Jan 2025 14:16:35 +0800 Subject: [PATCH] [zh] Sync policy/node-resource-managers.md --- .../concepts/policy/node-resource-managers.md | 193 +++++++++++------- 1 file changed, 124 insertions(+), 69 deletions(-) diff --git a/content/zh-cn/docs/concepts/policy/node-resource-managers.md b/content/zh-cn/docs/concepts/policy/node-resource-managers.md index 409088768b632..d15eabfb132d0 100644 --- a/content/zh-cn/docs/concepts/policy/node-resource-managers.md +++ b/content/zh-cn/docs/concepts/policy/node-resource-managers.md @@ -4,20 +4,20 @@ content_type: concept weight: 50 --- Kubernetes 提供了一组资源管理器,用于支持延迟敏感的、高吞吐量的工作负载。 资源管理器的目标是协调和优化节点资源,以支持对 CPU、设备和内存(巨页)等资源有特殊需求的 Pod。 @@ -31,9 +31,9 @@ Kubernetes 提供了一组资源管理器,用于支持延迟敏感的、高吞 **拓扑管理器(Topology Manager)**是一个 kubelet 组件,旨在协调负责这些优化的组件集。 整体资源管理过程通过你指定的策略进行管理。 @@ -42,7 +42,7 @@ To learn more, read [Control Topology Management Policies on a Node](/docs/tasks -## 为 Pod 分配 CPU 的策略 +## 为 Pod 分配 CPU 的策略 {#policies-for-assigning-cpus-to-pods} {{< feature-state feature_gate_name="CPUManager" >}} @@ -56,7 +56,9 @@ resource (for example, assigning one of more CPUs for a Pod's exclusive use). 默认情况下,kubelet 使用 [CFS 配额](https://en.wikipedia.org/wiki/Completely_Fair_Scheduler) @@ -65,7 +67,8 @@ work fine without any intervention. 许多工作负载对这种迁移不敏感,因此无需任何干预即可正常工作。 - `none`:`none` 策略显式启用现有的默认 CPU 亲和性方案,除了操作系统调度器自动执行的操作外,不提供任何亲和性。 使用 CFS 配额强制为 [Guaranteed Pod](/zh-cn/docs/concepts/workloads/pods/pod-qos/) @@ -89,8 +92,8 @@ are enforced using CFS quota. - `static`:`static` 策略允许具有整数 CPU `requests` 的 `Guaranteed` Pod 中的容器访问节点上的独占 CPU。 这种独占性是使用 [cpuset cgroup 控制器](https://www.kernel.org/doc/Documentation/cgroup-v2.txt) @@ -98,11 +101,12 @@ using the [cpuset cgroup controller](https://www.kernel.org/doc/Documentation/cg {{< note >}} 诸如容器运行时和 kubelet 本身之类的系统服务可以继续在这些独占 CPU 上运行。 独占性仅针对其他 Pod。 -{{< /note >}} +{{< /note >}} 静态策略可实现更精细的 CPU 管理和独占性的 CPU 分配。 @@ -137,7 +141,7 @@ CPU `requests` 为小数值的 `Guaranteed` Pod 中的容器也在共享池中 {{< note >}} 当启用静态策略时,kubelet 要求 CPU 预留个数大于零。 这是因为预留 CPU 个数为零意味着将允许共享池变空。 @@ -149,7 +153,7 @@ assigned are scheduled to the node, CPUs are removed from the shared pool and placed in the cpuset for the container. CFS quota is not used to bound the CPU usage of these containers as their usage is bound by the scheduling domain itself. In others words, the number of CPUs in the container cpuset is equal to the integer -CPU `limit` specified in the pod spec. This static assignment increases CPU +CPU `limit` specified in the pod spec. This static assignment increases CPU affinity and decreases context switches due to throttling for the CPU-bound workload. --> @@ -163,6 +167,20 @@ Consider the containers in the following pod specs: --> 考虑以下 Pod 规约中的容器: +```yaml +spec: + containers: + - name: nginx + image: nginx +``` + + +上面的 Pod 以 `BestEffort` QoS 类运行,因为它没有指定资源 `requests` 或 `limits`。 +它在共享池中运行。 + ```yaml spec: containers: @@ -180,7 +198,28 @@ The pod above runs in the `Burstable` QoS class because resource `requests` do n equal `limits` and the `cpu` quantity is not specified. It runs in the shared pool. --> -上面的 Pod 以 BestEffort QoS 类运行,因为它没有指定资源 `requests` 或 `limits`。 +上面的 Pod 以 `Burstable` QoS 类运行,因为 `requests` 资源不等于 `limits` 且 `cpu` 数量未被指定。 +它在共享池中运行。 + +```yaml +spec: + containers: + - name: nginx + image: nginx + resources: + limits: + memory: "200Mi" + cpu: "2" + requests: + memory: "100Mi" + cpu: "1" +``` + + +上面的 Pod 以 `Burstable` QoS 类运行,因为 `requests` 资源不等于 `limits`。 它在共享池中运行。 ```yaml @@ -202,7 +241,7 @@ The pod above runs in the `Guaranteed` QoS class because `requests` are equal to And the container's resource limit for the CPU resource is an integer greater than or equal to one. The `nginx` container is granted 2 exclusive CPUs. --> -上面的 Pod 以 Guaranteed QoS 类运行,因为其 `requests` 等于 `limits`。 +上面的 Pod 以 `Guaranteed` QoS 类运行,因为其 `requests` 等于 `limits`。 并且 CPU 资源的容器资源限制是大于或等于 1 的整数。 nginx 容器被授予 2 个独占 CPU。 @@ -225,8 +264,9 @@ The pod above runs in the `Guaranteed` QoS class because `requests` are equal to But the container's resource limit for the CPU resource is a fraction. It runs in the shared pool. --> -上面的 Pod 以 Guaranteed QoS 类运行,因为其 `requests` 等于 `limits`。 -但 CPU 资源的容器资源限制是一个小数。它在共享池中运行。 +上面的 Pod 以 `Guaranteed` QoS 类运行,因为 `requests` 等于 `limits`。 +但是 CPU 资源的容器资源限制是一个小数。 +它在共享池中运行。 ```yaml spec: @@ -245,37 +285,34 @@ and `requests` are set equal to `limits` when not explicitly specified. And the container's resource limit for the CPU resource is an integer greater than or equal to one. The `nginx` container is granted 2 exclusive CPUs. --> -上面的 Pod 以 Guaranteed QoS 类运行,因为仅指定了 `limits`,并且在未显式指定时 `requests` 会被设置为等于 `limits`。 +上面的 Pod 以 `Guaranteed` QoS 类运行,因为仅指定了 `limits`, +并且在未显式指定时 `requests` 会被设置为等于 `limits`。 并且 CPU 资源的容器资源限制是大于或等于 1 的整数。 nginx 容器被授予 2 个独占 CPU。 -#### 策略选项 {#cpu-policy-static--options} +#### 静态策略选项 {#cpu-policy-static--options} -你可以使用 CPU 管理器策略选项微调 static 策略的行为。 -static CPU 管理策略存在以下策略选项: -{{/* options in alphabetical order */}} +以下是静态 CPU 管理策略可用的策略选项,以字母顺序列出: `align-by-socket`(Alpha,默认隐藏): : 以物理芯片/插槽为边界(而不是逻辑 NUMA 边界)对齐 CPU(自 Kubernetes v1.25 起可用) @@ -286,6 +323,18 @@ static CPU 管理策略存在以下策略选项: `distribute-cpus-across-numa`(Alpha,默认隐藏): : 跨多个不同的 NUMA 域分配 CPU,力求在所选域之间实现均匀平衡(自 Kubernetes v1.23 起可用) + `full-pcpus-only`(Beta,默认可见): : 始终分配完整的物理核心(自 Kubernetes v1.22 起可用) @@ -300,14 +349,17 @@ You can toggle groups of options on and off based upon their maturity level using the following feature gates: --> 你可以使用以下特性门控根据选项组的成熟度级别来启用或禁止它们: + * `CPUManagerPolicyBetaOptions`(默认启用)。禁用以隐藏 Beta 级选项。 * `CPUManagerPolicyAlphaOptions`(默认禁用)。启用以显示 Alpha 级选项。 + 你仍然必须使用 kubelet 配置文件中的 cpuManagerPolicyOptions 字段启用每个选项。 有关可以配置的各个选项的更多详细信息,请继续阅读。 - ##### `full-pcpus-only` 如果指定了 `prefer-align-cpus-by-uncorecache` 策略,则 static 策略为各个容器分配 CPU 资源时, @@ -465,7 +517,7 @@ still be admitted using the default packed behavior. -## 内存管理策略 +## 内存管理策略 {#memory-management-policies} {{< feature-state feature_gate_name="MemoryManager" >}} @@ -474,8 +526,9 @@ The Kubernetes *Memory Manager* enables the feature of guaranteed memory (and hu allocation for pods in the `Guaranteed` {{< glossary_tooltip text="QoS class" term_id="qos-class" >}}. --> Kubernetes 内存管理器(Memory Manager) 为 Guaranteed -{{< glossary_tooltip text="QoS 类" term_id="qos-class" >}} 中的 Pod +{{< glossary_tooltip text="QoS 类" term_id="qos-class" >}}中的 Pod 启用有保证的内存(和巨页)分配能力。 + -## 其他资源管理器 +## 其他资源管理器 {#other-resource-managers} 各个管理器的配置方式会在专项文档中详细阐述: