更改 Kubernetes 中的 CPU 管理器策略

Changing the CPU Manager Policy in Kubernetes

我正在尝试更改我管理的 Kubernetes 集群的 CPU 管理器策略,如所述 here 但是,我在这样做时 运行 遇到了很多问题.

集群在 DigitalOcean 运行ning 中,这是我到目前为止尝试过的。

我对以下事情有点迷茫

这可能不是全球通用的做事方式,但我认为它会比您目前正在做的事情舒服得多。

首先你需要运行 kubectl proxy --port=8001 &

下载配置:

NODE_NAME="the-name-of-the-node-you-are-reconfiguring"; curl -sSL "http://localhost:8001/api/v1/nodes/${NODE_NAME}/proxy/configz" | jq '.kubeletconfig|.kind="KubeletConfiguration"|.apiVersion="kubelet.config.k8s.io/v1beta1"' > kubelet_configz_${NODE_NAME}

相应地编辑它,并将配置推送到控制平面。如果一切顺利,您将看到有效的响应。然后您将必须编辑配置,以便节点开始使用新的 ConfigMap。还有更多的可能性,例如,如果出现任何问题,您可以返回默认设置。

此过程在 documentation section 中描述了所有详细信息。

希望这对您有所帮助。

动态配置的一个问题是,如果节点无法重新启动,API 不会给出合理的响应来告诉您做错了什么,您必须 ssh 进入节点并跟踪 kubelet 日志。另外,您必须 ssh 进入每个节点并设置 --dynamic-config-dir 标志。

以下最适合我

  1. SSH 进入节点。编辑
vim /etc/systemd/system/kubelet.service
  1. 添加以下行
  --cpu-manager-policy=static \
  --kube-reserved=cpu=1,memory=2Gi,ephemeral-storage=1Gi \
  --system-reserved=cpu=1,memory=2Gi,ephemeral-storage=1Gi \

我们需要设置 --kube-reserved--system-reserved 标志,因为它们是设置 --cpu-manager-policy 标志的先决条件

  1. 然后排空节点,删除下面的文件夹
rm -rf /var/lib/kubelet/cpu_manager_state
  1. 重启 kubelet
sudo systemctl daemon-reload
sudo systemctl stop kubelet
sudo systemctl start kubelet
  1. 解除对节点的封锁并检查策略。这假设您在端口 8001 上 运行 kubectl proxy
curl -sSL "http://localhost:8001/api/v1/nodes/${NODE_NAME}/proxy/configz" | grep cpuManager

如果你使用较新的k8s版本并且kubelet是通过kubelet配置文件配置的,eg:config.yml。您可以按照上述@satnam 的相同步骤进行操作。但不是添加 --kube-reserved --system-reserved --cpu-manager-policy,而是需要在 config.yml 中添加 kubeReserved systemReserved cpuManagerPolicy。例如:

systemReserved: 
  cpu: "1" 
  memory: "100m" 
kubeReserved:
  cpu: "1" 
  memory: "100m" 
cpuManagerPolicy: "static"

同时,请确保您的 CPUManager 已启用。