【问题标题】:Configuring kubelet on live and future nodes在实时和未来节点上配置 kubelet
【发布时间】:2019-08-06 15:50:48
【问题描述】:

我有一个实时的 Kubernetes 集群,版本 1.12,我需要在其中更改每个 kubelet 的默认 pod 硬驱逐值。我已经通读了https://kubernetes.io/docs/setup/independent/kubelet-integration/,但它不适合我的特定用例。在那篇文章中,它似乎隐含地假设了集群中的一组静态节点。就我而言,我有一个集群自动缩放器管理多个 AWS 自动缩放组。我需要一种方法来重新配置每个活动节点上的 kubelet 以及任何未来动态启动的节点(通过kubeadm join)。

我的想法是手动编辑 kubelet-config-1.12 configmap 以更改驱逐阈值,然后使用上面列出的文章中的方法更新活动节点。

手动编辑 kubelet-config-1.12 配置图有什么问题吗?集群升级到 1.13 版本后,编辑是否会延续到 1.13 版本?

或者如果有人有更好的解决方案,我想听听。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    您正在寻找的似乎已经可用,您可以在official documentation 中找到它。

    在实时集群中配置 Kubelet 的基本工作流程如下:

    • 编写包含 Kubelet 的 YAML 或 JSON 配置文件 配置。
    • 将此文件包装在 ConfigMap 中并将其保存到 Kubernetes 控制平面。
      • 更新 Kubelet 对应的 Node 对象来使用这个 ConfigMap。

    认为有一些限制:

    虽然可以通过更新 就地配置 ConfigMap,这会导致所有使用该配置的 Kubelet ConfigMap 同时更新。治疗起来更安全 在 kubectl 的帮助下,ConfigMap 按照惯例是不可变的 --append-hash 选项,并逐步推出对 Node.Spec.ConfigSource 的更新。

    对于您的自动缩放节点,必须确认它们是否会默认使用此更新的 ConfigMap,但即使默认情况下不使用,也可以通过一些修补来轻松实现。如果此答案不能解决您遇到的问题,我可以尝试尽快确认。

    【讨论】:

      【解决方案2】:

      除了aurelius在他的回答中写的,

      DynamicKubeletConfig Feature Gate 从 Kubernetes v1.11 开始默认启用,但您需要一些额外的步骤来激活它。

      正如documentation中提到的(但很容易错过):

      • Kubelet 的 --dynamic-config-dir 标志必须设置为节点上的可写目录。

      kubelet -h

      --dynamic-config-dir 字符串
      Kubelet 将使用此目录检查下载的配置并跟踪配置的健康状况。
      如果该目录尚不存在,Kubelet 将创建此目录。
      路径可以是绝对的或相对的;相对路径从 Kubelet 的当前工作目录开始。
      提供此标志可启用动态 Kubelet 配置。
      必须启用 DynamicKubeletConfig 功能门才能传递此标志;此门目前默认为 true,因为该功能是 beta 版。

      设置此标志的最佳位置(对于 Ubuntu)是将其添加到 /etc/defaults/kubelet

      $KUBELET_EXTRA_ARGS=--dynamic-config-dir=/var/lib/kubelet-dynamic
      

      之后重启kubelet服务:

      $ sudo systemctl restart kubelet
      
      $ ps aux | grep kubelet
      root      8610  4.1  1.1 1115992 90652 ?       Ssl  14:57   0:46 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf  
      --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml  
      --cgroup-driver=cgroupfs --network-plugin=cni  
      --pod-infra-container-image=k8s.gcr.io/pause:3.1  
      --dynamic-config-dir=/var/lib/kubelet-dynamic
      

      之后kubelet 在此目录下创建目录树以维护检查点:

      $ sudo tree /var/lib/kubelet-dynamic/
      /var/lib/kubelet-dynamic/
      └── store
          ├── checkpoints
          │   └── 009e03e7-62ad-11e9-9043-42010a9c0003
          │       └── 12399979
          │           └── kubelet
          └── meta
              ├── assigned
              └── last-known-good
      
      

      从这一点开始,一切都应该按照文档中的说明进行。

      【讨论】:

        猜你喜欢
        • 2018-03-14
        • 2019-02-24
        • 2020-09-10
        • 2019-04-26
        • 2020-02-17
        • 2018-04-12
        • 2021-07-14
        • 2013-09-25
        • 2019-03-14
        相关资源
        最近更新 更多