Подготовка baremetal-узлов для установки KeyStack

Для установки продукта KeyStack на вашу серверную инфраструктуру необходимо выполнить подготовку серверов.

Примечание

В данной инструкции в качестве базового доменного имени облачной платформы используется cloud.itkey.com и имена сервисов по умолчанию. При выполнении инструкции указывайте ваши действительные имена.

Генерация паролей и сертификатов для Bifrost

Для генерации секретов (паролей и сертификатов), которые будут использованы сервисом Bifrost для провиженинга серверов, запустите пайплайн:

  1. Откройте веб-интерфейс развернутого GitLab (ks-lcm.cloud.itkey.com).

  2. Авторизуйтесь с помощью реквизитов для GitLab, полученных на этапе установки дистрибутива KeyStack.

  3. Откройте проект project_k / deployments / gen-pwd.

  4. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  5. В открывшемся окне добавьте переменную OPENSTACK_ENV со значением bifrost и запустите пайплайн.

  6. Запустите задачу create-config в созданном пайплайне.

  7. Дождитесь завершения выполнения задачи.

Установка Bifrost

Установка Bifrost также выполняется через запуск пайплайна GitLab:

  1. Перейдите в репозиторий project_k / deployments / bifrost.

  2. Откройте файл inventory и замените в нем значение LCM_IP на IP-адрес LCM-узла в PXE-сети.

  3. Откройте файл globals.d/REGION.yml и замените значение параметра network_interface на имя интерфейса LCM-узла в PXE-сети (например, mgmt).

  4. Откройте файл config/bifrost/bifrost.yml и внесите в него изменения:

    1. В параметрах ipa_kernel_url и ipa_ramdisk_url замените LCM_IP на IP-адрес LCM-узла в PXE-сети:

      ipa_kernel_url: "http://LCM_IP:8080/ubuntu-22.04-ipa-debug-c.kernel"
      ipa_ramdisk_url: "http://LCM_IP:8080/ubuntu-22.04-ipa-debug-c.initramfs"
      
    2. Сконфигурируйте NTP, для этого раскомментируйте следующую строку и замените в ней 10.224.128.1 на IP-адрес своего NTP-сервера:

      #inspector_extra_kernel_options: "ipa-inspection-collectors=default,logs ipa-ntp-server=10.224.128.1"
      
    3. Задайте значения параметров DHCP для PXE-сети:

      dhcp_pool_start: 10.37.50.68
      dhcp_pool_end: 10.37.50.78
      dhcp_pool_mask: 255.255.255.224
      dnsmasq_router: 10.37.50.94 # адрес шлюза PXE-сети
      
  5. Создайте и запустите новый пайплайн: Build > Pipelines > Run Pipeline.

  6. Дождитесь завершения выполнения шага setup.

  7. Запустите задачу deploy-bifrost на шаге deploy.

  8. Дождитесь завершения выполнения пайплайна.

  9. Убедитесь, что сервис dnsmasq запустился автоматически.

Настройка правил firewall для Bifrost

Если на узле включен firewall, то добавьте в его конфигурацию исключения для Bifrost:

  1. Зайдите на узел LCM по ssh.

  2. Откройте TCP-порты 8080, 5050, 6385 и UDP-порты 67, 69:

Выполните команды настройки firewalld:

# firewall-cmd --add-port=8080/tcp --permanent
# firewall-cmd --add-port=5050/tcp --permanent
# firewall-cmd --add-port=6385/tcp --permanent
# firewall-cmd --add-service=dhcp --permanent
# firewall-cmd --add-service=tftp --permanent
# firewall-cmd --reload

Настройка пользователя и пароля IPMI-интерфейсов

Для первоначального провиженинга baremetal-узлов необходимо создать учетную запись пользователя на IPMI-интерфейсах. На всех узлах должен быть задан одинаковый пользователь и пароль. Сконфигурируйте IPMI-интерфейсы всех узлов:

  1. Добавьте учетную запись (одинаковый пользователь и пароль на всех узлах).

  2. Установите ему права доступа на:

    • однократную загрузку по PXE,

    • включение и выключение сервера.

