在实时和未来节点上配置kubelet

问题描述 投票:1回答:2

我有一个真实的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版本?

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

kubernetes
2个回答
1
投票

看起来你正在寻找的东西已经可以使用,你可以在official documentation找到它。

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

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

有一些限制:

虽然可以通过就地更新ConfigMap来更改配置,但这会导致配置了该ConfigMap的所有Kubelet同时更新。按照惯例将ConfigMaps视为不可变更安全,在kubectl的--append-hash选项的帮助下,并逐步向Node.Spec.ConfigSource推出更新。

对于自动缩放节点,必须确认它们是否默认使用此更新的ConfigMaps,但即使它们默认情况下不是这样,也可以通过一些修改来轻松实现。我可以尽快确认,如果这个答案没有解决你的问题。


1
投票

除了aurelius在他的回答中所写的内容,

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

正如documentation中所提到的(但可以轻易错过):

  • 必须将Kubelet的--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

从这一点来说,一切都应该如文档中所述。

© www.soinside.com 2019 - 2024. All rights reserved.