【问题标题】:Changing the CPU Manager Policy in Kubernetes更改 Kubernetes 中的 CPU 管理器策略
【发布时间】:2019-06-11 04:05:58
【问题描述】:

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

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

  • 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. 所以我通过运行 ps aux | grep kubelet 检查 --config 标志指向的文件,发现它的 /etc/kubernetes/kubelet.conf
  • 4. 我编辑文件并在其中添加一行cpuManagerPolicy: static,还有kubeReservedsystemReserved,因为如果指定cpuManagerPolicy,它们将成为必填字段。
  • 5. 然后我杀死正在运行的进程并重新启动它。出现了其他一些事情(删除此文件并耗尽节点等),我能够通过并最终重新启动 kubelet

我对以下事情有点迷茫

  • 我需要如何为所有节点执行此操作?我的集群有 12 个,为每个执行所有这些步骤似乎效率很低。
  • 有什么方法可以从全局(即集群范围)设置这些参数,而不是逐个节点地设置?
  • 我如何才能确认我所做的实际上改变了 CPU 管理器策略?

【问题讨论】:

    标签: kubernetes digital-ocean devops kubelet


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        这可能不是全球性的做事方式,但我认为它会比你目前正在做的更舒服。

        首先你需要运行 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 中进行了详细描述。

        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 2021-10-20
          • 2019-02-10
          • 1970-01-01
          • 2020-11-11
          • 2021-08-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多