По мотивам yc-kubelet-flag-editor.
Поскольку, практически для всех параметров kubelet, в официальной документации указано, что This parameter should be set via the config file specified by the kubelet's --config flag
, для модификации config-файла было решено использовать слияние YAML-манифестов вместо аргументов командной строки kubelet, при помощи инструмента yq
.
Поды, запущенные при помощи DaemonSet, запускаются на всех воркерах. Скрипт внутри конейнера будет выполнять следующее:
- Периодически выполняет слияние kubelet config с кастомными конфигами, заданными в ConfigMap
kubelet-custom
. - Если конфиг, который находится на воркере, отличается от YAML, полученного в результате слияния, конфиг обновляется.
- Удаляются файлы, содержащие состояния менеджеров CPU и Memory, перезагружается kubelet.
Кастомные конфигурации kubelet находятся в конфигмапе, заданном в манифесте cm-custom-kubelet.yaml
.
Каждый из элементов этого конфигмапа должнен иметь имя файла с расширением .yaml
и быть описан в соответствии со структурой KubeletConfiguration.
При слиянии результирующей конфигурации файлы будут расположены в соответствии с именованием.
Значения повторяющихся элементов будут перекрывать друг друга:
kubelet-config.yaml <-- 01-custom.yaml <-- 02-custom.yaml
Пример:
kubelet-config.yaml
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
kubeReserved:
cpu: 80m
ephemeral-storage: 39Gi
memory: 1943Mi
maxPods: 110
01-custom.yaml
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
kubeReserved:
cpu: 500m
maxPods: 150
02-custom.yaml
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
maxPods: 110
В результирующем YAML-конфиге получим:
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
kubeReserved:
cpu: 500m
ephemeral-storage: 39Gi
memory: 1943Mi
maxPods: 110
kubectl apply -f namespace.yaml
kubectl apply -f cm-script.yaml
kubectl apply -f cm-custom-kubelet.yaml
kubectl apply -f daemonset.yaml