При провиженинге узлов Bifrost будет брать имя пользователя и пароль из сервиса Vault. Добавьте их в Vault:

  1. Перейдите в веб-интерфейс Vault (vault.cloud.itkey.com).

  2. Авторизуйтесь с помощью реквизитов для Vault, полученных на этапе установки дистрибутива KeyStack.

  3. Перейдите в директорию с настройками Bifrost: secret_v2 / deployments / <LCM FQDN> / bifrost / rmi.

  4. Нажмите Create new для создания новой версии секрета.

  5. Задайте параметры user и password интерфейса IPMI-узлов и сохраните новую версию.

Настройка перечня оборудования в NetBox

  1. Откройте файл с данными об оборудовании netbox2csv.xlsx, заполненный на этапе подготовки серверной инфраструктуры.

  2. Откройте веб-интерфейс развернутого NetBox (netbox.cloud.itkey.com).

  3. Авторизуйтесь с помощью реквизитов для NetBox, полученных на этапе установки дистрибутива KeyStack.

  4. Откройте вкладку SERVERS в Excel. По одному добавьте в NetBox все уникальные значения тегов из столбца Tags, выполнив следующие шаги:

    1. В разделе NetBox Customization > Tags нажмите Add.

    2. Введите название тега, его slug (используется в URL) и цвет.

  5. Импортируйте данные о тенантах из Excel в NetBox:

    1. Скопируйте данные с вкладки Excel netbox_tenant.csv.

    2. В разделе NetBox Organization > Tenants нажмите Import.

    3. Вставьте скопированные данные в поле Data.

  6. Аналогичным образом импортируйте прочие данные из Excel в NetBox:

    • с вкладки netbox_site.csv — в раздел Organization > Sites;

    • с вкладки netbox_device.csv — в раздел Devices > Devices;

    • с вкладки netbox_interface.csv — в раздел Devices > Interfaces;

    • с вкладки netbox_ip.csv — в раздел IPAM > IP Addresses.

  7. Создайте виртуальные локальные сети:

    1. В разделе NetBox IPAM > VLANs нажмите Add.

    2. Укажите соответствующие значения VLAN ID, Name, Tenant и Site.

    3. В разделе Prefixes нажмите Add Prefix и укажите соответствующее сети VLAN значение IP-префикса.

  8. Проверьте соответствие префиксов и адресов шлюзов:

    1. Перейдите в раздел IPAM > Prefixes.

    2. Убедитесь, что значения Prefix совпадает с указанными default_gateway. Если это не так, измените их и сохраните изменения.

  9. Настройте конфигурационные контексты для каждой роли узла (control, compute и так далее). Для этого выполните следующие действия:

    1. Подготовьте описание конфигурационных контекстов для каждой роли узла в формате JSON:

      {
          "bonds": [
              {
                  "Interface": "bond0",
                  "MTU": 9000,
                  "Slaves": [
                  "ens1f0np0",
                  "ens2f0np0"
                  ],
                  "Tagged_vlan": [
                  "39",
                  "484"
                  ]
              },
              {
                  "Interface": "bond1",
                  "MTU": 9000,
                  "Slaves": [
                  "ens2f1np1",
                  "ens1f1np1"
                  ],
                  "Tagged_vlan": []
              },
              {
                  "Interface": "bond2",
                  "MTU": 9000,
                  "Slaves": [
                  "eno1",
                  "eno2",
                  "eno3",
                  "eno4"
                  ],
                  "Tagged_vlan": []
              }
          ],
          "default_gateway": "10.30.55.60/20",
          "dns_name": "lab.cloud.cfg_fake.ru",
          "dns_server": [
              "11.55.70.153",
              "11.25.44.11"
          ],
          "route_vxlan": [
              {
                  "gw": "10.10.10.150/10",
                  "route": "10.10.10.0/24"
              },
              {
                  "gw": "10.10.10.150/10",
                  "route": "10.10.20.0/24"
              }
          ],
          "vlans": [
              {
                  "Interface": "mgmt",
                  "MTU": "9000",
                  "Parent": "bond0",
                  "id": "39"
              },
              {
                  "Interface": "vxlan",
                  "MTU": "9000",
                  "Parent": "bond0",
                  "id": "484"
              }
          ]
      }
      

      Здесь:

      • default_gateway — адрес и маска шлюза для подсети по умолчанию;

      • dns_name — имя DNS-сервера;

      • dns_server — IP-адрес DNS-сервера;

      • Interface — название интерфейса;

      • MTU — значение MTU;

      • Parent — название родительского интерфейса, если предусмотрена иерархия;

      • "id": "40" — MGMT VLAN на гипервизорах;

      • "id": "39" — MGMT VLAN на Controller-узлах;

      • "id": "484" — VLAN сети управления IPMI.

    2. Перейдите в раздел NetBox Provisioning > Config Contexts.

    3. Нажмите Add.

    4. Заполните поля Name и Weight.

    5. Вставьте конфигурацию в поле Data.

    6. В поле Tags укажите соответствующие конфигурационному контексту теги.

    7. Повторите настройку конфигурационного контекста для узлов каждой роли.

  10. Завершите настройку NetBox:

    1. В NetBox в разделе API tokens, скопируйте токен.

    2. На LCM-узле выполните скрипт из XLSX-файла в CLI, вкладка update_ctx.sh, предварительно заменив значения:

      • NETBOX_TOKEN — токен NetBox из раздела API tokens;

      • NETBOX_URI — адрес NetBox в формате https://netbox.cloud.itkey.com/.

  11. Активируйте все BMC-узлы инфраструктуры:

    1. В веб-интерфейсе NetBox перейдите в раздел Devices > Devices.

    2. Отметьте все необходимые узлы.

    3. Нажмите Edit Selected.

    4. В открывшейся форме для параметра state в разделе Custom Fields установите значение ready.

    5. Сохраните изменения.

