Отлично, это финальный этап настройки «головы» кластера. Нам нужно собрать все параметры в один файл /etc/kubernetes/kubeadm-config.yaml.
## Шаг 1: Создание конфигурационного файла (Пункты a-e)
Выполни на k8s-srv1. Обрати внимание на podSubnet (стандарт для Calico) и serviceSubnet.
sudo mkdir -p /etc/kubernetes/
sudo tee /etc/kubernetes/kubeadm-config.yaml <<EOF
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
# b.i: Путь к сокету CRI
nodeRegistration:
criSocket: unix:///run/containerd/containerd.sock
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
# c.i: Версия
kubernetesVersion: "1.35.0"
# c.ii: Адрес VIP через HAProxy (из п. 12)
controlPlaneEndpoint: "192.168.0.253:7443"
networking:
# c.iii: Подсеть для Calico
podSubnet: "192.168.128.0/17"
# c.iv: Подсеть для сервисов (стандартная или из задания)
serviceSubnet: "10.96.0.0/12"
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
# d.i: Режим IPVS
mode: "ipvs"
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
# e.i: NodeLocalDNS адрес
clusterDNS:
- "169.254.25.10"
cgroupDriver: systemd
EOF
------------------------------
## Шаг 2: Инициализация кластера (Пункт f)
Перед запуском убедись, что HAProxy и Keepalived запущены, иначе kubeadm не сможет подключиться к самому себе через VIP.
Выполни на k8s-srv1:
sudo kubeadm init --config /etc/kubernetes/kubeadm-config.yaml --upload-certs
## Что нужно сделать сразу после завершения команды:
1. Настрой kubectl для пользователя (на k8s-srv1):
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2. Сохрани вывод команды!
В конце ты увидишь два важных блока join. Тебе понадобятся:
* Тот, что содержит --control-plane и --certificate-key — для srv2 и srv3.
* Тот, что обычный join — для воркеров srv4 и srv5.
3. Проверь статус:
kubectl get nodes — покажет k8s-srv1 в статусе NotReady (это нормально, пока не поставлен CNI Calico).
------------------------------
## Важный момент для Альта:
Если команда зависнет на [preflight] Pulling images, это значит, она скачивает образы из интернета. Это может занять время. Если доступа в интернет нет, образы нужно загружать заранее.
Запуск прошел успешно? Если будут ошибки, пришли последние 10 строк вывода.