Установка Stackland на Yandex BareMetal
Yandex BareMetal — это сервис по аренде выделенных физических серверов, все ресурсы которых доступны для решения только ваших задач. Yandex Cloud Stackland поддерживает Yandex BareMetal как одно из окружений для развертывания.
В данном руководстве вы узнаете, как арендовать сервера Yandex BareMetal и подготовить их к развертыванию Stackland, как подготовить конфигурационный файл для установки Stackland на арендованные сервера. Прочитать, как развернуть кластер Yandex Cloud Stackland на уже подготовленной инфраструктуре, можно в Руководстве по установке.
Для настройки окружения в данном руководстве используется Консоль управления Yandex Cloud
Введение
Для развертывания Stackland потребуется минимум четыре сервера:
-
Один бастион (также называемый jump host), с которого производится развертывание и последующее взаимодействие с кластером Stackland.
-
Три сервера для будущего кластера Stackland, подключенные к одной приватной сети. Три сервера с ролью
combined— это минимальная конфигурация Stackland.
Конфигурацию серверов лучше выбирать исходя из предполагаемых нагрузок для будущего кластера. Рекомендуемое количество ресурсов для кластера можно найти в Руководстве по установке.
Общая схема инсталляции приведена ниже:
Шаг 1. Создайте приватную подсеть
Для успешного развертывания все сервера должны находиться в одной приватной сети. Чтобы автоматически назначать IP-адреса серверам кластера, в этой сети удобно использовать DHCP.
Создайте приватную подсеть с DHCP-сервером:
-
Откройте форму создания приватной сети в сервисе Yandex BareMetal и активируйте переключатель IP-адресация и маршрутизация. Открыть форму можно по инструкции Создать приватную подсеть.
-
В поле Виртуальный сетевой сегмент (VRF) нажмите кнопку Создать.
-
В открывшемся окне Создание виртуального сетевого сегмента нажмите кнопку Создать VRF.
-
Укажите CIDR для создаваемой подсети. Он может быть любым из диапазона RFC1918
, также рекомендуется использовать маску/24. Например, в поле CIDR можно указать192.168.22.0/24. -
Укажите первый адрес из выбранного CIDR (т.е.
192.168.22.1) в качестве шлюза по умолчанию. -
Активируйте опцию Назначение IP-адресов по DHCP.
-
Укажите диапазон для IP-адресов, например
192.168.22.2—192.168.22.120. Диапазон должен быть достаточно широким, чтобы вместить все узлы будущего кластера Stackland и еще один хост.
Важно
IP-адреса, назначенные серверам по DHCP, могут изменяться. Описание работы DHCP см. в документации сервиса Yandex BareMetal.
Перед началом установки лучше проверить, что адреса, назначенные серверам по DHCP, актуальны и совпадают с адресами, указанными в DNS-конфигурации на Шаге 5.
Шаг 2. Аренда серверов
-
Арендуйте сервер для бастиона, как описано в документации.
В настройках:
- Можно выбрать минимальную готовую конфигурацию для сервера, если она подходит под ваши задачи.
- В качестве операционной системы выберите Ubuntu 24.04.
- В поле Приватная подсеть выберите созданную на первом шаге подсеть.
- Выделите бастиону Публичный адрес / Из эфемерной подсети, чтобы предоставить ему доступ в Интернет.
- Задайте пароль для пользователя
rootи добавьте свой SSH-ключ.
После создания бастиона запишите Публичный IP-адрес и Приватный IP-адрес бастиона — они потребуются вам в дальнейшем.
В качестве бастиона можно использовать виртуальную машину, запущенную в Yandex Cloud. Настроить сетевую связность между виртуальной машиной и серверами BareMetal можно с помощью инструкции в официальной документации.
Важно
Установление приватного соединения между кластером BareMetal и облачными сетями может занять до 24 часов.
-
Арендуйте не менее трех серверов для будущего кластера Stackland.
В настройках:
- Выберите опцию Без операционной системы, поскольку Stackland поставляется со своей собственной ОС.
- В поле Приватная подсеть выберите созданную на первом шаге подсеть.
- Выберите опцию Без адреса для публичного адреса — все взаимодействия с кластером Stackland будет происходить через бастион.
Дождитесь, пока серверы будут арендованы. Далее, откройте поочередно вкладку Обзор каждого из серверов будущего кластера Stackland и запишите MAC-адрес, указанный в поле Приватная сеть / MAC-адрес:

Эта информация потребуется на шаге 6.
Шаг 3. Настройка бастиона
Бастион решает три основных задачи:
- Обеспечивает доступ к кластеру Stackland из внешних сетей, например, интернета или сети вашей организации;
- Обеспечивает доступ узлов кластера Stackland в интернет;
- Служит для размещения инфраструктурных сервисов, необходимых для функционирования Stackland, например, DNS и NTP. При развертывании в периметре компании эти сервисы предоставляются ее ИТ-инфраструктурой.
Перед началом настройки зайдите на бастион через SSH с помощью публичного IP-адреса, увеличенного на единицу.
3.1 Настройка сетевых доступов
Для обеспечения внешнего доступа к кластеру Stackland рекомендуется установить VPN-сервер, например, OpenVPN
После установки и настройки VPN-сервера следует настроить IPv4-маршрутизацию и NAT, поскольку бастион будет выполнять роль роутера для подключающихся по VPN-клиентов. Ряд VPN-серверов делает это автоматически. При необходимости настройте маршрутизацию на бастионе самостоятельно:
-
Установите
ufw:sudo apt install ufw. -
Включите IPv4-маршрутизацию: раскомментируйте строку
net.ipv4.ip_forward=1в/etc/sysctl.confи примените изменения командойsudo sysctl -p. -
Отредактируйте
/etc/default/ufwи изменитеDEFAULT_FORWARD_POLICYнаACCEPT. -
Создайте файл
/etc/ufw/before.rulesследующего содержания:*nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s <CIDR подсети, из которой выделяются адреса клиентов VPN> -j MASQUERADE -A POSTROUTING -s <CIDR приватной подсети, созданной на этапе 1> -j MASQUERADE COMMITПервое правило с
-A POSTROUTINGв этом файле обеспечивает NAT-трансляцию для VPN-клиентов, второе отвечает за NAT-трансляцию для узлов кластера, выходящих в Интернет (например, для загрузки контейнерных образов). Поскольку подключение происходит через NAT, узлы кластера не будут доступны из Интернета напрямую. Например, если VPN-сервер настроен так, что адреса клиентов выделяются из диапазона 10.8.0.0/24, правила выше будут иметь вид:*nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE -A POSTROUTING -s 192.168.22.0/24 -j MASQUERADE COMMIT -
Примените изменения с помощью команд:
sudo ufw disable sudo ufw allow 22/tcp comment 'SSH' sudo ufw allow 1194/udp comment 'OpenVPN' sudo ufw allow from 192.168.22.0/24 to any port 53,123 proto udp sudo ufw enable -
Обеспечьте анонс маршрутов до приватной подсети, созданной на шаге 1, клиентам, подключающимся по VPN. Это необходимо, чтобы сервисы в кластере Stackland были доступны через VPN-подключение. За подробностями обращайтесь к документации выбранного VPN-сервера.
3.2 Установка дополнительных сервисов
Помимо VPN-сервера на бастионе нужно установить:
- DNS-сервер. Рекомендуется BIND
; - NTP-сервер, например Chrony
; - Интерфейс командной строки Yandex Cloud;
- Утилиту
unzipдля распаковки архива инсталлятора.
Чтобы закончить настройку бастиона:
-
Установите BIND, Chrony и unzip из репозиториев Ubuntu стандартным способом:
sudo apt install bind9 bind9utils dnsutils chrony unzip -y -
Настройте BIND в качестве системного кеширующего DNS-резолвера. Для этого отредактируйте файл
/etc/bind/named.conf.optionsи добавьте в секциюforwarders {}IP-адреса публичных DNS-серверов, которые будут выполнять фактическое разрешение. Рекомендуем использовать сервера Yandex DNS:77.88.8.8и77.88.8.1. Кроме того, привяжите BIND к приватному IP-адресу бастиона (в примере ниже —192.168.22.1).; /etc/bind/named.conf.options options { ... forwarders { 77.88.8.8; 77.88.8.1; }; listen-on { 192.168.22.1; }; ... } -
Укажите приватный IP-адрес бастиона как вышестоящий DNS-резолвер (параметр
DNS=) в конфигурационном файле/etc/systemd/resolved.confи перезагрузите настройки сервисов:sudo rndc reconfig sudo systemctl restart systemd-resolvedМногие VPN-сервера предоставляют возможность менять настройки DNS на клиенте при подключении. Уточните, как это делается, в документации выбранного вами VPN-сервера, и выполните соответствующие настройки, чтобы иметь возможность обращаться к сервисам, развернутым в Stackland, извне кластера.
-
Настройте Chrony так, чтобы он принимал NTP-запросы на нужном сетевом интерфейсе. Отредактируйте файл
/etc/chrony/chrony.confи добавьте следующие строки:allow 192.168.22.0/24 bindaddress 192.168.22.1 -
Замените
192.168.22.0/24на CIDR вашей приватной подсети. Перезапустите Chrony:sudo systemctl restart chrony
Шаг 4. Загрузка серверов с установочного ISO-образа
- Перейдите в BareMetal / Загрузочные образы и создайте новый загрузочный образ BareMetal, указав
https://storage.yandexcloud.net/stackland-public/stackland/$version/images/stackland-amd64-$version.isoв качестве Ссылки на образ в Object Storage. Вместо$versionследует подставить актуальную версию Stackland. Этот процесс подробно описан в документации Yandex BareMetal.
Когда пользовательский ISO-образ будет создан, загрузите его поочередно на все сервера будущего кластера Stackland:
- Подключитесь к KVM-консоли каждого сервера.
- Откройте меню Media > Virtual Media Wizard.
- В разделе CD/DVD Media нажмите кнопку Browse.
- В директории
user-isoвыберите ранее созданный загрузочный образ. - Нажмите Connect для подключения образа.
- В правом верхнем углу нажмите кнопку Reboot to cdrom для загрузки с образа.
В настоящее время эту операцию можно проделать только вручную через консоль управления, поочередно на каждом сервере.
Загрузка сервера занимает несколько минут. После загрузки в KVM-консоли появится дашборд, аналогичный приведенному на иллюстрации ниже:

