Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Интеграция с zVirt

Данный раздел содержит информацию по интеграции Nova Container Platform с zVirt. Раздел содержит следующие основные шаги:

1. Подготовка шаблонов виртуальных машин в среде zVirt

В данном разделе документации описывается подготовка виртуальной машины и создание из нее шаблона, который будет использоваться для развертывания всех виртуальных узлов кластера Nova Container Platform.

1.1. Создание виртуальной машины

Процесс создания виртуальной машины заключается в задании ее настроек (некоторые из них можно изменить позже) и последующей установке операционной системы.

  1. Перейдите в веб-интерфейс менеджера управления zVirt.

  2. Нажмите Ресурсы  Виртуальные машины.

  3. Нажмите Создать. Откроется окно Новая виртуальная машина.

  4. Выберите Операционную систему из выпадающего списка.

  5. Укажите Имя виртуальной машины.

  6. Добавьте диск к виртуальной машине в разделе Виртуальные диски.

  7. Нажмите Создать и укажите Размер (GiB) и Псевдоним нового виртуального диска. В остальных полях можно принять настройки по умолчанию или изменить их при необходимости.

  8. Подключите виртуальную машину к сети. Добавьте сетевой интерфейс, выбрав vNIC-профиль в выпадающем списке nic1 внизу на вкладке Общее.

  9. Задайте параметр Оперативная память (разделяемая) виртуальной машины на вкладке Система.

  10. На вкладке Параметры загрузки выберите Первое устройство, которое виртуальная машина будет использовать для начальной загрузки.

  11. На вкладке Запуск инициализации включите опцию Cloud-Init.

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

  13. Нажмите OK.

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

