Небольшой контроллер, который копирует значение лейбла role в лейбл node-role.kubernetes.io/<ROLE> на нодах.
Начиная с 1.16 версии kubernetes, kubelet (опция --node-labels) запрещает создавать лейблы с доменами k8s.io и kubernetes.io в именах. То есть при инициализации ноды это теперь нельзя сделать. В качестве решения можно вместо этого создавать лейбл role и данный контроллер скопирует это в node-role.kubernetes.io/<ROLE> тем самым решив проблему.
Плюс в том что это способ уневерсальный, как для managed кластеров так и для self-hosted. Достаточно добавить лейбл role на ноды и задеплоить контроллер:
kubectl apply -f deploy/deploy.yamlВ yandex managed kubernetes просто добавьте лейбл role при создании группы нод:
resource "yandex_kubernetes_node_group" "workers" {
cluster_id = "${yandex_kubernetes_cluster.my_cluster.id}"
name = "name"
description = "description"
version = "1.19"
labels = {
"role" = "worker"
}В self-hosted нодах добавьте --node-labels:
cat > /etc/systemd/system/kubelet.service.d/25-extra-labels.conf <<EOF
[Service]
Environment="KUBELET_EXTRA_ARGS=--node-labels role=worker"
EOF
systemctl daemon-reload
systemctl restart kubeletЛибо используйте конфиг kind: JoinConfiguration: nodeRegistration.kubeletExtraArgs.role: worker. Если используете kubeadm для инициализации ноды.