Когда в стойке появляется десяток новых серверов, ручная установка превращается в долгий день с флешками, 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, и только потом подключайте остальные стойки. Такой порядок экономит время и не превращает автоматизацию в источник аварий.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте