在Kubernetes中更改CPU管理器策略

时间:2019-01-17 01:29:20

标签: kubernetes digital-ocean devops kubelet

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

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

  • 1。 。由于本文提到--cpu-manager-policy是kubelet选项,因此我假设我无法通过API服务器对其进行更改,而必须手动进行更改在每个节点上。 (这个假设是顺便说一句吗?)
  • 2。 。我ssh进入其中一个节点(DigitalOcean术语中的液滴),并按照{{ 3}}。它给我消息kubelet --cpu-manager-policy=static
  • 3。 。因此,我通过运行Flag --cpu-manager-policy has been deprecated, This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.检查了--config标志指向的文件,并发现其ps aux | grep kubelet。 / li>
  • 4。 。我编辑文件并在其中添加行/etc/kubernetes/kubelet.conf,还添加行cpuManagerPolicy: statickubeReserved,因为它们如果指定systemReserved,则成为必填字段。
  • 5。 。然后,我杀死正在运行该进程的进程并重新启动它。我可以通过其他几件事(删除此文件并耗尽节点等),最终能够重新启动kubelet

我对以下事情有些迷茫

  • 我需要如何对所有节点执行此操作?我的集群中有12个,对每个集群执行所有这些步骤似乎效率很低。
  • 有什么方法可以在全局范围内(即群集范围内)设置这些参数,而不是逐个节点地进行设置吗?
  • 我什至如何确认我确实更改了CPU Manager策略?

3 个答案:

答案 0 :(得分:1)

动态配置的一个问题是,如果节点无法重启,则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

答案 1 :(得分:0)

这可能不是全球性的工作方式,但是我认为这将比您目前正在做的事情舒适得多。

首先,您需要运行 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中的所有详细信息都描述了此过程。

希望这会有所帮助。

答案 2 :(得分:0)

如果您使用较新的 k8s 版本并且 kubelet 是由 kubelet 配置文件配置的,例如: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 已启用。