- Создал(а) Алексей Созонтов 30.12.25
Создание проекта и сборка образов squashfs
1. Перейдите в каталог установленного astra-elafris
$ cd /opt/elafris
2. Создайте файл для инвентаризации 5 серверов
$ sudo tee template_servers.yaml << EOF servers: - hostname: kube-mngr04 mac: bc:24:11:6f:96:f8 ip: 192.168.0.14 machine_id: 1532e6be21db3ad58d8c93ff694e79db - hostname: kube-mngr05 mac: bc:24:11:2e:6d:63 ip: 192.168.0.15 machine_id: c4832a69b44e5909abe5ec0e694e79db - hostname: kube-mngr06 mac: bc:24:11:06:6a:8e ip: 192.168.0.16 machine_id: d526c0a04f716c6316f0e50b694e79db - hostname: kube-wrkr03 mac: bc:24:11:27:f1:cd ip: 192.168.0.23 machine_id: 72f69836ae991eff1092b251694e79db - hostname: kube-wrkr04 mac: bc:24:11:b0:38:56 ip: 192.168.0.24 machine_id: 84425015614389ef4cf7668b694e79db EOF
Такой способ для большого количества серверов в проекте более удобный, чем формирование инвентаризационной информации через параметр --servers.
Все параметры серверов обязательны.
Имена хостов, MAC-адреса интерфесов, IP и идентификаторы машин замените на актуальные данные для ваших серверов.
3. Создайте проект, используя файл инвентаризации
$ sudo astra-elafris genproject -p cluster-project --preset kubernetes:v1.34_orel_1.8.4 --servers-file template_servers.yaml
В процессе подготовки первого проекта будет осуществлена загрузка Установочного диска ALSE, а также бинарных компонентов kubernetes, поэтому создание шаблона может занять длительное время, в зависимости от скорости сетевого соединения с центром загрузки Astra Linux и центром загрузки, указанном в шаблоне проекта.
Создание проекта возможно и без файла инвентаризации. Используйте для этого ключ --servers <MAC1>:<hostname1>:<IP1>,<MAC2>:<hostname2>:<IP2>,...
Идентификатор машины в данном случае будет генерироваться автоматически.
4. Соберите образы для сетевой загрузки ОС
$ sudo astra-elafris build -p cluster-project -o sqsh
Результат выполнения - набор файлов в каталогах:
cluster-project/output/kernels/- ядро и initrd для публикации на pxe-инфраструктуру сетевой загрузкиcluster-project/output/sqsh/- squashfs-образы для публикации на файловую систему samba инфраструктуры сетевой загрузки
Подготовка инфраструктуры сетевой загрузки
Подготовка инфраструктуры делается один раз для Узла сетевой загрузки.
При публикации следующих проектов этот этап можно пропустить
1. Сконфигурируйте на узле статический IP-адрес, на котором будет работать DHCP-сервер
2. Установите пакет astra-elafris-boot, если не сделали этого на предыдущих этапах, и перейдите в каталог astra-elafris-boot
$ cd /opt/elafris-boot
3. Откройте файл elafris-boot.yaml и, если требуется, измените свойства boot_srv.ip и boot_srv.dhcp_range
4. Запустите создание инфраструктуры сетевой загрузки
$ sudo astra-elafris-boot --boot
5. Настройте NAT.
Для этого можно воспользоваться входящим в состав репозиториев Astra Linux инструментом командной строки iptables.
NAT нужен для процедуры инициализации узлов в кластере для загрузки компонентов kubernetes из сети интернет.
Публикация проекта на инфраструктуру сетевой загрузки
1. Подготовьте структуру файлов и конфигурацию сетевой загрузки
$ sudo astra-elafris-boot -p cluster-project --links
2. Сконфигурируйте dhcp-сервер на выдачу фиксированных IP серверам кластера
$ sudo astra-elafris-boot -p cluster-project --dhcp
Инициализация кластера kubernetes в сервисном (отладочном) режиме
1. Подготовьте балансировщик
На примере haproxy и отдельного IP 192.168.0.101:
- установить haproxy
$ sudo apt install haproxy
- Изменить файл конфигурации
# /etc/haproxy/haproxy.cfg global ... # конфиг по умолчанию можно оставить без изменения defaults log global mode tcp timeout connect 5000 timeout client 50000 timeout server 50000 frontend control bind 192.168.0.101:6443 # IP-адрес балансировщика mode tcp # Stats endpoint stats enable stats uri /stats stats auth admin:admin # Default backend default_backend kube_control backend kube_control mode tcp balance roundrobin server kube_mngr04 192.168.0.14:6443 check server kube_mngr05 192.168.0.15:6443 check server kube_mngr06 192.168.0.16:6443 check
В примере простая балансировка по порту нв уровне tcp. Для более продвинутых настроек воспользуйтесь документацией к haproxy.
2. Для каждого узла в кластере настройте постоянное хранилище
На примере диска sda
2.1. Загрузитесь в отладочном режиме Debug и аутентифицируйтесь в системе

