Magnum — это API-сервис OpenStack, созданный для того, чтобы помочь пользователям OpenStack управлять механизмами оркестровки контейнеров, такими как Kubernetes, Docker Swarm и Apache Mesos. Magnum использует Heat для оркестровки образа ОС, содержащего Docker и Kubernetes, и запускает этот образ на виртуальных машинах или на пустом металле в кластерной конфигурации.

В этом руководстве мы рассмотрим шаги, необходимые для настройки Magnum Container Orchestration Service в OpenStack. Прежде чем приступить к выполнению этого руководства, необходимо иметь рабочую облачную среду OpenStack. Для сред разработки у нас есть руководство, к которому вы можете обратиться:

  • Развертывание OpenStack на Ubuntu с помощью DevStack
  • Развертывание OpenStack на CentOS 7 с помощью Packstack
  • Установка OpenStack на CentOS 8 с помощью Packstack

Прежде чем начать

Вам необходимо иметь доступ к:

  • Сервер базы данных, используемый службами OpenStack
  • Доступ root для изменения конфигурационных файлов Magnum в контроллере
  • Доступ к администратору учетные данные файл — .keystonerc или .admin-openrc

Подтвердив доступ к вышеуказанным ресурсам, вы можете приступить к настройке контейнерного сервиса Magnum в OpenStack.

Шаг 1: Создайте пользователя базы данных Magnum

Создайте базу данных magnum и предоставьте соответствующий доступ к ней:

$ sudo mysql -u root -p
CREATE DATABASE magnum;
GRANT ALL PRIVILEGES ON magnum.* TO 'magnum'@'localhost' IDENTIFIED BY 'aShuumoNg8ieche';
GRANT ALL PRIVILEGES ON magnum.* TO 'magnum'@'%' IDENTIFIED BY 'aShuumoNg8ieche';
FLUSH PRIVILEGES;
\q

Заменить MagnumDBPassword с подходящим паролем для пользователя базы данных magnum.

Шаг 2: Создайте пользователя службы magnum

Введите учетные данные администратора, чтобы получить доступ к командам CLI, доступным только администратору:

source ~/.keystonerc

Затем создайте учетную запись пользователя службы magnum.

$ openstack user create --domain default --project service --password aShuumoNg8ieche magnum
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| default_project_id  | 0766331616c7429a9b459d0d642cc4db |
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 60e671d56e4148bca1d5be2e2a1197c4 |
| name                | magnum                           |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

Добавьте роль администратора пользователю magnum:

openstack role add --project service --user magnum admin

Создайте сущность службы magnum:

$ openstack service create --name magnum --description "OpenStack Container Infrastructure Management Service" container-infra
+-------------+-------------------------------------------------------+
| Field       | Value                                                 |
+-------------+-------------------------------------------------------+
| description | OpenStack Container Infrastructure Management Service |
| enabled     | True                                                  |
| id          | 67eb5d6b7a234f0d84a74806fdfd8e37                      |
| name        | magnum                                                |
| type        | container-infra                                       |
+-------------+-------------------------------------------------------+

Шаг 3: Создание конечных точек API сервиса

Создайте конечные точки API сервиса Container Infrastructure Management.

Заменить контроллер значение с IP-адресом, к которому прислушивается magnum. Это также может быть имя хоста, к которому могут обращаться экземпляры Compute.

$ export controller=192.168.1.10
$ openstack endpoint create --region RegionOne container-infra public http://$controller:9511/v1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 49fa8d06927747fca27e33e4bbb71180 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | c4f62b6df2694b489d8cdf8caf4f00e1 |
| service_name | magnum                           |
| service_type | container-infra                  |
| url          | http://192.168.1.10:9511/v1      |
+--------------+----------------------------------+

$ openstack endpoint create --region RegionOne container-infra internal http://$controller:9511/v1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 1eeba15e78fd4d71b4319ac3479d4078 |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | c4f62b6df2694b489d8cdf8caf4f00e1 |
| service_name | magnum                           |
| service_type | container-infra                  |
| url          | http://192.168.1.10:9511/v1      |
+--------------+----------------------------------+

$ openstack endpoint create --region RegionOne container-infra admin http://$controller:9511/v1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 12719874757b4c6e9483c0f62a9154d5 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | c4f62b6df2694b489d8cdf8caf4f00e1 |
| service_name | magnum                           |
| service_type | container-infra                  |
| url          | http://192.168.1.10:9511/v1      |
+--------------+----------------------------------+

Шаг 4: Создание домена Magnum

Создайте домен magnum, содержащий проекты и пользователей для службы контейнеров.