Если вы видите дашборд и на дашборде указан этап Maintenance, значит, загрузка установочного образа прошла успешно. Запишите IP-адрес, назначенный каждому узлу будущего кластера Stackland — он приведен в поле IP в правой колонке. Эта информация потребуется при подготовке конфигурационного файла.
Шаг 5. Настройка DNS
При развертывании Stackland в периметре компании можно использовать существующую инфраструктуру DNS. Поскольку в BareMetal такой инфраструктуры нет, ее необходимо настроить. В частности, нужно делегировать будущему кластеру Stackland некоторую DNS-зону, например, stackland.internal.
-
Создайте на бастионе файл родительской зоны (
/etc/bind/db.internal) следующего содержания:; /etc/bind/db.internal $TTL 1H @ IN SOA ns1.internal. admin.internal. ( 2025091801 ; Serial 3H ; Refresh 30M ; Retry 1W ; Expire 5M) ; Negative Cache TTL ; @ IN NS ns1.internal. ; ns1.internal. IN A 192.168.22.1 stackland.internal. IN NS node1.baremetal.internal. stackland.internal. IN NS node2.baremetal.internal. stackland.internal. IN NS node3.baremetal.internal.Также создайте файл зоны для серверов — он будет использоваться при определении IP-адресов нод будущего кластера
$TTL 15M @ IN SOA ns1.internal. admin.internal. ( 2025091801 3H 30M 1W 5M ) @ IN NS ns1.internal. node1 IN A 192.168.22.2 node2 IN A 192.168.22.3 node3 IN A 192.168.22.4В данном примере предполагается, что кластер будет развернут в зоне
stackland.internal. Вместо 192.168.22.1 подставьте IP-адрес бастиона, вместоnode1,node2иnode3укажите имена, которые вы планируете назначить combined-нодам, а вместо192.168.22.[2-4]подставьте их IP-адреса, записанные на предыдущем шаге. -
Отредактируйте
/etc/bind/named.conf.localи добавьте только что созданную зону:; /etc/bind/named.conf.local zone "internal" { type master; file "/etc/bind/db.internal"; forwarders {}; }; zone "baremetal.internal" { type master; file "/etc/bind/db.baremetal.internal"; }; -
Перезагрузите зоны BIND командой:
sudo rndc reload -
При отсутствии ошибок проверьте, что разрешение доменных имен работает ожидаемо:
dig -x 192.168.22.1 -t a ns1.internal. # 192.168.22.1 host ns1.internal. # 192.168.22.1
Более подробную информацию по делегированию зоны можно найти в Руководстве по установке.
Шаг 6. Подготовка конфигурационного файла и установка
Конфигурационный файл для инсталлятора имеет формат, описанный в Руководстве по установке. При развертывании на BareMetal следует обратить особое внимание на секцию сетевых настроек, поскольку сервера BareMetal имеют несколько сетевых адаптеров.
Конфигурация состоит из трех частей:
- Конфигурация кластера (
StacklandClusterConfig) — общие настройки кластера, включая платформу, подсети и балансировщик нагрузки. - Конфигурация хостов (
StacklandHostsList) — настройки отдельных серверов, включая роли и сетевые интерфейсы. - Секреты (
StacklandSecretsConfig) — секреты, например, лицензионный ключ или сертификат внутреннего CA.
Для кластера из трех нод, рассматриваемого выше в качестве примера, конфигурационный файл может иметь следующий вид:
# Конфигурация кластера
apiVersion: v1alpha1
kind: StacklandClusterConfig
metadata:
name: main
spec:
platform:
type: "baremetal" # Платформа развертывания
loadBalancer:
type: "cilium-l2" # Тип балансировщика нагрузки
ipPools:
- cidrs:
- 192.168.22.128/25 # Диапазон адресов для балансировщиков
cluster:
baseDomain: "stackland.internal" # Домен кластера
networking:
hostsNetwork:
- cidr: 192.168.22.0/25 # Подсеть хостов кластера
clusterNetwork:
- cidr: 172.16.0.0/16 # Подсеть подов кластера
servicesNetwork:
- cidr: 10.96.0.0/12 # Подсеть сервисов кластера
virtualIPs:
api: 192.168.22.127 # Виртуальный IP для API кластера
storage:
defaultStorageClass: "stackland-ssd" # Класс хранения по умолчанию, отредактируйте в соответствии с конфигурацией серверов
genericHostConfig:
disksConfig:
- installDisk:
name: "/dev/sda" # Диск для установки системы
networkConfig:
addresses:
- interface: "eth0" # Интерфейс будет выбран в StacklandHostsList для каждого хоста в отдельности
dhcp: true # Использовать DHCP для получения IP-адреса
routes:
- to: "0.0.0.0/0" # Маршрут по умолчанию
via: "192.168.22.1"
iface: "eth0"
resolvers:
- "192.168.22.1" # Приватный IP-адрес бастиона
timeservers:
- "192.168.22.1" # Приватный IP-адрес бастиона
---
# Конфигурация хостов
apiVersion: v1alpha1
kind: StacklandHostsList
metadata:
name: main
spec:
hosts:
- hostname: "node1.baremetal.internal" # FQDN первого хоста
role: "combined" # Роль хоста: combined, control-plane или worker
networkConfig:
interfaces:
- macaddress: "06:2A:B7:15:DE:F1" # MAC-адрес, записанный на шаге 2
name: "eth0" # Имя интерфейса
- hostname: "node2.baremetal.internal"
role: "combined"
networkConfig:
interfaces:
- macaddress: "0E:9D:6B:FC:42:88"
name: "eth0"
- hostname: "node3.baremetal.internal"
role: "combined"
networkConfig:
interfaces:
- macaddress: "02:5E:C3:A8:07:D9"
name: "eth0"
Примечание
В примере выше используется DHCP для автоматического назначения IP-адресов серверам. Убедитесь, что IP-адреса, назначенные по DHCP, совпадают с адресами, указанными в DNS-конфигурации на шаге 5.
Завершив редактирование, сохраните конфигурационные файлы в папке config/ и сгенерируйте StacklandSecretsConfig командой:
sladm secrets add --out config/secrets.yaml --license-key key.json
Дальнейший процесс установки не отличается от описанного в Руководстве по установке.
Шаг 7. Проверка работы кластера и дальнейшие шаги
Убедитесь, что:
-
Разрешение DNS-имен кластера работает с бастионного хоста;
-
Вы можете установить VPN-соединение с бастионным хостом;
-
При установленном VPN-соединении вы можете разрешить DNS-имена кластера, и пинг до IP-адресов нод проходит успешно.
Полная процедура проверки работы кластера после установки описана в Руководстве по установке.
Если все перечисленные выше проверки проходят, кластер должен быть доступен с любой машины, установившей VPN-соединение с бастионом.
На этом процесс установки Stackland на Yandex BareMetal завершен. Описание дальнейших шагов по настройке кластера вы можете найти в соответствующих разделах документации.