6.8. 拓扑管理器
理解并使用拓扑管理器。
6.8.1. 拓扑管理器策略 复制链接链接已复制到粘贴板!
拓扑管理器通过从 Hint 提供者(如 CPU Manager 和设备管理器)收集拓扑提示来调整所有级别服务质量(QoS)的 Pod
资源,并使用收集的提示来匹配 Pod
资源。
拓扑管理器支持四个分配策略,这些策略在名为 cpumanager-enabled
的 KubeletConfig
自定义资源 (CR) 中分配:
none
策略- 这是默认策略,不执行任何拓扑对齐调整。
best-effort
策略-
对于带有
best-effort
拓扑管理策略的 pod 中的每个容器,kubelet 会尝试根据该容器的首选 NUMA 节点关联性来匹配 NUMA 节点上的所有所需资源。即使因为资源不足而无法分配,Topology Manager 仍然接受 pod,但分配会与其他 NUMA 节点共享。 restricted
策略-
对于带有
restricted
拓扑管理策略的 pod 中的每个容器,kubelet 决定理论上可以满足请求的 NUMA 节点数量。如果实际分配需要超过该数量的 NUMA 节点,则拓扑管理器会拒绝准入,将 pod 置于Terminated
状态。如果 NUMA 节点数量可以满足请求,则拓扑管理器会接受 pod 和 pod 开始运行。 single-numa-node
策略-
对于带有
single-numa-node
拓扑管理策略的 pod 中的每个容器,如果 pod 所需的所有资源可以在同一 NUMA 节点上分配,kubelet 会接受 pod。如果无法使用单一 NUMA 节点关联性,则拓扑管理器会拒绝来自节点的 pod。这会导致 pod 处于Terminated
状态,且 pod 准入失败。
6.8.2. 设置拓扑管理器 复制链接链接已复制到粘贴板!
要使用拓扑管理器,您必须在名为 cpumanager-enabled
的 KubeletConfig
自定义资源 (CR) 中配置分配策略。如果您设置了 CPU Manager,则该文件可能会存在。如果这个文件不存在,您可以创建该文件。
先决条件
-
将 CPU Manager 策略配置为
static
。
流程
激活拓扑管理器:
在自定义资源中配置拓扑管理器分配策略。
oc edit KubeletConfig cpumanager-enabled
$ oc edit KubeletConfig cpumanager-enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.8.3. Pod 与拓扑管理器策略的交互 复制链接链接已复制到粘贴板!
以下的 Pod
specs 示例演示了 Pod 与 Topology Manager 的交互。
因为没有指定资源请求或限制,以下 pod 以 BestEffort
QoS 类运行。
spec: containers: - name: nginx image: nginx
spec:
containers:
- name: nginx
image: nginx
因为请求小于限制,下一个 pod 以 Burstable
QoS 类运行。
如果所选策略不是 none
,则拓扑管理器将处理所有 pod,并且仅针对 Guaranteed
Qos Pod
规格强制实施资源校准。当拓扑管理器策略设置为 none
时,相关的容器会被固定到任何可用的 CPU 中,而不考虑 NUMA 关联性。这是默认行为,不会针对性能敏感的工作负载进行优化。其他值支持使用来自设备插件核心资源(如 CPU 和内存)的拓扑感知信息。当策略设置为不是 none
的其他值时,拓扑管理器会尝试根据节点的拓扑匹配 CPU、内存和设备分配。有关可用值的更多信息,请参阅拓扑管理器策略。
以下示例 pod 以 Guaranteed
QoS 类运行,因为请求等于限制。
拓扑管理器将考虑这个 pod。拓扑管理器会参考 Hint 提供者,即 CPU Manager、设备管理器和 Memory Manager,以获取 pod 的拓扑提示。
拓扑管理器将使用此信息存储该容器的最佳拓扑。在本 pod 中,CPU Manager 和设备管理器将在资源分配阶段使用此存储的信息。