我有一个在线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版本?
或者如果有人有更好的解决方案,我想听听。
答案 0 :(得分:1)
似乎您正在寻找的东西已经可用,您可以在official documentation中找到它。
在活动集群中配置Kubelet的基本工作流程如下:
有一些限制思想:
虽然可以通过更新 ConfigMap就地,这将导致所有使用该配置的Kubelet ConfigMap同时更新。治疗起来更安全 ConfigMap依惯例是不可变的,在kubectl的帮助下 --append-hash选项,并逐步将更新发布到Node.Spec.ConfigSource。
对于自动缩放节点,必须确认是否默认情况下将使用此更新的ConfigMap,但是即使默认情况下不使用此更新的ConfigMap,也可以通过进行一些修补来轻松实现。如果此答案不能解决您遇到的问题,我可以尽快确认。
答案 1 :(得分:1)
除了aurelius在他的回答中写道,
DynamicKubeletConfig默认情况下,从Kubernetes v1.11开始启用Feature Gate,但是您需要一些其他步骤来激活它。
如documentation中所述(但很容易错过):
--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
从这一点来看,一切都应按文档中所述进行。