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 и не платить сложностью за неиспользуемые возможности.