首页 / 最佳实践 / 配置分配更合理的 CPU 管理策略

配置分配更合理的 CPU 管理策略

在 Kubernetes 中,给容器组分配 CPU 的方法称为 CPU 管理策略。通过调整 CPU 管理策略,可为调度到节点上的容器组更合理地分配 CPU。

策略类型

kubelet 通过 --cpu-manager-policy 参数控制 CPU 管理策略 。当前使用策略记录在 /var/lib/kubelet/cpu_manager_state 文件中。

策略 含义 适用场景
none 默认策略,使用基于 CFS 配额的 CPU 亲和方案。 一般场景,可实现更有效的 CPU 资源利用。
static 静态策略,允许特定容器组相对于其他容器组独占 CPU。 如有 CPU 敏感型容器组,可减少因节流调度导致的性能损耗。

静态策略使用限制

配置策略

修改 /var/lib/kubelet/config.yaml 文件可配置 CPU 管理策略。下述操作均只针对同一集群内的各节点。

(可选)免密登录设置

如果集群中待设置的节点过多,为避免逐个输入节点密码,可开启节点间免密登录快速完成操作。

注意:CPU 分配策略配置成功后,务必要关闭免密登录确保环境安全。

开启免密登录

  1. 在控制节点上生成 SSH 密钥对。输入命令后,阅读提示并依次按下回车键确认。

    ssh-keygen 
  2. 复制密钥到所有目标节点。

    ssh-copy-id root@{目标节点 IP}

    说明:如果提示找不到此命令且无法安装,可手动将 .ssh/id_rsa.pub 文件中内容添加到待配置节点的 .ssh/authorized_keys 文件。

关闭免密登录

注意:此操作将删除所有已记住公钥,请确保不会影响已有业务。

for i in $(kubectl  get nodes  | grep -vi name | awk '{print $1}')
do
 
ssh root@$i "rm /root/.ssh/authorized_keys"
 
done

启用静态策略

在控制节点执行操作。

KUBECONFIG="/var/lib/kubelet/config.yaml"
BACKUPCONFIG="/root/kubelet-config-before-set-static.yaml"
for i in $(kubectl  get nodes  | grep -vi name | awk '{print $1}')
do
 
ssh root@$i "cp ${KUBECONFIG} ${BACKUPCONFIG}; sed -i '/^cpuManagerPolicy.*/d' ${KUBECONFIG}; sed -i '/cpuManagerReconcilePeriod*/acpuManagerPolicy: static' ${KUBECONFIG}; sed -i 's/  cpu: 100m/  cpu: 500m/g' ${KUBECONFIG}; rm -f /var/lib/kubelet/cpu_manager_state; systemctl restart kubelet "
 
done

恢复默认策略

在控制节点执行操作。

KUBECONFIG="/var/lib/kubelet/config.yaml"
BACKUPCONFIG="/root/kubelet-config-before-set-none.yaml"
for i in $(kubectl  get nodes  | grep -vi name | awk '{print $1}')
do
 
ssh root@$i "cp ${KUBECONFIG} ${BACKUPCONFIG};  sed -i '/^cpuManagerPolicy.*/d' ${KUBECONFIG}; sed -i '/cpuManagerReconcilePeriod*/acpuManagerPolicy: none' ${KUBECONFIG} ; rm /var/lib/kubelet/cpu_manager_state ; systemctl restart kubelet"
 
done

验证

等待约 30 秒重新生成 /var/lib/kubelet/cpu_manager_state 文件后,在控制节点执行操作。

for i in $(kubectl  get nodes  | grep -vi name | awk '{print $1}')
do
  
ssh root@$i "cat /var/lib/kubelet/cpu_manager_state"
 
done