本文永久链接: https://www.xtplayer.cn/how-to-configure-cpu-manager-policy-in-an-rke2-or-k3s-cluster/

环境

  • Rancher 配置的或独立的 RKE2 集群

配置方法

本文详细介绍了如何在 RKE2 集群中配置Kubernetes CPU 管理器策略。该策略通过 kubelet 标志进行配置,同时还需使用--cpu-manager-policy相关的--kube-reserved、--system-reserved和标志--reserved-cpus``--cpu-manager-policy-options。

Rancher UI 创建的 RKE2 集群

新集群创建时的配置

旧版本(v1.32 之前):通过配置文件添加 kubelet 参数
  1. 在通过集群配置表单填写完所有所需的配置后,单击页面底部的“以 YAML 格式编辑” 。

  2. 根据以下示例,将所需的 kubelet-arg 标志添加到 rkeConfig 下的 machineGlobalConfig 块中:

    [...]
    spec:
    [...]
    rkeConfig:
    [...]
    machineGlobalConfig:
    kubelet-arg:
    - cpu-manager-policy=static
    - system-reserved=cpu=1,memory=1548Mi,ephemeral-storage=30Gi
    [...]
  3. 然后单击“创建”按钮创建集群。

新版本(v1.32 及以上):使用 Kubelet 配置文件

从 RKE2 v1.32 开始,遵循上游 Kubernetes 实践,不能再通过命令行参数配置 kubelet。需要创建独立的 Kubelet 配置文件 。

在目录 /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/ 下创建文件,例如 01-cpu-pinning.conf:

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cpuManagerPolicy: static
  • 重启服务使配置生效

    根据节点角色执行重启(二选一):

    # RKE2 Agent 节点
    systemctl restart rke2-agent

    # RKE2 Server 节点
    systemctl restart rke2-server

现有集群修改配置

旧版本(v1.32 之前):通过配置文件添加 kubelet 参数
  1. 导航至集群 管理

  2. 单击所需下游集群的“编辑配置”按钮

  3. 点击“编辑为 YAML”

  4. 根据以下示例,将所需的 kubelet-arg 标志添加到 rkeConfig 下的 machineGlobalConfig 块中:

    [...]
    spec:
    [...]
    rkeConfig:
    [...]
    machineGlobalConfig:
    kubelet-arg:
    - cpu-manager-policy=static
    - system-reserved=cpu=1,memory=1548Mi,ephemeral-storage=30Gi
    [...]
  5. 单击“保存”以使用新的 CPU 管理器策略更新集群。

  6. 集群将进入更新状态,集群节点将卡在协调状态,并显示消息“等待探测:kubelet”。

  7. 当节点进入此状态时,打开与该节点的 SSH 会话,并删除旧的 CPU 管理器状态文件:

    # rm -rf /var/lib/kubelet/cpu_manager_state
  8. 节点随后将成功完成协调。

  9. 重复步骤 6,直到所有节点成功协调,集群恢复到活动状态。

新版本(v1.32 及以上):使用 Kubelet 配置文件

从 RKE2 v1.32 开始,遵循上游 Kubernetes 实践,不能再通过命令行参数配置 kubelet。需要创建独立的 Kubelet 配置文件 。

在目录 /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/ 下创建文件,例如 01-cpu-pinning.conf:

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cpuManagerPolicy: static
  • 删除旧的 CPU 管理器状态文件

    # rm -rf /var/lib/kubelet/cpu_manager_state
  • 重启服务使配置生效

    根据节点角色执行重启(二选一):

    # RKE2 Agent 节点
    systemctl restart rke2-agent

    # RKE2 Server 节点
    systemctl restart rke2-server

独立安装的 RKE2 集群

新集群创建时的配置

在每个节点上首次启动 rke2-server、rke2-agent 服务之前,应在每个节点的RKE2或K3s配置文件中定义所需的 kubelet 配置参数,例如:

kubelet-arg:
- cpu-manager-policy=static
- system-reserved=cpu=1,memory=1548Mi,ephemeral-storage=30Gi

现有集群修改配置

您可以按照Kubernetes CPU 管理器策略文档中概述的过程,在集群中的每个节点上执行配置更新:

  1. 驱逐节点

  2. 停止 RKE2 进程:

    • 在 RKE2 服务器节点上运行 systemctl stop rke2-server和rke2-killall.sh

    • 在 RKE2 工作节点上运行 systemctl stop rke2-agent和rke2-killall.sh

  3. 删除 CPU 管理器状态文件:rm -rf /var/lib/kubelet/cpu_manager_state

  4. 在节点上的 RKE2 配置文件中定义所需的 kubelet 标志 ,例如:

    kubelet-arg:
    - cpu-manager-policy=static
    - system-reserved=cpu=1,memory=1548Mi,ephemeral-storage=30Gi
  5. 启动 RKE2 服务:

    • 在 RKE2 服务器节点上运行 systemctl start rke2-server

    • 在 RKE2 代理节点上运行 systemctl start rke2-agent