Установка и настройка

Установка

Важно

Перед началом установки необходимо произвести настройку окружения. Все команды выполняются только от суперпользователя.

Режим суперпользователя:

sudo -i

Важно

Установка производится на управляющий узел.

  1. Перед началом установки сохраните список установленных ранее пакетов, это позволит Вам безболезненно восстановить систему в случае ее повреждения. Для этого выполните следующие команды:

    mkdir -p /tmp/rollback/clouds
    pip3 freeze > /tmp/rollback/clouds/pip_before.txt
    

    После чего в каталоге /tmp/rollback/clouds будет находиться файл pip_before.txt с перечнем установленных приложений.

  2. Также сохраните версии миграции:

    openstack aos db list -n clouds > /tmp/rollback/clouds/migrations.txt
    

    Где:

    • /tmp/rollback/clouds/ - директория файла;
    • migrations.txt - наименование файла с версиями миграций.
  3. Установите пакет Clouds:

    pip3 install clouds
    
  4. Сохраните список установленных пакетов после установки для возможности отката изменений:

    pip3 freeze > /tmp/rollback/clouds/pip_after.txt
    

Настройка

  1. Выполните первичную настройку модуля:

    openstack aos configure -n clouds
    
  2. Создайте каталог для логов с нужными правами:

    mkdir -p /var/log/aos/clouds
    chown -R aos:aos /var/log/aos/clouds
    
  3. Скопируйте образец конфигурационного файла, при использовании нестандартных параметров отредактируйте их (подробнее см. Файл конфигурации):

    cp /etc/aos/clouds.conf.example /etc/aos/clouds.conf
    
  4. Создайте базу данных на примере MySQL, настройте права, тип базы и остальные параметры:

    # Зайдите в базу данных, используя пароль пользователя root
    mysql -uroot -p
    # Создайте базу данных clouds
    CREATE DATABASE clouds;
    # Дайте пользователю права на чтение, редактирование, выполнение любых действий над всеми таблицами базы данных clouds
    GRANT ALL PRIVILEGES ON clouds.* TO 'aos'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON clouds.* TO 'aos'@'%' IDENTIFIED BY 'password';
    # Осуществите выход из базы данных
    
  5. Отредактируйте секцию [database] конфигурационного файла etc/aos/clouds.conf, например:

    [database]
    url = mysql+pymysql://aos:password@tst.stand.loc:3306/clouds?charset=utf8
    
  6. Выполните синхронизацию базы данных:

    openstack aos db migrate -n clouds
    
  7. Создайте пользователя в OpenStack для API сервисов:

    openstack user create --domain default --project service --project-domain default --password password --or-show aos
    
  8. Назначьте пользователю роль service:

    openstack role add --user aos --user-domain default --project service --project-domain default service
    
  9. Включите и запустите службы systemd:

    systemctl daemon-reload
    systemctl enable aos-clouds-api.service aos-clouds-worker.service
    systemctl start aos-clouds-api.service aos-clouds-worker.service
    
  10. Создайте сервис Clouds API:

    openstack service create --name clouds --description "Clouds Service" clouds
    
  11. Создайте точки входа:

    openstack endpoint create --region RegionOne clouds internal http://controller:9366
    openstack endpoint create --region RegionOne clouds admin http://controller:9366
    openstack endpoint create --region RegionOne clouds public http://controller:9366
    

Подключение драйверов

Подключение драйвера Nova Compute

Функционал драйвера

Функционал драйвера включает в себя создание и удаление виртуальных машин, включение и выключение виртуальных машин в облаке.

Порядок подключения драйвера Nova Compute

  1. Установите пакет clouds-drivers на вычислительном и управляющем узлах:

    pip3 install clouds-drivers
    
  2. Установите драйвер в конфигурационном файле Nova - /etc/nova/nova.conf:

    • AWS:

      [DEFAULT]
      compute_driver = clouds_drivers.nova.virt.ec2.EC2Driver
      
    • Yandex:

      [DEFAULT]
      compute_driver = clouds_drivers.nova.virt.yandex.driver.YandexDriver
      
  3. Перезапустите сервис nova-compute:

    # Debian:
    systemctl restart nova-compute.service
    
  4. Установите фильтр планировщика в конфигурационном файле Nova на управляющем узле /etc/nova/nova.conf (должен быть установлен пакет clouds-drivers):

    [filter_scheduler]
    available_filters = nova.scheduler.filters.all_filters
    available_filters = clouds_drivers.nova.scheduler.filter.CloudProjectFilter
    enabled_filters = AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,CloudProjectFilter
    
  5. Перезапустите сервис nova-scheduler на управляющем узле:

    # Debian:
    systemctl restart nova-scheduler.service
    

Подключение драйвера Cinder Volume

Функционал драйвера

Функционал драйвера включает в себя создание и удаление дисков в облаке, подключение дисков к виртуальным машинам, отключение от виртуальных машин, созданных в облаке.

Порядок подключения драйвера Cinder Volume

  1. Установите пакет clouds-drivers на узле со службой cinder-volume:

    pip3 install clouds-drivers
    
  2. Установите и настройте драйвер в конфигурационном файле Cinder /etc/cinder/cinder.conf:

    • AWS:

      [DEFAULT]
      enabled_backends = ebs
      
      [ebs]
      volume_driver = clouds_drivers.cinder.volume.drivers.aws.ebs.EBSDriver
      volume_backend_name = ebs
      
    • Yandex:

      [DEFAULT]
      enabled_backends = yandex
      
      [yandex]
      volume_driver = clouds_drivers.cinder.volume.drivers.yandex.VolumeDriver
      volume_backend_name = yandex
      
  3. Перезапустите сервис cinder-volume:

    # Debian:
    systemctl restart cinder-volume.service
    
  4. Установите и настройте фильтр планировщика в конфигурационном файле Cinder /etc/cinder/cinder.conf:

    [DEFAULT]
    scheduler_default_filters = AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter,CloudBackendsFilter
    
  5. Перезапустите сервис cinder-scheduler:

    # Debian:
    systemctl restart cinder-scheduler.service
    

Подключение драйвера Glance Store

Функционал драйвера

Функционал драйвера включает в себя регистрацию образов облака в OpenStack, запуск из загруженных образов виртуальных машин, а также загрузку собственных образов в облако.

Порядок подключения драйвера Glance Store

  1. Установите пакет clouds-drivers на управляющем узле:

    pip3 install clouds-drivers
    
  2. Установите и настройте драйвер в конфигурационном файле Glance API - /etc/glance/glance-api.conf:

    • AWS:

      [DEFAULT]
      enabled_backends = file_store:file, http_store:http, aws_store:aws
      show_multiple_locations = true
      
      [aws_store]
      store_description = "AWS images store"
      bucket = "s3_bucket_name_for_image_import"
      
      [glance_store]
      default_backend = file_store
      
    • Yandex:

      [DEFAULT]
      enabled_backends = file_store:file, http_store:http, yandex_store:yandex
      show_multiple_locations = true
      
      [glance_store]
      default_backend = file_store
      
  3. Необходимо настроить доступ к объектному хранилищу в конфигурационном файле Glance API - /etc/glance/glance-api.conf:

    • AWS:

      [aws_store]
      store_description = "AWS images store"
      bucket = "s3_bucket_name_for_image_import"
      
    • Yandex:

      [yandex_store]
      store_description = "Yandex images store"
      bucket = "s3_bucket_name_for_image_import"
      region_name = ru-central1
      access_key_id = gUC7Dgk2ckZJTJ-2G7fm
      secret_access_key = m0BLkc8smdvqrQvuZzjxSEQoxLYkxxUxjAawcBfA
      

    где access_key_id и secret_access_key - идентификатор и ключ статического ключа доступа к Object Storage, bucket - имя бакета для загрузки образа.

  4. Перезапустите сервис glance-api:

    # Debian:
    systemctl restart glance-api.service
    

