diff --git a/content/zh/docs/tasks/administer-cluster/topology-manager.md b/content/zh/docs/tasks/administer-cluster/topology-manager.md index d197f5dcf73ab..fe50dbe60629d 100644 --- a/content/zh/docs/tasks/administer-cluster/topology-manager.md +++ b/content/zh/docs/tasks/administer-cluster/topology-manager.md @@ -92,25 +92,37 @@ Support for the Topology Manager requires `TopologyManager` [feature gate](/docs 从 Kubernetes 1.18 版本开始,这一特性默认是启用的。 -### 拓扑管理器策略 +### 拓扑管理器作用域和策略 拓扑管理器目前: - - 对所有 QoS 类的 Pod 执行对齐操作 - 针对建议提供者所提供的拓扑建议,对请求的资源进行对齐 如果满足这些条件,则拓扑管理器将对齐请求的资源。 +为了定制如何进行对齐,拓扑管理器提供了两种不同的方式:`scope` 和 `policy`。 + + +`scope` 定义了资源对齐时你所希望使用的粒度(例如,是在 `pod` 还是 `container` 级别)。 +`policy` 定义了对齐时实际使用的策略(例如,`best-effort`、`restricted`、`single-numa-node` 等等)。 + +可以在下文找到现今可用的各种 `scopes` 和 `policies` 的具体信息。 + @@ -120,6 +132,117 @@ To align CPU resources with other requested resources in a Pod Spec, the CPU Man 参看[控制 CPU 管理策略](/zh/docs/tasks/administer-cluster/cpu-management-policies/). {{< /note >}} + +### 拓扑管理器作用域 + +拓扑管理器可以在以下不同的作用域内进行资源对齐: + +* `container` (默认) +* `pod` + +在 kubelet 启动时,可以使用 `--topology-manager-scope` 标志来选择其中任一选项。 + + +### 容器作用域 + +默认使用的是 `container` 作用域。 + + +在该作用域内,拓扑管理器依次进行一系列的资源对齐, +也就是,对每一个容器(包含在一个 Pod 里)计算单独的对齐。 +换句话说,在该特定的作用域内,没有根据特定的 NUMA 节点集来把容器分组的概念。 +实际上,拓扑管理器会把单个容器任意地对齐到 NUMA 节点上。 + + +容器分组的概念是在以下的作用域内特别实现的,也就是 `pod` 作用域。 + + +### Pod 作用域 + +使用命令行选项 `--topology-manager-scope=pod` 来启动 kubelet,就可以选择 `pod` 作用域。 + + +该作用域允许把一个 Pod 里的所有容器作为一个分组,分配到一个共同的 NUMA 节点集。 +也就是,拓扑管理器会把一个 Pod 当成一个整体, +并且试图把整个 Pod(所有容器)分配到一个单个的 NUMA 节点或者一个共同的 NUMA 节点集。 +以下的例子说明了拓扑管理器在不同的场景下使用的对齐方式: + + +* 所有容器可以被分配到一个单一的 NUMA 节点; +* 所有容器可以被分配到一个共享的 NUMA 节点集。 + + +整个 Pod 所请求的某种资源总量是根据 +[有效 request/limit](/zh/docs/concepts/workloads/pods/init-containers/#resources) +公式来计算的, +因此,对某一种资源而言,该总量等于以下数值中的最大值: +* 所有应用容器请求之和; +* 初始容器请求的最大值。 + + +`pod` 作用域与 `single-numa-node` 拓扑管理器策略一起使用, +对于延时敏感的工作负载,或者对于进行 IPC 的高吞吐量应用程序,都是特别有价值的。 +把这两个选项组合起来,你可以把一个 Pod 里的所有容器都放到一个单个的 NUMA 节点, +使得该 Pod 消除了 NUMA 之间的通信开销。 + + +在 `single-numa-node` 策略下,只有当可能的分配方案中存在合适的 NUMA 节点集时,Pod 才会被接受。 +重新考虑上述的例子: + + +* 节点集只包含单个 NUMA 节点时,Pod 就会被接受, +* 然而,节点集包含多个 NUMA 节点时,Pod 就会被拒绝 + (因为满足该分配方案需要两个或以上的 NUMA 节点,而不是单个 NUMA 节点)。 + + +简要地说,拓扑管理器首先计算出 NUMA 节点集,然后使用拓扑管理器策略来测试该集合, +从而决定拒绝或者接受 Pod。 + + +### 拓扑管理器策略 + +{{< note >}} +如果拓扑管理器配置使用 **Pod** 作用域, +那么在策略考量一个容器时,该容器反映的是整个 Pod 的要求, +于是该 Pod 里的每个容器都会得到 **相同的** 拓扑对齐决定。 +{{< /note >}} +