This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.第 6 章 使用 CPU Manager
CPU Manager 管理 CPU 组并限制特定 CPU 的负载。
CPU Manager 对于有以下属性的负载有用:
- 需要尽可能多的 CPU 时间。
- 对处理器缓存丢失非常敏感。
- 低延迟网络应用程序。
- 需要与其他进程协调,并从共享一个处理器缓存中受益。
6.1. 设置 CPU Manager
流程
- 可选:标记节点: - oc label node perf-node.example.com cpumanager=true - # oc label node perf-node.example.com cpumanager=true- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 编辑启用 CPU Manager 的节点的 - MachineConfigPool。在这个示例中,所有 worker 都启用了 CPU Manager:- oc edit machineconfigpool worker - # oc edit machineconfigpool worker- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 为 worker 机器配置池添加标签: - metadata: creationTimestamp: 2020-xx-xxx generation: 3 labels: custom-kubelet: cpumanager-enabled- metadata: creationTimestamp: 2020-xx-xxx generation: 3 labels: custom-kubelet: cpumanager-enabled- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建 - KubeletConfig,- cpumanager-kubeletconfig.yaml,自定义资源 (CR) 。请参阅上一步中创建的标签,以便使用新的 kubelet 配置更新正确的节点。请参见- MachineConfigPoolSelector部分:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建动态 kubelet 配置: - oc create -f cpumanager-kubeletconfig.yaml - # oc create -f cpumanager-kubeletconfig.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 这会在 kubelet 配置中添加 CPU Manager 功能,如果需要,Machine Config Operator(MCO)将重启节点。要启用 CPU Manager,则不需要重启。 
- 检查合并的 kubelet 配置: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 检查 worker 是否有更新的 - kubelet.conf:- oc debug node/perf-node.example.com - # oc debug node/perf-node.example.com sh-4.2# cat /host/etc/kubernetes/kubelet.conf | grep cpuManager cpuManagerPolicy: static- 1 - cpuManagerReconcilePeriod: 5s- 2 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建请求一个或多个内核的 pod。限制和请求都必须将其 CPU 值设置为一个整数。这是专用于此 pod 的内核数: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建 pod: - oc create -f cpumanager-pod.yaml - # oc create -f cpumanager-pod.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 确定为您标记的节点调度了 pod: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 确认正确配置了 - cgroups。获取- pause进程的进程 ID(PID):- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 服务质量(QoS)等级为 - Guaranteed的 pod 被放置到- kubepods.slice中。其它 QoS 等级的 pod 会位于- kubepods的子- cgroups中:- cd /sys/fs/cgroup/cpuset/kubepods.slice/kubepods-pod69c01f8e_6b74_11e9_ac0f_0a2b62178a22.slice/crio-b5437308f1ad1a7db0574c542bdf08563b865c0345c86e9585f8c0b0a655612c.scope for i in `ls cpuset.cpus tasks` ; do echo -n "$i "; cat $i ; done - # cd /sys/fs/cgroup/cpuset/kubepods.slice/kubepods-pod69c01f8e_6b74_11e9_ac0f_0a2b62178a22.slice/crio-b5437308f1ad1a7db0574c542bdf08563b865c0345c86e9585f8c0b0a655612c.scope # for i in `ls cpuset.cpus tasks` ; do echo -n "$i "; cat $i ; done cpuset.cpus 1 tasks 32706- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 检查任务允许的 CPU 列表: - grep ^Cpus_allowed_list /proc/32706/status - # grep ^Cpus_allowed_list /proc/32706/status Cpus_allowed_list: 1- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 确认系统中的另一个 pod(在这个示例中,QoS 等级为 - burstable的 pod)不能在为等级为- Guaranteed的 pod 分配的内核中运行:- cat /sys/fs/cgroup/cpuset/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-podc494a073_6b77_11e9_98c0_06bba5c387ea.slice/crio-c56982f57b75a2420947f0afc6cafe7534c5734efc34157525fa9abbf99e3849.scope/cpuset.cpus 0 - # cat /sys/fs/cgroup/cpuset/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-podc494a073_6b77_11e9_98c0_06bba5c387ea.slice/crio-c56982f57b75a2420947f0afc6cafe7534c5734efc34157525fa9abbf99e3849.scope/cpuset.cpus 0- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 这个 VM 有两个 CPU 内核。将 - kube-reserved设定为 500 毫秒,这意味着,一个内核的一半被从节点的总容量中减小,以达到- Node Allocatable的数量。您可以看到- Allocatable CPU是 1500 毫秒。这意味着您可以运行一个 CPU Manager pod,因为每个 pod 需要一个完整的内核。一个完整的内核等于 1000 毫秒。如果您尝试调度第二个 pod,系统将接受该 pod,但不会调度它:- NAME READY STATUS RESTARTS AGE cpumanager-6cqz7 1/1 Running 0 33m cpumanager-7qc2t 0/1 Pending 0 11s - NAME READY STATUS RESTARTS AGE cpumanager-6cqz7 1/1 Running 0 33m cpumanager-7qc2t 0/1 Pending 0 11s- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow