OpenStack — набор сервисов, превращающих несколько серверов в частное облако с API, проектами, квотами и самообслуживанием. Пользователь получает не SSH на гипервизор, а привычные операции: создать машину, подключить том, назначить плавающий адрес. Ниже — когда платформа оправдана, как собрать минимальное облако на Kolla-Ansible и что проверять, когда инстанс не запускается.

Когда OpenStack оправдан, а когда нет

Ошибка внедрения — выбирать инструмент по названию. OpenStack решает мультитенантность, автоматизацию через API и единые квоты. Если нужно поднять десяток машин для отдела, Proxmox VE или KVM с libvirt сделают это быстрее и дешевле в сопровождении.

  • Нужен self-service: разработчики сами создают окружения.
  • Много проектов и арендаторов: изоляция сетей, квоты, роли Keystone.
  • API как контракт для Terraform, CI и внутреннего портала.
  • Есть команда: минимум два человека на MySQL, RabbitMQ, Ceph и сеть.

Обратная сторона: без Ceph и нормальной сети облако упирается в дисковую подсистему, а отладка Neutron требует понимания VXLAN и Open vSwitch. Считайте стоимость сопровождения до пилота.

Архитектура минимального облака

Keystone отвечает за аутентификацию, Nova — за вычисления, Neutron — за сети, Glance — за образы, Cinder — за тома, Placement — за учёт ресурсов, Horizon — за веб-интерфейс. Всё опирается на общую базу и очередь.

  • MariaDB — состояние сервисов.
  • RabbitMQ — обмен сообщениями.
  • Memcached — кэш токенов.
  • HAProxy и keepalived — единая точка входа.

Для теста хватит одной машины с 16 ГБ RAM, продакшен начинается с трёх контроллеров и отдельного хранилища. Контроллеры держат API и базы, вычислительные узлы — гипервизор и агент Neutron.

Железо и сеть

Сеть — самая частая причина проблем. Заведите отдельные VLAN: управление, API, оверлей VXLAN, хранилище. Два интерфейса 10 или 25 Гбит/с в LACP дают запас и отказоустойчивость. В BIOS включите VT-x или AMD-V и IOMMU.

grep -Eo 'vmx|svm' /proc/cpuinfo | sort -u
lscpu | grep -i virtualization
ip -br link show
cat /proc/net/bonding/bond0

Конфигурацию удобно описать в netplan. Ключ gateway4 в новых версиях устарел, используйте routes.

network:
  version: 2
  ethernets:
    eno1: {dhcp4: false}
    eno2: {dhcp4: false}
  bonds:
    bond0:
      interfaces: [eno1, eno2]
      parameters:
        mode: 802.3ad
        lacp-rate: fast
      addresses: [10.10.0.11/24]
      routes:
        - to: default
          via: 10.10.0.1
      nameservers:
        addresses: [10.10.0.53]
  vlans:
    bond0.200:
      id: 200
      link: bond0

Для VXLAN нужен запас MTU: на физике обычно 9000, внутри оверлея 1450. Иначе SSH работает, а большие пакеты молча теряются.

Подготовка узлов и Kolla-Ansible

Kolla-Ansible разворачивает сервисы в контейнерах и остаётся самым предсказуемым способом собрать облако. Ставьте его в виртуальное окружение на управляющей машине.

sudo apt update && sudo apt install -y python3-venv python3-dev git
python3 -m venv ~/kolla-venv
source ~/kolla-venv/bin/activate
pip install -U pip
pip install kolla-ansible

Сгенерируйте пароли и разложите конфигурацию: каталог /etc/kolla попадёт в резервные копии.

sudo mkdir -p /etc/kolla
sudo chown $USER:$USER /etc/kolla
cp -r ~/kolla-venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla/
kolla-genpwd

Конфигурация globals.yml

Файл /etc/kolla/globals.yml задаёт сеть, интерфейсы и набор сервисов.

kolla_base_distro: "ubuntu"
network_interface: "bond0"
neutron_external_interface: "bond0.200"
neutron_plugin_agent: "openvswitch"
neutron_tenant_network_types: "vxlan"
nova_compute_virt_type: "kvm"
enable_horizon: "yes"
enable_cinder: "yes"
enable_cinder_backend_ceph: "yes"
ceph_pool_replicas: 3
kolla_internal_vip_address: "10.10.0.10"