$ openstack domain create --description "Owns users and projects created by magnum" magnum
+-------------+-------------------------------------------+
| Field       | Value                                     |
+-------------+-------------------------------------------+
| description | Owns users and projects created by magnum |
| enabled     | True                                      |
| id          | 602fe4ebda15445d87f42237a7af9240          |
| name        | magnum                                    |
| tags        | []                                        |
+-------------+-------------------------------------------+

Создайте magnum_domain_admin пользователь для управления проектами и пользователями в домене magnum

$ openstack user create --domain magnum --password aShuumoNg8ieche magnum_domain_admin
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | 602fe4ebda15445d87f42237a7af9240 |
| enabled             | True                             |
| id                  | 7339631f125a40d5b77b0f959990203e |
| name                | magnum_domain_admin              |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

Добавьте роль администратора в magnum_domain_admin пользователя в домене magnum, чтобы включить привилегии административного управления:

openstack role add --domain magnum --user-domain magnum --user magnum_domain_admin admin

Шаг 5: Установите и настройте компоненты Magnum

Теперь мы можем установить пакеты, необходимые для Magnum.

### CentOS 8+ ###
sudo yum install openstack-magnum-api openstack-magnum-conductor python3-magnumclient

###  CentOS 7 ### 
sudo yum -y install openstack-magnum-api openstack-magnum-conductor python-magnumclient

### Ubuntu ###
sudo apt -y install magnum-api magnum-conductor python3-magnumclient

Отредактируйте файл /etc/magnum/magnum.conf файл и настройте хост в [api] разделе:

[api]
host = CONTROLLER_IP
port = 9511
enabled_ssl = False

В [certificates] В разделе выберите барбакан (или x509keypair если у вас не установлен барбикен):

[certificates]
cert_manager_type = barbican

В [cinder_client] настройте имя региона:

[cinder_client]
region_name = RegionOne

Регион клиента Magnum:

[magnum_client]
region_name = RegionOne

Клиентский регион Барбикан

[barbican_client]
region_name = RegionOne

В [database] настройте доступ к базе данных:

[database]
connection = mysql+pymysql://magnum:aShuumoNg8ieche@controller/magnum

Заменить MAGNUM_DBPASS с паролем, который вы выбрали для базы данных magnum.

В [keystone_authtoken] и [trust] разделов, настройте доступ к службе Identity:

[keystone_authtoken]
memcached_servers = controller:11211
auth_version = v3
www_authenticate_uri = http://controllerip:5000/v3
project_domain_id = default
project_name = service
user_domain_id = default
password = aShuumoNg8ieche
username = magnum
auth_url = http://controller:5000
auth_type = password

admin_user = magnum
admin_password = aShuumoNg8ieche
admin_tenant_name = service

[trust]
trustee_domain_name = magnum
trustee_domain_admin_name = magnum_domain_admin
trustee_domain_admin_password = aShuumoNg8ieche
trustee_keystone_interface = public
  • Заменить
  • контроллерип с IP-адресом контроллера / сервера Magnum API
  • MAGNUM_PASS с паролем, который вы выбрали для пользователя magnum в службе Identity
  • ДОМЕН_АДМИН_ПАСС с паролем, который вы выбрали для пользователя magnum_domain_admin.
  • KEYSTONE_INTERFACE с публичным или внутренним интерфейсом в зависимости от конфигурации вашей сети.

В [oslo_messaging_notifications] настройте драйвер:

[oslo_messaging_notifications]
driver = messagingv2

В разделе [DEFAULT] установите каталог журнала и настройте RabbitMQ доступ к очереди сообщений:

[DEFAULT]
state_path = /var/lib/magnum
rootwrap_config = /etc/magnum/rootwrap.conf
log_dir = /var/log/magnum
transport_url = rabbit://guest:guest@controllerip
  • Заменить гость:гость с именем пользователя и паролем, которые вы выбрали для учетной записи openstack в RabbitMQ.
  • controllerip с IP-адресом узла контроллера OpenStack

Отредактируйте /etc/magnum/magnum.conf файл и установите путь_блокировки в разделе [oslo_concurrency] раздел:

[oslo_concurrency]
lock_path = /var/lib/magnum/tmp

Тепловой клиент:

[heat_client]
region_name = RegionOne

Заполните базу данных Magnum:

$ sudo su -s /bin/sh -c "magnum-db-manage upgrade" magnum
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> 2581ebaf0cb2, initial migration
INFO  [alembic.runtime.migration] Running upgrade 2581ebaf0cb2 -> 3bea56f25597, Multi Tenant Support
INFO  [alembic.runtime.migration] Running upgrade 3bea56f25597 -> 5793cd26898d, Add bay status
INFO  [alembic.runtime.migration] Running upgrade 5793cd26898d -> 3a938526b35d, Add docker volume size column
INFO  [alembic.runtime.migration] Running upgrade 3a938526b35d -> 35cff7c86221, add private network to baymodel
INFO  [alembic.runtime.migration] Running upgrade 35cff7c86221 -> 1afee1db6cd0, Add master flavor
INFO  [alembic.runtime.migration] Running upgrade 1afee1db6cd0 -> 2d1354bbf76e, ssh authorized key
INFO  [alembic.runtime.migration] Running upgrade 2d1354bbf76e -> 29affeaa2bc2, rename-bay-master-address
INFO  [alembic.runtime.migration] Running upgrade 29affeaa2bc2 -> 2ace4006498, rename-bay-minions-address
INFO  [alembic.runtime.migration] Running upgrade 2ace4006498 -> 456126c6c9e9, create baylock table
INFO  [alembic.runtime.migration] Running upgrade 456126c6c9e9 -> 4ea34a59a64c, add-discovery-url-to-bay
INFO  [alembic.runtime.migration] Running upgrade 4ea34a59a64c -> e772b2598d9, add-container-command
INFO  [alembic.runtime.migration] Running upgrade e772b2598d9 -> 2d8657c0cdc, add bay uuid
INFO  [alembic.runtime.migration] Running upgrade 2d8657c0cdc -> 4956f03cabad, add cluster distro
INFO  [alembic.runtime.migration] Running upgrade 4956f03cabad -> 592131657ca1, Add coe column to BayModel
INFO  [alembic.runtime.migration] Running upgrade 592131657ca1 -> 3b6c4c42adb4, Add unique constraints
INFO  [alembic.runtime.migration] Running upgrade 3b6c4c42adb4 -> 2b5f24dd95de, rename service port
INFO  [alembic.runtime.migration] Running upgrade 2b5f24dd95de -> 59e7664a8ba1, add_container_status
INFO  [alembic.runtime.migration] Running upgrade 59e7664a8ba1 -> 156ceb17fb0a, add_bay_status_reason
INFO  [alembic.runtime.migration] Running upgrade 156ceb17fb0a -> 1c1ff5e56048, rename_container_image_id
INFO  [alembic.runtime.migration] Running upgrade 1c1ff5e56048 -> 53882537ac57, add host column to pod
INFO  [alembic.runtime.migration] Running upgrade 53882537ac57 -> 14328d6a57e3, add master count to bay
INFO  [alembic.runtime.migration] Running upgrade 14328d6a57e3 -> 421102d1f2d2, create x509keypair table
INFO  [alembic.runtime.migration] Running upgrade 421102d1f2d2 -> 6f21dc998bb, Add master_addresses to bay
INFO  [alembic.runtime.migration] Running upgrade 6f21dc998bb -> 966a99e70ff, add-proxy
INFO  [alembic.runtime.migration] Running upgrade 966a99e70ff -> 6f21dc920bb, Add cert_uuuid to bay
INFO  [alembic.runtime.migration] Running upgrade 6f21dc920bb -> 5518af8dbc21, Rename cert_uuid
INFO  [alembic.runtime.migration] Running upgrade 5518af8dbc21 -> 4e263f236334, Add registry_enabled
INFO  [alembic.runtime.migration] Running upgrade 4e263f236334 -> 3be65537a94a, add_network_driver_baymodel_column
INFO  [alembic.runtime.migration] Running upgrade 3be65537a94a -> 1481f5b560dd, add labels column to baymodel table
INFO  [alembic.runtime.migration] Running upgrade 1481f5b560dd -> 1d045384b966, add-insecure-baymodel-attr
INFO  [alembic.runtime.migration] Running upgrade 1d045384b966 -> 27ad304554e2, adding magnum_service functionality
INFO  [alembic.runtime.migration] Running upgrade 27ad304554e2 -> 5ad410481b88, rename-insecure
INFO  [alembic.runtime.migration] Running upgrade 5ad410481b88 -> 2ae93c9c6191, add public column to baymodel table
INFO  [alembic.runtime.migration] Running upgrade 2ae93c9c6191 -> 33ef79969018, Add memory to container
INFO  [alembic.runtime.migration] Running upgrade 33ef79969018 -> 417917e778f5, Add server_type column to baymodel
INFO  [alembic.runtime.migration] Running upgrade 417917e778f5 -> 5977879072a7, add-env-to-container
INFO  [alembic.runtime.migration] Running upgrade 5977879072a7 -> 40f325033343, add bay_create_timeout to bay
INFO  [alembic.runtime.migration] Running upgrade 40f325033343 -> adc3b7679ae, add registry_trust_id to bay
INFO  [alembic.runtime.migration] Running upgrade adc3b7679ae -> 57fbdf2327a2, remove baylock
INFO  [alembic.runtime.migration] Running upgrade 57fbdf2327a2 -> 05d3e97de9ee, add volume driver
INFO  [alembic.runtime.migration] Running upgrade 05d3e97de9ee -> bb42b7cad130, remove node object
INFO  [alembic.runtime.migration] Running upgrade bb42b7cad130 -> 5d4caa6e0a42, create trustee for each bay
INFO  [alembic.runtime.migration] Running upgrade 5d4caa6e0a42 -> ee92b41b8809, Introduce Quotas
INFO  [alembic.runtime.migration] Running upgrade ee92b41b8809 -> 049f81f6f584, remove_ssh_authorized_key_from_baymodel
INFO  [alembic.runtime.migration] Running upgrade 049f81f6f584 -> e647f5931da8, add insecure_registry to baymodel
INFO  [alembic.runtime.migration] Running upgrade e647f5931da8 -> ef08a5e057bd, remove pod object
INFO  [alembic.runtime.migration] Running upgrade ef08a5e057bd -> d072f58ab240, modify x509keypair table
INFO  [alembic.runtime.migration] Running upgrade d072f58ab240 -> a1136d335540, Add docker storage driver column
INFO  [alembic.runtime.migration] Running upgrade a1136d335540 -> 085e601a39f6, remove service object
INFO  [alembic.runtime.migration] Running upgrade 085e601a39f6 -> 68ce16dfd341, add master_lb_enabled column to baymodel table
INFO  [alembic.runtime.migration] Running upgrade 68ce16dfd341 -> e0653b2d5271, Add fixed_subnet column to baymodel table
INFO  [alembic.runtime.migration] Running upgrade e0653b2d5271 -> 1f196a3dabae, remove container object
INFO  [alembic.runtime.migration] Running upgrade 1f196a3dabae -> 859fb45df249, remove replication controller
INFO  [alembic.runtime.migration] Running upgrade 859fb45df249 -> b1f612248cab, Add floating_ip_enabled column to baymodel table
INFO  [alembic.runtime.migration] Running upgrade b1f612248cab -> fcb4efee8f8b, add version info to bay
INFO  [alembic.runtime.migration] Running upgrade fcb4efee8f8b -> fb03fdef8919, rename_baymodel_to_clustertemplate
INFO  [alembic.runtime.migration] Running upgrade fb03fdef8919 -> 720f640f43d1, rename bay table to cluster
INFO  [alembic.runtime.migration] Running upgrade 720f640f43d1 -> bc46ba6cf949, add keypair to cluster
INFO  [alembic.runtime.migration] Running upgrade bc46ba6cf949 -> aa0cc27839af, add docker_volume_size to cluster
INFO  [alembic.runtime.migration] Running upgrade aa0cc27839af -> a0e7c8450ab1, add labels to cluster
INFO  [alembic.runtime.migration] Running upgrade a0e7c8450ab1 -> 52bcaf58fecb, add master_flavor_id to cluster
INFO  [alembic.runtime.migration] Running upgrade 52bcaf58fecb -> 04c625aa95ba, change storage driver to string
INFO  [alembic.runtime.migration] Running upgrade 04c625aa95ba -> 041d9a0f1159, add flavor_id to cluster
INFO  [alembic.runtime.migration] Running upgrade 041d9a0f1159 -> 9a1539f1cd2c, "add federation table
INFO  [alembic.runtime.migration] Running upgrade 9a1539f1cd2c -> cbbc65a86986, Add health_status and health_status_reason to cluster
INFO  [alembic.runtime.migration] Running upgrade cbbc65a86986 -> 87e62e3c7abc, add hidden to cluster template

Запустите службы управления инфраструктурой контейнеров и настройте их на запуск при загрузке системы:

### Ubuntu ###
sudo systemctl restart magnum-api magnum-conductor

### CentOS ###
sudo systemctl enable --now openstack-magnum-api.service openstack-magnum-conductor.service

Проверка состояния служб

systemctl status openstack-magnum-api.service openstack-magnum-conductor.service

Чтобы узнать состояние внутренних служб, а именно проводника, из magnum, используйте:

openstack coe service list --column id --column host --column binary --column state --column disabled --column created_at

Пример вывода:

+----+------+------------------+-------+----------+---------------------------+
| id | host | binary           | state | disabled | created_at                |
+----+------+------------------+-------+----------+---------------------------+
|  1 | None | magnum-conductor | up    | False    | 2024-07-24T18:35:47+00:00 |
+----+------+------------------+-------+----------+---------------------------+