Какая команда используется для присоединения ноды к Kubernetes кластеру?
Что проверяют
Работали ли вы с кластером, собранным через kubeadm, своими руками, а не только с управляемым Kubernetes в облаке. Следом обычно спрашивают, где взять токен, если старый истёк, и чем присоединение control plane ноды отличается от рабочей.
Как отвечать
Короткий ответ: kubeadm join. Дальше покажите, что понимаете, откуда берутся её аргументы:
- токен: bootstrap-токен по умолчанию живёт 24 часа. Новый вместе с готовой командой выдаёт
kubeadm token create --print-join-commandна control plane ноде; --discovery-token-ca-cert-hash: хэш сертификата CA кластера. По нему новая нода проверяет, что говорит с настоящим API-сервером, а не с подменой;- адрес API-сервера: обычно порт 6443, в отказоустойчивом кластере это адрес балансировщика перед control plane;
--control-plane: присоединяет ноду как ещё один control plane. Ей нужны сертификаты кластера: их загружаетkubeadm init phase upload-certs --upload-certs, а ключ передаётся через--certificate-key.
Перед join на ноде должны стоять container runtime (containerd или CRI-O, dockershim удалён в 1.24), kubelet и kubeadm совместимой версии (проще всего той же минорной, что у кластера), выключенный swap или явно разрешённый в настройках kubelet, включённый net.ipv4.ip_forward. После join нода появится в kubectl get nodes, но будет в статусе NotReady, пока на ней не поднимется CNI-плагин.
В облаке и в Cluster API ноды руками обычно не присоединяют: это делает группа автомасштабирования или cloud-init с тем же kubeadm join внутри. Об этом стоит сказать, если у вас был такой опыт.
Где спотыкаются
Отвечают kubectl join или kubectl add node. Таких команд нет, kubectl работает с уже существующим кластером, а ноду в него вводит kubeadm.
Берут команду из лога kubeadm init недельной давности и удивляются ошибке авторизации. Токен истёк, нужен новый.
Не могут объяснить, зачем нужен хэш CA, и предлагают --discovery-token-unsafe-skip-ca-verification. Это открывает дорогу подмене API-сервера.