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 |
1. Подготовьте балансировщик
На примере haproxy и отдельного IP 192.168.0.101:
$ 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!