Подключение драйвера Neutron

Функционал драйвера (сети)

Функционал драйвера включает в себя создание и удаление сетей проекта. Сеть должна иметь CIDR не больше /16.

Примечание

При создании сети в OpenStack в AWS создастся VPC с CIDR /16, и в нем будет создана сеть, указанная в OpenStack с нужным CIDR.

Примечание

При создании подсети следуют выбирать пул адресов из x.x.x.4 - x.x.x.254. Это связано с тем, что AWS резервирует IP-адреса с .1 до .3. Подробнее здесь.

Примечание

Создание провайдерских сетей не поддерживается.

Примечание

Протокол IPv6 не поддерживается AWS VPC.

Функционал драйвера (роутеры и плавающие IP)

Функционал драйвера включает в себя создание и удаление роутеров и плавающих IP.

Создание роутера в OpenStack создает Internet Gateway (IG) в AWS без привязки его к какому-либо VPC. Добавление интерфейса к роутеру ассоциирует VPC с этим Internet Gateway и также добавляет ему маршрут по умолчанию 0.0.0.0/0.

Примечание

Добавление интерфейса из другой подсети не будет работать, так как IG может быть ассоциирован только с одним VPC.

Для корректной работы Floating Ip необходимо в OpenStack вручную создать внешнюю сеть, включающую в себя весь пул внешних адресов (elastic ip), выделенных в AWS или Yandex.Cloud.

Важно

Если в облаке (AWS или Yandex.Cloud) уже имеются выделенные elastic ip, то созданная в OpenStack внешняя сеть не должна раздавать эти IP-адреса.

Порядок подключения драйвера Neutron

  1. Установите пакет clouds-drivers на управляющем узле:

    pip3 install clouds-drivers
    
  2. Установите и настройте драйвер в конфигурационном файле Neutron - /etc/neutron/neutron.conf:

    • AWS. Замените сервисный плагин router на aws_router. Укажите путь api_extensions_path до <драйвера clouds_drivers>\neutron\extensions:

      Пример:
      
      [DEFAULT]
      service_plugins = aws_router,qos
      core_plugin = ml2
      api_extensions_path = /usr/local/lib/python3.7/dist-packages/clouds_drivers/neutron/extensions/
      
    • Yandex. Замените сервисный плагин router на yandex_router:

      Пример:
      
      [DEFAULT]
      service_plugins = yandex_router,qos
      core_plugin = ml2
      
  3. Установите и настройте драйвер в конфигурационном файле /etc/neutron/plugins/ml2/ml2_conf.ini:

    • AWS. Добавьте расширение subnet_az в список значений параметра extension_drivers. Добавьте aws в начало списка mechanism_drivers. Настройте остальные параметры:

      Пример:
      
      [ml2]
      extension_drivers = port_security,qos,subnet_az
      type_drivers = local,flat
      tenant_network_types = local
      mechanism_drivers = aws,openvswitch,l2population
      
      [ml2_type_flat]
      flat_networks = *
      
    • Yandex. Добавьте yandex в начало списка mechanism_drivers. Настройте остальные параметры:

      Пример:
      
      [ml2]
      extension_drivers = port_security,qos
      type_drivers = local,flat
      tenant_network_types = local
      mechanism_drivers = yandex,openvswitch,l2population
      
      [ml2_type_flat]
      flat_networks = *
      
  4. Перезапустите сервисы Neutron:

    # Debian:
    systemctl restart neutron-*.service
    

Примечание

После настройки драйвера необходимо в проекте для работы с AWS создать новую сеть и подсеть для нее.

Таблица соответствий действий в OpenStack и AWS