По умолчанию предусмотрена загрузка в рабочем режиме Regular без возможности логина. У вас будет 10 секунд, чтобы выбрать режим Debug.
Логин/пароль по умолчанию - administrator/admin. При необходимости, его можно изменить в файле preseed.yaml конфигурации проекта перед сборкой.
2.2. Подключите постоянный диск
$ cd /opt/first_boot sudo chmod +x create_partition_sda.sh sudo ./create_partition_sda.sh sudo mount /dev/sda1 /mnt sudo cp persistence.conf /mnt/ sudo umount /mnt
2.3. Перезагрузите ОС снова в отладочном режиме Debug.
3. Инициализируйте первый узел Kubernetes
$ cd /usr/local/bin sudo chmod +x kubeadm sudo chmod +x crictl sudo kubeadm init --ignore-preflight-errors=KubeletVersion --pod-network-cidr=192.169.0.0/16 --control-plane-endpoint=192.168.0.101:6443 --upload-certs
В качестве --control-plane-endpoint укажите адрес и порт балансировщика.
4. Сохраните или скопируйте команды присоединения остальных узлов
Команды будут выведены в консоль программой инициализации кластера и выглядят следующим образом.
Пример команды на добавление узла controle-plane (master)
kubeadm join 192.168.0.101:6443 --token orgmb3.73wvahitomd3txwr \
--discovery-token-ca-cert-hash sha256:8e3ed4d7dd74ad64e4b6cc8c0af3afdba1d25393d33b13dad7691eca091a7adb \
--control-plane --certificate-key 54efba8f806284b5f780488eb2f46cb7c23f9e0c29abd043d6f32203bfa7fc4d
Пример команды на добавление рабочего узла (worker)
kubeadm join 192.168.0.101:6443 --token orgmb3.73wvahitomd3txwr \
--discovery-token-ca-cert-hash sha256:8e3ed4d7dd74ad64e4b6cc8c0af3afdba1d25393d33b13dad7691eca091a7adb
Токены и ключи для каждого инстанса уникальны.
IP-адрес:порт - это эндпойнт балансировщика, через который осуществляется ha-доступ к узлам control-plane.
5. Завершите формирование кластера control-plane.
Для этого на узлах kube-mngr05 (192.168.0.15) и kube-mngr06 (192.168.0.16) выполните
$ cd /usr/local/bin
sudo chmod +x kubeadm
sudo chmod +x crictl
sudo kubeadm join 192.168.0.101:6443 --token <token> \
--discovery-token-ca-cert-hash sha256:<sha> \
--control-plane --certificate-key <key>
6. Добавьте рабочие узлы в кластер
Для этого на узлах kube-wrkr03 (192.168.0.23) и kube-wrkr04 (192.168.0.24) выполните
$ cd /usr/local/bin
sudo chmod +x kubeadm
sudo chmod +x crictl
sudo kubeadm join 192.168.0.101:6443 --token <token> \
--discovery-token-ca-cert-hash sha256:<sha>
7. Настройте управление кластером
Рабочий режим ALS COS не предоставляет возможности логина, а постоянные перезагрузки в отладочный режим не являются целевым сценарием для работы сервера.
Поэтому для управления кластером через kubectl файл конфигурации кластера нужно перенести на рабочее место, допускающее возможность подключения администратора.
В примере ниже в качестве рабочего места будет использоваться Узел сборки, поскольку там, в процессе подготовки проекта сборки скачивается kubectl.
7.1. На одном из узлов control-plane (например, 192.168.0.14) выполните команды
$ mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
7.2. На узле сборки выполните команды
$ mkdir -p $HOME/.kube scp administrator@192.168.0.14:$HOME/.kube/config $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
Сейчас пользователь, под чьей учёткой выполнялись команды, получил возможность выполнять команду kubectl для наблюдения и управления собранным кластером.
8. Перезагрузите все узлы кластера в рабочем режиме
На узле кластера достаточно выполнить команду
$ sudo reboot
Рабочий режим Regular при загрузке ОС будет выбран по умолчанию

Управление кластером в рабочем режиме
В примере ниже существляется с Узла сборки
1. Проверка кластера
$ kubectl get nodes NAME STATUS ROLES AGE VERSION kube-mngr04 NotReady control-plane 56m v1.34.1 kube-mngr05 NotReady control-plane 35m v1.34.1 kube-mngr06 NotReady control-plane 29m v1.34.1 kube-wrkr03 NotReady <none> 28m v1.34.1 kube-wrkr04 NotReady <none> 26m v1.34.1
Узлы имеют статус NotReady, потому что отсутствует сетевой плагин.
2. Установите сетевой плагин Calico
$ kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/calico.yaml
3. Через некоторое время снова проверьте состояние кластера
$ kubectl get nodes NAME STATUS ROLES AGE VERSION kube-mngr04 Ready control-plane 67m v1.34.1 kube-mngr05 Ready control-plane 45m v1.34.1 kube-mngr06 Ready control-plane 39m v1.34.1 kube-wrkr03 Ready <none> 38m v1.34.1 kube-wrkr04 Ready <none> 36m v1.34.1
Поздравляем! Ваш кластер kubernetes готов к работе на серверах под управлением Astra Linux Server Container OS!
- Нет меток