在活动和将来的节点上配置kubelet

时间:2019-03-15 14:24:31

标签: kubernetes

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

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

手动编辑kubelet-config-1.12 configmap是否有问题?将群集升级到该版本后,所做的编辑是否会延续到1.13版本?

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

2 个答案:

答案 0 :(得分:1)

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

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

  • 写一个包含Kubelet的YAML或JSON配置文件 组态。
  • 将此文件包装在ConfigMap中,然后将其保存到 Kubernetes控制平面。
    • 更新Kubelet的相应节点 对象以使用此ConfigMap。

有一些限制思想:

  

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

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

答案 1 :(得分:1)

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

DynamicKubeletConfig默认情况下,从Kubernetes v1.11开始启用Feature Gate,但是您需要一些其他步骤来激活它。

documentation中所述(但很容易错过):

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

kubelet -h

  

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

(对于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

从这一点来看,一切都应按文档中所述进行。