Neutron AWS
1 Создание сети None
2 Создание сети с < /16 Создание VPC with /16 и подсети с заданным CIDR
3 Создание роутера Создание Internet Gateway
4 Добавление шлюза к роутеру None
5 Добавление интерфейса к роутеру Добавление VPC к Internet Gateway
6 Добавление плавающего IP к виртуальной машине Добавление Elastic IP к виртуальной машине
7 Удаление плавающего IP Удаление elastic IP
8 Удаление подсети Удаление подсети в VPC, удаление VPC если последняя подсеть
9 Удаление сети None
10 Удаление интерфейса роутера Удаление VPC с Internet Gateway
11 Удаление роутера Удаление Internet Gateway

Настройка интеграции проекта с облаком AWS

  1. Создайте проект для интеграции с облаком AWS:

    openstack project create aws
    
  2. Назначьте необходимые роли:

    openstack role add --project aws --user admin admin
    openstack role add --project aws --user admin creator
    openstack role add --project aws --user cinder observer
    openstack role add --project aws --user glance observer
    openstack role add --project aws --user nova observer
    openstack role add --project aws --user neutron observer
    
  3. Настройте проект для интеграции с облаком:

    openstack aos clouds add aws --project aws --access-key "AKIAIOSFODNN7EXAMPLE" --secret-key "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" --region us-east-2 --az us-east-2a
    
  4. Зарегистрируйте образы облака в Openstack:

    openstack aos clouds images register --project aws --cloud-image-id ami-0f7919c33c90f5b58
    
  5. Зарегистрируйте типы инстансов облака в Openstack:

    openstack aos clouds flavors register --project aws
    

Настройка интеграции проекта с Яндекс.Облако

  1. Создайте проект для интеграции с Яндекс.Облако:

    openstack project create yandex
    
  2. Назначьте необходимые роли:

    openstack role add --project yandex --user admin admin
    openstack role add --project yandex --user admin creator
    openstack role add --project yandex --user cinder observer
    openstack role add --project yandex --user glance observer
    openstack role add --project yandex --user nova observer
    openstack role add --project yandex --user neutron observer
    
  3. Настройте проект для интеграции с облаком:

    openstack aos clouds add yandex --project yandex --service-account-id aaaaaaaaaaaaaaaaaaaa --private-key private.key --key-id bbbbbbbbbbbbbbbbbbbb --folder-id cccccccccccccccccccc --az ru-central1-a
    

Файл конфигурации

Примечание

Файл конфигурации позволяет переопределять секции и параметры общего файла aos.conf для конкретного модуля.

Примечание

По умолчанию в файле clouds.conf.example строки с уровнем логирования нет, она указывается при необходимости. Уровень логирования по умолчанию выставлен в общем конфигурационном файле. Подробнее ознакомиться с файлами конфигурации можно в соответствующем разделе.

Конфигурационный файл представлен в ini формате и состоит из следующих секций и параметров:

Секция Параметр Описание Значение по умолчанию
api logfile Путь до лог файла службы aos-clouds-api.  
database url URL для доступа к базе данных. mysql+pymysql://aos:p assword@localhost:330 6/clouds?charset=utf8

Пример конфигурационного файла

[database]
url = mysql+pymysql://aos:password@localhost:3306/clouds?charset=utf8

Важно

При изменении параметров файла конфигурации для вступления их в силу необходимо произвести процедуру, описанную в разделе «Обновление файла конфигурации».

План восстановления

В случае неудачной установки или обновления модуля Clouds выполните возврат к исходному состоянию:

  1. Сравните версии миграций в файле /tmp/rollback/clouds/migrations.txt с текущими. При наличии отличий произведите миграцию на предыдущую версию. Пример миграции:

    openstack aos db list -n clouds
    openstack aos db migrate -n clouds --migration 2
    
  2. Произведите возврат к предыдущему состоянию пакетов:

    cd /tmp/rollback/clouds
    diff --changed-group-format='%>' --unchanged-group-format='' pip_before.txt pip_after.txt > pip_uninstall.txt
    diff --changed-group-format='%<' --unchanged-group-format='' pip_before.txt pip_after.txt > pip_install.txt
    pip3 uninstall -r pip_uninstall.txt
    pip3 install -r pip_install.txt