Инвентарь перечисляет роли узлов. Агенты Neutron должны стоять там, где живут инстансы.

[control]
ctrl01 ansible_host=10.10.0.11
ctrl02 ansible_host=10.10.0.12
ctrl03 ansible_host=10.10.0.13

[network:children]
control

[compute]
cmp01 ansible_host=10.10.0.21
cmp02 ansible_host=10.10.0.22

[storage]
cmp01
cmp02

Развёртывание и первый инстанс

Порядок важен: bootstrap готовит пакеты, prechecks ловит несовместимости, deploy раскатывает контейнеры.

kolla-ansible -i ./inventory bootstrap-servers
kolla-ansible -i ./inventory prechecks
kolla-ansible -i ./inventory deploy
kolla-ansible -i ./inventory post-deploy

После post-deploy появляется admin-openrc.sh. Дальше — проект, образ, сеть, роутер и сервер; внешняя сеть ext-net создаётся init-runonce или вручную.

source /etc/kolla/admin-openrc.sh
openstack flavor create --vcpus 2 --ram 4096 --disk 20 m1.small
openstack image create --disk-format qcow2 --file noble-server-cloudimg-amd64.img ubuntu-24.04
openstack network create demo-net
openstack subnet create --network demo-net --subnet-range 192.168.50.0/24 demo-subnet
openstack router create demo-router
openstack router set --external-gateway ext-net demo-router
openstack server create --flavor m1.small --image ubuntu-24.04 --network demo-net demo-vm

Образ берите cloud-вариант с cloud-init: пользователь и SSH-ключ создадутся сами. Плавающий адрес выдаёт openstack floating ip create ext-net.

Хранилище: Ceph и Cinder

Ceph даёт три реплики, live-миграцию и тома, не привязанные к узлу. Минимум — три узла с отдельными NVMe под OSD и сетью 10 Гбит/с. Не размещайте OSD на системных дисках.

  • Пул volumes — для Cinder, images — для Glance.
  • Репликация 3 и size=3 в правилах CRUSH.
  • Отдельный пул под бэкапы.
ceph -s
ceph osd tree
ceph df detail
rbd ls volumes

Диагностика типовых сбоев

Когда инстанс в статусе ERROR, смотрите API и логи узла, а не Horizon.

openstack compute service list
openstack network agent list
openstack volume service list
openstack server show demo-vm -f yaml
openstack hypervisor list
sudo docker logs --tail 100 nova_compute

No valid host почти всегда означает нехватку ресурсов в Placement или несовпадение агрегатов. Build of instance aborted связан с Glance или сетью. Растущая очередь RabbitMQ видна по rabbitmqctl list_queues name messages.

Обновление и резервное копирование

Обновляйтесь по одному релизу, сначала на тестовом стенде: Kolla тянет образы и перезапускает контейнеры по ролям. Команды те же, что при развёртывании: pull, prechecks, deploy, post-deploy.

В бэкап входят дамп MariaDB, /etc/kolla и конфигурация Ceph. Проверяйте восстановление: непроверенная копия не считается копией.

mysqldump --single-transaction --all-databases > /backup/openstack-$(date +%F).sql
tar czf /backup/kolla-etc-$(date +%F).tar.gz /etc/kolla
ceph fs snapshot cephfs backup-$(date +%F) 2>/dev/null || true

Чек-лист перед продакшеном

  • Три контроллера, VIP проверен переключением.
  • NTP синхронизирован, расхождение меньше секунды.
  • MTU согласован на физике, bond и оверлее.
  • Ceph в состоянии HEALTH_OK.
  • Квоты и роли настроены, арендатор не видит чужие сети.
  • Бэкап снят и проверен восстановлением.
  • Мониторинг смотрит на API, RabbitMQ и OSD.

Итог

OpenStack остаётся рабочей платформой для частного облака, но это инфраструктурный проект, а не установка пакета. Начните с одного контроллера и одного вычислительного узла, прогоните создание инстанса, тома и плавающего адреса, затем добавьте Ceph и отказоустойчивость. Если задачи сводятся к десятку машин без API и арендаторов, честнее выбрать Proxmox и не платить сложностью за неиспользуемые возможности.

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

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

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

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

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