1.2. Подготовка виртуальной машины

  1. Выполните шаги инструкции в зависимости от вашей ОС.

    Astra Linux Special Edition 1.7
    1. Добавьте репозитории для вашей версии ОС.

      # Подставьте в переменные значения соответствующие вашей версии ОС
      # В данном примере используется версия 1.7.6.uu2
      
      VERSION_BASE="1.7.6"
      UPDATE="2"
      
      sudo echo "deb https://dl.astralinux.ru/astra/frozen/1.7_x86-64/${VERSION_BASE}/uu/${UPDATE}/repository-main/ 1.7_x86-64 main contrib non-free" > /etc/apt/sources.list
      sudo echo "deb https://dl.astralinux.ru/astra/frozen/1.7_x86-64/${VERSION_BASE}/uu/${UPDATE}/repository-update/ 1.7_x86-64 main contrib non-free" >> /etc/apt/sources.list
    2. Обновите все пакеты ОС.

      apt update
    3. Установите необходимые пакеты.

      apt install -y cloud-init cloud-guest-utils curl network-manager
    4. Установите пакеты для системы виртуализации.

      apt install -y qemu-guest-agent
      systemctl enable qemu-guest-agent
    Astra Linux Special Edition 1.8
    1. Добавьте репозитории для вашей версии ОС.

      # Подставьте в переменные значения соответствующие вашей версии ОС
      # В данном примере используется версия 1.8.1.uu1
      
      VERSION_BASE="1.8.1"
      UPDATE="1"
      
      sudo echo "deb https://dl.astralinux.ru/astra/frozen/1.8_x86-64/${VERSION_BASE}/uu/${UPDATE}/repository-main/ 1.8_x86-64 main non-free non-free-firmware contrib" > /etc/apt/sources.list
      sudo echo "deb https://dl.astralinux.ru/astra/frozen/1.8_x86-64/${VERSION_BASE}/uu/${UPDATE}/repository-extended/ 1.8_x86-64 main contrib non-free non-free-firmware" >> /etc/apt/sources.list
    2. Обновите все пакеты ОС.

      apt update
    3. Установите необходимые пакеты.

      apt install -y cloud-init cloud-guest-utils curl network-manager
    4. Установите пакеты для системы виртуализации.

      apt install -y qemu-guest-agent
      systemctl enable qemu-guest-agent
    РЕД ОС
    1. Добавьте репозитории для вашей версии ОС.

      sudo nano /etc/yum.repos.d/redos.repo
      [base]
      	name=RedOS - Base
      	baseurl=https://repo1.red-soft.ru/redos/7.3c/$basearch/os,https://mirror.yandex.ru/redos/7.3c/$basearch/os,http://repo.red-soft.ru/redos/7.3c/$basearch/os
      	gpgcheck=1
      	gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-RED-SOFT
      	enabled=1
      
      [updates]
      	name=RedOS - Updates
      	baseurl=https://repo1.red-soft.ru/redos/7.3c/$basearch/updates,https://mirror.yandex.ru/redos/7.3c/$basearch/updates,http://repo.red-soft.ru/redos/7.3c/$basearch/updates
      	gpgcheck=1
      	gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-RED-SOFT
      	enabled=1
    2. Обновите все пакеты ОС.

      dnf update -y
    3. Установите необходимые пакеты.

      dnf install -y cloud-init cloud-utils-growpart curl
    4. Установите пакеты для системы виртуализации.

      dnf install -y qemu-guest-agent
      systemctl enable qemu-guest-agent
    AlmaLinux
    1. Обновите все пакеты ОС.

      dnf update -y
    2. Установите необходимые пакеты.

      dnf install -y cloud-init cloud-utils-growpart curl
    3. Установите пакеты для системы виртуализации.

      dnf install -y qemu-guest-agent
      systemctl enable qemu-guest-agent
    MosOS 15.5
    1. Добавьте репозиторий

      nano /etc/zypp/repos.d/repo-oss.repo
      [repo-oss]
      	name=Main MosOS Arbat repository
      	enabled=0
      	autorefresh=1
      	baseurl=https://mos-repo.mos.ru/mosos/arbat/15.5/repo/oss/
      	path=/
      	type=rpm-md
      	keeppackages=0
      nano /etc/zypp/repos.d/repo-update.repo
      [repo-update]
      	name=Update repository with updates for MosOS Arbat
      	enabled=0
      	autorefresh=1
      	baseurl=https://mos-repo.mos.ru/mosos/arbat/15.5/repo/update/
      	type=NONE
      	keeppackages=0
    2. Установите необходимые пакеты.

      zypper install -y cloud-init perl curl
    3. Установите пакеты для системы виртуализации.

      zypper install -y qemu-guest-agent
      systemctl enable qemu-guest-agent
    Ubuntu 24.04
    1. Обновите все пакеты ОС.

      apt update -y
    2. Установите необходимые пакеты.

      apt install -y cloud-init cloud-guest-utils curl network-manager
    3. Установите пакеты для системы виртуализации.

      apt install -y qemu-guest-agent
      systemctl enable qemu-guest-agent
  2. Установите конфигурацию службы cloud-init. Файл /etc/cloud/cloud.cfg должен иметь следующее содержимое:

    #cloud-config
    locale: en_US.UTF-8
    users:
    - default
    
    datasouces_list: ["None"]
    disable_root: true
    ssh_pwauth: false
    preserve_hostname: true
    manage_etc_hosts: true
    ssh_deletekeys: true
    ssh_genkeytypes: ['rsa', 'ecdsa', 'ed25519']
    syslog_fix_perms: ~
    resize_rootfs: true
    
    growpart:
      mode: auto
      devices: ['/']
      ignore_growroot_disabled: false
    
    package_update: false
    package_upgrade: false
    
    cloud_init_modules:
    - migrator
    - seed_random
    - bootcmd
    - write-files
    - growpart
    - resizefs
    - disk_setup
    - mounts
    - update_etc_hosts
    - ca-certs
    - rsyslog
    - users-groups
    - ssh
    cloud_config_modules:
    - ssh-import-id
    - locale
    - set-passwords
    - yum-add-repo
    - ntp
    - timezone
    - disable-ec2-metadata
    - runcmd
    cloud_final_modules:
    - package-update-upgrade-install
    - write-files-deferred
    - reset_rmc
    - refresh_rmc_and_interface
    - rightscale_userdata
    - scripts-vendor
    - scripts-per-once
    - scripts-per-boot
    - scripts-per-instance
    - scripts-user
    - ssh-authkey-fingerprints
    - keys-to-console
    - install-hotplug
    - phone-home
    - final-message
    - power-state-change
    
    system_info:
      default_user:
        name: nova-user
        lock_passwd: false
        gecos: Nova user
        groups: [wheel, adm, systemd-journal, sudo]
        sudo: ["ALL=(ALL) NOPASSWD:ALL"]
        shell: /bin/bash
      network:
        renderers: ['netplan', 'network-manager', 'eni', 'sysconfig']
        activators: ['netplan', 'network-manager', 'eni', 'networkd']
  3. Добавьте в автозагрузку службы.

    systemctl enable cloud-init
    systemctl enable systemd-timesyncd
  4. Выключите межсетевой экран.

    systemctl disable firewalld
    systemctl disable ufw

    Команда может вывести сообщение об отсутствии данного компонента. В этом случае дополнительных действий не требуется.

  5. Выключите systemd-resolved.

    sudo systemctl disable --now systemd-resolved
    rm /etc/resolv.conf
    touch /etc/resolv.conf
  6. Отключите selinux. Откройте файл /etc/default/grub с помощью текстового редактора и добавьте параметр selinux=0 в строку GRUB_CMDLINE_LINUX.

    GRUB_CMDLINE_LINUX="selinux=0"

    Создайте новый файл конфигурации grub:

    Для систем семейства Debian (включая Ubuntu и Astra Linux)
    grub-mkconfig -o /boot/grub/grub.cfg
    Для систем семейства RHEL и совместимых
    grub2-mkconfig -o /boot/grub2/grub.cfg

