Когда в стойке появляется десяток новых серверов, ручная установка превращается в долгий день с флешками, KVM-консолями и таблицей в блокноте. MAAS (Metal as a Service) предлагает другой путь: машины загружаются по сети, получают систему из подготовленного образа, а их характеристики автоматически попадают в инвентарь. Разберём, как поднять такой стенд на Ubuntu Server и довести его до первого развёрнутого узла.
Из чего состоит MAAS
MAAS — это набор служб Canonical для управления физическим железом. Region controller отвечает за API, базу PostgreSQL и веб-интерфейс. Rack controller обслуживает конкретный сегмент сети: DHCP, TFTP, HTTP-хранилище образов и загрузку по PXE.
Каждая машина проходит предсказуемые состояния. В New она появляется после обнаружения, в Commissioning выполняется тест оборудования, в Ready ждёт назначения, в Deployed работает под управлением ОС.
- Учёт MAC-адресов, BMC и сетевых карт.
- Управление питанием через IPMI и Redfish.
- Шаблоны cloud-init и пресеты установки.
- Теги для отбора подходящих машин.
Подготовка сети
До установки определите, какой интерфейс смотрит в сеть управления, а какой — в сеть загрузки. DHCP от MAAS не должен пересекаться с другим DHCP в том же L2-сегменте: либо отключите сторонний сервер, либо настройте relay на адрес rack-контроллера, отключив DHCP на маршрутизаторе. Для PXE нужны порты 67, 68 и 69, для панели — 5240, а также доступ к хранилищу образов.
Серверу нужны два адреса: статический для API и адрес в сети, где будут загружаться машины. Не выдавайте второй адрес по DHCP — иначе после перезагрузки стенд может «уехать». Базу данных готовят заранее, чтобы осознанно задать владельца и пароль:
sudo apt update
sudo apt install -y postgresql
sudo -u postgres createuser maas -P
sudo -u postgres createdb -O maas maasdb
Установка region и rack
Удобнее всего ставить MAAS из snap-пакета: так обновления приходят целиком и не конфликтуют с системными библиотеками. После инициализации создайте администратора и получите API-ключ — он заменяет пароль в командной строке.
sudo snap install maas
sudo maas init region+rack --database-uri "postgres://maas:secret@127.0.0.1/maasdb"
sudo maas createadmin --username admin --email admin@example.com
sudo maas apikey --username admin
Проверьте, что службы поднялись, и войдите в CLI. Профиль admin связывает ключ с адресом API; далее все команды выполняются от его имени.
sudo maas status
maas login admin http://127.0.0.1:5240/MAAS "$(sudo maas apikey --username admin)"
maas admin machines read
curl -s http://127.0.0.1:5240/MAAS/api/2.0/version/
PXE, подсети и DHCP
В веб-интерфейсе включите DHCP для нужного VLAN и убедитесь, что подсеть совпадает с адресацией rack-контроллера. MAAS сам передаёт клиентам next-server и имя загрузочного файла, поэтому отдельный TFTP-сервер не нужен. Если в сети есть маршрутизатор с DHCP, настройте на нём опцию 66 или relay — иначе машины получат адрес, но не загрузятся.
Для нескольких VLAN создайте fabrics и subnets и привяжите их к интерфейсам rack-контроллера.
maas admin subnets read
maas admin ipranges create subnet=1 type=dynamic start_ip=10.10.20.100 end_ip=10.10.20.200
maas admin vlan update 1 1 dhcp_on=true primary_rack=abc123
maas admin boot-resources import
Обнаружение и комиссия машин
Включите питание новой машины с загрузкой по сети. Она отправит запрос, получит адрес и зарегистрируется в состоянии New. Если автоматическое обнаружение выключено, добавьте её вручную по MAC-адресу. Затем запустите комиссию: MAAS загрузит диагностический образ, соберёт сведения о процессоре, памяти и дисках и переведёт узел в Ready.
maas admin machines read | jq -r '.[] | [.hostname, .status_name, .system_id] | @tsv'
maas admin machine commission abc123
maas admin machine deploy abc123
maas admin machine release abc123
Для управления питанием укажите тип BMC. Без этого развёртывание будет работать только при ручной перезагрузке, а автоматическая переустановка станет невозможной.
maas admin machine update abc123 \
power_type=redfish \
power_parameters_power_address=10.10.0.25 \
power_parameters_power_user=admin \
power_parameters_power_pass=secret
Шаблоны и теги
Первую настройку удобно вынести в cloud-init: пользователи, SSH-ключи, пакеты, агент мониторинга. Шаблон привязывается к пресету установки или к конкретной машине. Не храните в нём пароли в открытом виде — используйте отдельный vault или передавайте секреты через уже настроенный канал.
#cloud-config
users:
- name: deploy
groups: sudo
shell: /bin/bash
ssh_authorized_keys:
- ssh-ed25519 AAAAC3Nza... deploy@example
package_update: true
packages:
- qemu-guest-agent
- prometheus-node-exporter
runcmd:
- systemctl enable --now prometheus-node-exporter
Теги помогают выбирать железо по признакам: наличие NVMe, объём памяти, площадка. Правило можно задать вручную или сформулировать на языке XPath по данным инвентаря.
maas admin tag create name=nvme comment="Серверы с NVMe"
maas admin machines read | jq -r '.[] | select(.tags | index("nvme")) | .hostname'
maas admin machine deploy abc123 osystem=ubuntu distro_series=noble
Диагностика
Большинство проблем связано с сетью, а не с самим MAAS. Смотрите журнал службы, проверяйте занятость портов и слушайте DHCP-обмен на интерфейсе загрузки. Если машина получает адрес, но не видит загрузчик, почти всегда виновата опция next-server или фильтрация на коммутаторе.
sudo journalctl -u snap.maas.pebble -f
sudo ss -lunp | grep -E '67|69'
sudo tcpdump -ni eth1 port 67 or port 68
maas admin rack-controllers read
Безопасность и чек-лист
API MAAS даёт полный контроль над железом. Закройте 5240 межсетевым экраном и включите TLS, если панель открывается не с localhost.
- Отдельный VLAN для PXE и управления.
- Резервная копия базы PostgreSQL и экспорт конфигурации.
- Уникальные учётные записи BMC, а не общий пароль.
- Проверка загрузки после обновления MAAS.
- Мониторинг свободного места под образы.
Итог
MAAS окупается там, где серверов больше пяти и переустановки повторяются. Стенд состоит из region-контроллера, rack-службы и аккуратно изолированной сети загрузки. Начните с одной подсети и двух тестовых машин, проверьте полный цикл New — Commissioning — Ready — Deployed, и только потом подключайте остальные стойки. Такой порядок экономит время и не превращает автоматизацию в источник аварий.