Запуск пайплайнов развертывания

Примечание

Для корректной работы протокола PXE на портах коммутаторов сетевой инфраструктуры должна быть включена функция LACP Fallback. Включите LACP Fallback на всех используемых портах коммутаторов.

Запустите пайплайн для развертывания системы. Данную операцию необходимо произвести для узлов каждого типа.

  1. Откройте веб-интерфейс GitLab.

  2. Откройте проект project_k / services / baremetal.

  3. Создайте новый пайплайн: Build > Pipelines > Run Pipeline.

  4. В открывшемся окне добавьте переменные:

    • TARGET_ROLE — тип узла, определенный в NetBox:

      • controller — для Controller-узлов,

      • network — для Network-узлов,

      • compute — для Compute-узлов.

    • TARGET_CLOUD — имя тега региона в NetBox;

    • TARGET_NODE — имя конкретного узла для развертывания, можно перечислить несколько имён узлов через пробел;

    • IRONIC_ENV — окружение для развертывания узлов (по умолчанию BIFROST);

    • IRONIC_SSH_KEY — собственные SSH-ключи (формат — один ключ на строку);

    • IRONIC_IMAGE_URL — путь до образа системы, который будет установлен на узел, в формате http://<IP адрес LCM узла>:8080/sberlinux-9.4-x86_64.qcow2. Требования к образу:

      • только поддерживаемый тип операционной системы;

      • формат — QCOW2;

      • hash-файл образа в формате <имя образа>.md5 располагается в одной папке с самим образом.

    • IRONIC_IMAGE_ROOTFS_UUID — UUID корневого раздела в образе, если используется software RAID;

    • IPA_KERNEL_NAME — путь до образа агента Ironic Python Agent (IPA) kernel image;

    • IPA_RAMDISK_NAME — путь до образа агента Ironic Python Agent (IPA) initramfs image;

    • KOLLA_ANSIBLE_IMG_TAG — тег контейнера с kolla-ansible, используемый для пайплайна;

    • EXPERIMENTAL_NETBOX_INTROSPECTION: true — использовать автозаполнение интерфейсов устройств в NetBox;

    • KEYSTACK_RELEASE — тег релиза KeyStack;

    • CI_DEBUG_TRACE:

      • true — выводить отладочную информацию в пайплайне.

  5. Запустите пайплайн, нажав кнопку Run pipeline.

  6. Дождитесь завершения выполнения операции.

  7. Повторите шаги запуска пайплайна для остальных типов узлов.

  8. Перейдите в раздел Devices > Devices в NetBox и убедитесь, что все нужные узлы поменяли значение state на production.

После выполнения описанной выше подготовки серверной инфраструктуры можно переходить к развёртыванию регионов.