1.3. Дополнительные настройки

Для использование платформы Nova версии 7.3.0, 6.4.0 и выше в IPI-режиме необходимо произвести дополнительные настройки.

  1. Настройте именование интерфейсов для сценария инициализации виртуальных машин. Откройте файл /etc/default/grub с помощью текстового редактора и добавьте параметр net.ifnames=0 в строку GRUB_CMDLINE_LINUX.

    GRUB_CMDLINE_LINUX="net.ifnames=0 selinux=0"

    Создайте новый файл конфигурации grub:

    Для систем семейства Debian (включая Ubuntu и Astra Linux)
    grub-mkconfig -o /boot/grub/grub.cfg
    Для систем семейства RHEL и совместимых
    grub2-mkconfig -o /boot/grub2/grub.cfg
  2. Только для AstraLinux. Для обеспечения сетевого взаимодействия через API необходимо выполнить следующие условия (Nova 7.3.0 и выше):

    • Управление сетью должно осуществляться исключительно через NetworkManager.

    • Все сетевые интерфейсы должны находиться под полным контролем NetworkManager (состояние managed).

    • Конфигурация не должна дублироваться или быть задана в устаревших файлах (например, /etc/network/interfaces), которые могут перехватывать управление.

  3. Удалите старые конфигурации (если они есть), чтобы избежать конфликтов:

    sudo rm -f /etc/network/interfaces.d/* /etc/network/interfaces
  4. Настройте NetworkManager на управление всеми интерфейсами. Убедитесь, что файл /etc/NetworkManager/conf.d/managed.conf присутствует и и имеет следующее содержание:

    [ifupdown]
    managed=true
  5. Перезапустите службу для применения изменений:

    sudo systemctl restart NetworkManager
  6. Проверьте конфигурацию.

    nmcli device status
    Пример вывода:
    DEVICE  TYPE      STATE                   CONNECTION
    eth0    ethernet  connected               cloud-init eth0
  7. Подготовьте пользовательскую учетную запись. Подробнее см. в статье Подготовка пользовательской учетной записи.

  8. Проведите очистку файлов созданных во время процесса настройки.

    sudo truncate -s 0 /etc/machine-id /var/log/lastlog /var/log/wtmp && \
    sudo rm -f /var/lib/dbus/machine-id && \
    sudo ln -s /etc/machine-id /var/lib/dbus/machine-id && \
    sudo rm -rf /var/lib/dhcp/* /var/lib/dhcp6/* /var/lib/dhclient/* /var/lib/NetworkManager/* && \
    sudo hostnamectl set-hostname ""
  9. Выключите виртуальную машину.

  10. Удалите сетевой интерфейс из виртуальной машины.

1.3.1. Создание шаблона

Создайте из виртуальной машины шаблон, который будет использоваться для создания виртуальных узлов кластера Nova Container Platform.

  1. Перейдите в веб-интерфейс менеджера управления zVirt.

  2. Нажмите Ресурсы  Виртуальные машины и выберите виртуальную машину.

  3. Убедитесь, что виртуальная машина выключена (находится в состоянии Выключена).

  4. Нажмите action, затем – Создать шаблон.

  5. Введите Имя, Описание и Комментарий для шаблона.

  6. В выпадающем списке Кластер выберите кластер, с которым нужно ассоциировать шаблон. По умолчанию он будет тем же, что и для исходной виртуальной машины.

  7. При желании выберите профиль ЦП для шаблона в выпадающем списке Профиль ЦП.

  8. В разделе Выделение дискового пространства введите имя для диска в поле Имя. В выпадающем списке Формат выберите формат диска, в выпадающем списке Цель – домен хранения, где будет размещаться диск, а в выпадающем списке Профиль диска – профиль диска. По умолчанию эти параметры будут теми же, что и для исходной виртуальной машины.

  9. Установите флажок Разрешить всем пользователям доступ к шаблону, чтобы разрешить совместное использование шаблона.

  10. Установите флажок Копировать разрешения ВМ, чтобы скопировать разрешения исходной виртуальной машины в шаблон.

  11. Нажмите OK.

  12. Нажмите Ресурсы  Шаблоны и выберите шаблон.

  13. Нажмите Изменить, затем – Показать расширенные настройки.

  14. В разделе Высокая доступность установите флажок Высокая доступность и в выпадающем списке Целевой домен хранения для аренды ВМ выберите домен хранения.

  15. Нажмите OK.

При создании шаблона укажите формат диска: RAW или QCOW2.

  • Диски QCOW2 – динамически выделяемые.

  • Диски RAW в файловом хранилище – динамически выделяемые.

  • Диски RAW в блочном хранилище – предварительно размечаемые.

2. Настройка пользователя в zVirt

2.1. Права доступа

При создании пользователя в zVirt рекомендуется предоставить ему права администратора.
Если это невозможно, требуется следующий минимальный набор доступов, который может обновляться с выходом новых версий Nova Container Platform:

  • DiskOperator

  • UserTemplateBasedVm

  • DiskProfileUser

  • UserProfileEditor

  • CpuProfileOperator

  • VnicProfileUser

2.2. Дополнительные настройки

Для корректной установки, обновления и функционирования Nova Container Platform необходимо снять ограничение на количество одновременных сессий.

Перейдите в веб-интерфейс менеджера управления zVirt и снимите ограничение на количество сессий на время установки кластера:

  • Нажмите Управление  Пользователи и выберите пользователя, который будет использоваться для подключения к zVirt в процессе установки кластера Nova Container Platform.

  • Выберите меню Управление ограничениями.

  • В меню Управление ограничениями установите для параметра Количество сессий значение равное 0.

3. Получение информации о кластере zVirt

Для дальнейшей установки и настройки Nova Container Platform вам необходимо получить следующую информацию о кластере zVirt:

В предоставленной инструкции в качестве примера используется доменное имя (FQDN) менеджера управления виртуализацией zVirt - zvirt.mycompany.local. Данное имя необходимо заменить на действительное доменное имя вашего менеджера управления.

3.1. Получение корневого сертификата zVirt

  1. Скачайте корневой сертификат zVirt с главной страницы веб-интерфейса менеджера управления zVirt c помощью браузера или следующей команды:

    curl -ko ca-zvirt.cer https://zvirt.mycompany.local/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA
  2. Закодируйте в base64 полученный сертификат:

    cat ca-zvirt.cer | base64 -w0

    Закодированный сертификат потребуется для дальнейшей установки платформы.

3.2. Получение идентификатора кластера

Для получения идентификатора кластера в среде виртуализации zVirt перейдите в веб-консоль zVirt и откройте раздел Ресурсы  Кластеры, затем выберите нужный кластер.

3.3. Получение идентификатора шаблона

Для получения идентификатор шаблона в среде виртуализации zVirt перейдите в веб-консоль zVirt и откройте раздел Ресурсы  Шаблоны, затем выберите нужный шаблон.

3.4. Получение имени домена хранения

Для получения имени домена хранения в среде виртуализации zVirt перейдите в веб-консоль zVirt и откройте раздел Хранилище  Домены.

3.5. Получение идентификатора профиля сети

Узнать идентификатор профиля сети в среде виртуализации zVirt можно в zVirt API.

  1. Получите токен:

    export USER= 'вставьте_ваше_значение' (1)
    export PASSWORD='password'
    export VLAN_NAME='VM_VLAN_SDN'
    export ZVIRT_URL='zvirt.mycompany.local'
    
    export TOKEN=$(curl --silent -k "https://$ZVIRT_URL/ovirt-engine/sso/oauth/token?grant_type=password&username=$USER&password=$PASSWORD&scope=ovirt-app-api" -H "Accept: application/json" | jq -r '.access_token')
    1 В случае, если используется Keycloak в zVirt - переменная будет иметь вид user@internalsso, в случае, если не используется - переменная будет иметь вид user@internal.
  2. Получите список сетей и информацию по ним:

    curl --silent -k "https://$ZVIRT_URL/ovirt-engine/api/vnicprofiles" -H "Accept: application/json" -H "Authorization: Bearer $TOKEN" | jq --arg VLAN_NAME "$VLAN_NAME" '.vnic_profile[] | select(.name==$VLAN_NAME)' | jq -r '.id'