更改 Kubernetes 中的 CPU 管理器策略
Changing the CPU Manager Policy in Kubernetes
我正在尝试更改我管理的 Kubernetes 集群的 CPU 管理器策略,如所述 here 但是,我在这样做时 运行 遇到了很多问题.
集群在 DigitalOcean 运行ning 中,这是我到目前为止尝试过的。
- 1. 由于文章提到
--cpu-manager-policy
是一个 kubelet 选项,我假设我无法通过API 服务器并且必须在每个节点上手动更改它。 (顺便说一句,这是假设吗?)
- 2. 我
ssh
进入其中一个节点(DigitalOcean 术语中的液滴)和 运行 kubelet --cpu-manager-policy=static
命令如kubelet CLI reference here中所述。它给我消息 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.
- 3. 所以我通过 运行ning [=15 检查 --config 标志指向的文件=] 并发现其
/etc/kubernetes/kubelet.conf
.
- 4. 我编辑文件并添加一行
cpuManagerPolicy: static
到它,还有 kubeReserved
和 systemReserved
,因为如果指定 cpuManagerPolicy
. ,它们将成为必填字段
- 5. 然后我终止正在 运行 进程并重新启动它的进程。出现了其他一些事情(删除这个文件并耗尽节点等)我能够通过并最终能够重新启动 kubelet
我对以下事情有点迷茫
- 我需要如何为所有节点执行此操作?我的集群有 12 个,对每个执行所有这些步骤似乎效率很低。
- 有什么方法可以从全局设置这些参数,即在集群范围内设置这些参数,而不是逐个节点设置?
- 我怎样才能确认我所做的确实改变了 CPU 管理器策略?
这可能不是全球通用的做事方式,但我认为它会比您目前正在做的事情舒服得多。
首先你需要运行
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
标志。
以下最适合我
- SSH 进入节点。编辑
vim /etc/systemd/system/kubelet.service
- 添加以下行
--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
标志的先决条件
- 然后排空节点,删除下面的文件夹
rm -rf /var/lib/kubelet/cpu_manager_state
- 重启 kubelet
sudo systemctl daemon-reload
sudo systemctl stop kubelet
sudo systemctl start kubelet
- 解除对节点的封锁并检查策略。这假设您在端口 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
已启用。
我正在尝试更改我管理的 Kubernetes 集群的 CPU 管理器策略,如所述 here 但是,我在这样做时 运行 遇到了很多问题.
集群在 DigitalOcean 运行ning 中,这是我到目前为止尝试过的。
- 1. 由于文章提到
--cpu-manager-policy
是一个 kubelet 选项,我假设我无法通过API 服务器并且必须在每个节点上手动更改它。 (顺便说一句,这是假设吗?) - 2. 我
ssh
进入其中一个节点(DigitalOcean 术语中的液滴)和 运行kubelet --cpu-manager-policy=static
命令如kubelet CLI reference here中所述。它给我消息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.
- 3. 所以我通过 运行ning [=15 检查 --config 标志指向的文件=] 并发现其
/etc/kubernetes/kubelet.conf
. - 4. 我编辑文件并添加一行
cpuManagerPolicy: static
到它,还有kubeReserved
和systemReserved
,因为如果指定cpuManagerPolicy
. ,它们将成为必填字段
- 5. 然后我终止正在 运行 进程并重新启动它的进程。出现了其他一些事情(删除这个文件并耗尽节点等)我能够通过并最终能够重新启动 kubelet
我对以下事情有点迷茫
- 我需要如何为所有节点执行此操作?我的集群有 12 个,对每个执行所有这些步骤似乎效率很低。
- 有什么方法可以从全局设置这些参数,即在集群范围内设置这些参数,而不是逐个节点设置?
- 我怎样才能确认我所做的确实改变了 CPU 管理器策略?
这可能不是全球通用的做事方式,但我认为它会比您目前正在做的事情舒服得多。
首先你需要运行
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
标志。
以下最适合我
- SSH 进入节点。编辑
vim /etc/systemd/system/kubelet.service
- 添加以下行
--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
标志的先决条件
- 然后排空节点,删除下面的文件夹
rm -rf /var/lib/kubelet/cpu_manager_state
- 重启 kubelet
sudo systemctl daemon-reload
sudo systemctl stop kubelet
sudo systemctl start kubelet
- 解除对节点的封锁并检查策略。这假设您在端口 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
已启用。