我有一个真实的Kubernetes集群,版本1.12,我需要更改每个kubelet的默认pod硬盘驱逐值。我通过https://kubernetes.io/docs/setup/independent/kubelet-integration/阅读,但它不符合我的特定用例。在那篇文章中,它似乎隐含地假设集群中有一组静态节点。就我而言,我有一个集群自动缩放器管理多个AWS自动缩放组。我需要一种方法来重新配置每个活动节点上的kubelet以及动态启动的任何未来节点(通过kubeadm join
)。
我的想法是手动编辑kubelet-config-1.12配置映射以更改驱逐阈值,然后使用上面列出的文章中的方法更新实时节点。
手动编辑kubelet-config-1.12 configmap有什么问题吗?当群集升级到该版本时,编辑是否会转移到1.13版本?
或者,如果有人有更好的解决方案,我想听听。
看起来你正在寻找的东西已经可以使用,你可以在official documentation找到它。
在实时群集中配置Kubelet的基本工作流程如下:
有一些限制:
虽然可以通过就地更新ConfigMap来更改配置,但这会导致配置了该ConfigMap的所有Kubelet同时更新。按照惯例将ConfigMaps视为不可变更安全,在kubectl的--append-hash选项的帮助下,并逐步向Node.Spec.ConfigSource推出更新。
对于自动缩放节点,必须确认它们是否默认使用此更新的ConfigMaps,但即使它们默认情况下不是这样,也可以通过一些修改来轻松实现。我可以尽快确认,如果这个答案没有解决你的问题。
除了aurelius在他的回答中所写的内容,
DynamicKubeletConfig功能门默认从Kubernetes v1.11开始启用,但您需要一些额外的步骤来激活它。
正如documentation中所提到的(但可以轻易错过):
--dynamic-config-dir
标志设置为节点上的可写目录。并由kubelet -h
--dynamic-config-dir string Kubelet将使用此目录检查下载的配置并跟踪配置运行状况。 如果该目录尚不存在,Kubelet将创建该目录。 路径可以是绝对的或相对的;相对路径从Kubelet的当前工作目录开始。 提供此标志可启用动态Kubelet配置。 必须启用DynamicKubeletConfig功能门才能传递此标志;此门当前默认为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
从这一点来说,一切都应该如文档中所述。