Я Руслан Никитенко, инженер отдела сервиса компании Тринити. Наш отдел занимается диагностикой, тестированием и ремонтом серверов и СХД, техподдержкой Linux-систем в аппаратной части оборудования, взаимодействием с вендорами и участием в проектах по внедрению и освоению новых моделей оборудования и ПО. 

Недавно я вёл проект по внедрению платформы Cloudlink для одного национального исследовательского центра и хочу поделиться практическими знаниями и рекомендациями, которые помогут другим компаниям и ИТ-специалистам избежать типичных ошибок внедрения облачных технологий в своих проектах и ускорить этот процесс. Я расскажу о тестировании продукта на демо-стенде, после которого было осуществлено реальное внедрение у заказчика. 

Про платформу Cloudlink

Cloudlink — комплексное решение для создания частного облака, ориентированное на автоматизацию, аналитику и управление ресурсами. Эта платформа интегрируется с рядом ведущих технологий виртуализации, таких как VMware, zVirt, OpenStack и Hyper-V, что позволяет предоставить широкий спектр возможностей для on-premise инсталляций.

Ключевые особенности Cloudlink:

  1. Управление ресурсами. Платформа позволяет управлять виртуализацией различных систем, включая VMware vSphere, zVirt и OpenStack. Встроенный IPAM (управление IP-адресами) и возможность управления внешними хранилищами S3 обеспечивают полный контроль над инфраструктурой.

  2. Портал самообслуживания. Cloudlink предлагает удобный пользовательский и административный веб-порталы, что делает заказ ресурсов таким же простым, как в публичных облаках. Платформа включает конструктор PaaS-сервисов, позволяющий пользователям самостоятельно создавать услуги через портал самообслуживания.

  3. Биллинг и аналитика. Cloudlink предоставляет гибкие инструменты для биллинга и аналитики, включая создание уникальных тарифных планов для разных организаций, а также продвинутые отчёты и дашборды для анализа загрузки всех кластеров ИТ-инфраструктуры.

  4. Управление пользователями и безопасность. Встроенные возможности управления SSH-ключами, интеграция с AD и LDAP, а также гибкая ролевая модель обеспечивают эффективное управление правами доступа и безопасностью данных.

  5. Маркетплейс и сервисы. Cloudlink включает в себя маркетплейс сервисов уровня IaaS+ и PaaS, позволяя заказать виртуальные машины с преднастроенным ПО, базы данных и кластеры K8s, что значительно ускоряет развёртывание и преднастройку приложений и услуг.

Преимущества использования Cloudlink:

  • Гибкость и масштабируемость. Cloudlink обеспечивает высокий уровень гибкости в заказе и управлении ресурсами, что позволяет компаниям легко масштабировать свои операции в соответствии с изменяющимися бизнес-потребностями.

  • Управление проектами. Иерархическая структура проектов и мощные инструменты управления делают Cloudlink идеальной платформой для больших организаций с разветвлённой структурой управления.

  • Автоматизация процессов. Конструктор сценариев и система контроля версий созданных сервисов значительно упрощают процесс разработки и внедрения новых услуг, способствуя быстрому и эффективному обновлению систем.

Таким образом, Cloudlink является мощным инструментом для компаний, стремящихся максимально использовать потенциал частного облачного хостинга, обеспечивая при этом высокий уровень автоматизации и удобства управления.

Про тестирование платформы на демо-стенде

Тщательное тестирование осуществлялось на специально подготовленном демо-стенде. Я стремился не только изучить функционал и возможности платформы, но и выявить потенциальные проблемы и сложности, которые могут возникнуть при её использовании. Важно было зафиксировать все «узкие» места и проблемные ситуации, чтобы оценить возможности и устойчивость работы платформы Cloudlink, а также разработать решения до начала реализации проекта на стороне клиента. 

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

  1. Manager host — эта машина является узлом конфигурирования платформы. С неё осуществляется развёртывание платформы, обновление и настройка некоторых ключевых конфигурационных параметров. На менеджер-хосте задаются важные системные настройки, такие как конфигурация под систему виртуализации, DNS-сервер, NTP-сервер и другие критические параметры, необходимые для корректной работы всей платформы.

  2. Target host — машина, на которую производится установка платформы с менеджер-хоста. Этот хост становится основной рабочей площадкой, на которой фактически функционирует платформа Cloudlink после её установки и конфигурации. Важно, что именно на этом хосте происходят все ключевые операции и обработка данных, что делает его центром активности Cloudlink в процессе работы.

  3. Nova Universe host — если в рамках работы с платформой планируется использование контейнеризированных приложений через Nova Universe, требуется отдельный хост. На нём разворачивается окружение для оркестрации контейнеров, что позволяет интегрировать службы контейнеризации в Cloudlink и использовать возможности платформы для заказа и управления контейнеризированными приложениями.

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

На следующем этапе будет описан подробный процесс настройки и конфигурирования каждого из хостов. Эта информация поможет понять, какие ключевые параметры и настройки необходимо определить и оптимизировать для успешного запуска и функционирования облачной платформы Cloudlink в любой IT-инфраструктуре.

Поддерживаемые ОС

Manager хост

ОС

Минимальная версия

Ubuntu

22.04

Alma Linux 9.3

9.3

Windows (WSL2)

10

MacOS

11

Target хост

ОС

Минимальная версия

Alma Linux

9.3

Astra Linux (Orel)

2.12.45

Ubuntu

22.04

Минимальные системные требования

Тип хоста

CPU

RAM

Disk (SSD)

Manager

4

8

64

Target

16

64

320

Для демо-стенда мы будем использовать Ubuntu 22.04 LTS.

На Target-хосте должен присутствовать доступ к репозиториям ОС. Может быть организован разными способами: прямой доступ в интернет, прокси, установка зависимостей в ручном режиме и т.п. Python не ниже 3.6.

Установка

Настройка DNS организации

В DNS организации необходимо выделить зону, в рамках которой будут размещаться сервисы портала, например: clink.tesla-demo.local

Далее можно либо завести wildcard-запись, которая будет указывать на target-хост, куда устанавливается портал (например, *.clink.tesla-demo.local), либо завести каждую запись отдельно:

Список DNS-записей

account-manager.clink.tesla-demo.local
api.clink.tesla-demo.local
auditor.clink.tesla-demo.local
auth.clink.tesla-demo.local
awx.clink.tesla-demo.local
budget.clink.tesla-demo.local
calculator.clink.tesla-demo.local
capacity-manager-ui.clink.tesla-demo.local
checker.clink.tesla-demo.local
cloud-docker.nexus.clink.tesla-demo.local
control.clink.tesla-demo.local
feed-service.clink.tesla-demo.local
git.clink.tesla-demo.local
iam.clink.tesla-demo.local
k3s.clink.tesla-demo.local
kong-admin.clink.tesla-demo.local
kong.clink.tesla-demo.local
konga.clink.tesla-demo.local
lucrum-back.clink.tesla-demo.local
lucrum-ui.clink.tesla-demo.local
mock-api.clink.tesla-demo.local
netbox.clink.tesla-demo.local
nexus.clink.tesla-demo.local
orchestrator.clink.tesla-demo.local
order-service.clink.tesla-demo.local
portal-back.clink.tesla-demo.local
portal.clink.tesla-demo.local
product-catalog.clink.tesla-demo.local
products-docker.nexus.clink.tesla-demo.local
rabbitmq.clink.tesla-demo.local
references.clink.tesla-demo.local
resource-manager.clink.tesla-demo.local
restriction-service.clink.tesla-demo.local
selector-allocator.clink.tesla-demo.local
selector-cp.clink.tesla-demo.local
selector-inventory.clink.tesla-demo.local
spark.clink.tesla-demo.local
state-service.clink.tesla-demo.local
swagger-ui.clink.tesla-demo.local
swagger.clink.tesla-demo.local
tarifficator.clink.tesla-demo.local
vault.clink.tesla-demo.local

Подготовка manager-хоста

  1. Установить пакет docker-ce и сопутствующие пакеты.

  2. Импортировать docker образ cloudlink-manager на manager-хосте.

   # Файл находится в корне дистрибутива, версия может отличаться.

docker load < cloudlink-manager-1.1.0.tar

  1. Проверить, что docker-образ стал доступен.

Установка портала

  1. Установить пакет docker-ce и сопутствующие пакеты.

  2. настроить авторизацию sudo без запроса пароля.
    # Можно внести в /etc/sudoers следующую запись: <cloudlink-username ALL=(ALL:ALL) NOPASSWD: ALL)>

       3. Скопировать пример inventory:

           cp -R inventories/sample inventories/box

       4. Изменить данные для подключения и в файле inventories/box/hosts.

[master]
# Имя и IP адрес хоста, на который будет выполнена установка.
k3s.clink.tesla-demo.local ansible_host=169.254.123.109

[worker]

[k3s:children]
master
worker

[k3s:vars]
# Имя пользователя для подключения (должны быть права на sudo).
ansible_user=ubuntu
# DNS домен для внутренних сервисов.
domain_int=clink.tesla-demo.local
# DNS домен для внешних сервисов (может быть аналогичен domain_int, если используется только одна зона).
domain_ext=clink.tesla-demo.local

5. Убедиться, что на указанный target-хост доставлен SSH-ключ для подключения. 

          Доставка SSH ключа на target-host:

          # Создать SSH-ключ, если он не существует.

ssh-keygen

# Доставить SSH-ключ на сервер:

ssh-copy-id <user-target-host>@<IP>

Если авторизация по паролю на сервера запрещена, то можно добавить публичный ключ напрямую в authorized_keys

# На manager-хосте смотрим содержимое публичной части ключа.cat ~/.ssh/id_rsa.pub #

# Добавляем данные в файл authorized_keys на target-хосте.

echo 'ssh-rsa AAAAB3NzaC1yc...' >> ~/.ssh/id_rsa

6. Изменить настройки в файле inventories/box/group_vars/k3s/config.yml (описание настроек приведено в комментариях в файле).

# Платформы виртуализации.
# Поддерживаемые типы платформ (поле type): zvirt, vsphere, openstack, vcloud, hyper_v, yandex_cloud.
platforms:
#  # Код платформы.
#  vsphere:
#    # Тип платформы.
#    type: vsphere
#    # Человеко читаемое название платформы.
#    label: vSphere
#    # Схема для доступа к vSphere Client API.
#    scheme: https
#    # IP адрес vSphere Client API.
#    host: '' # прим. 10.13.251.5 или vsphere.sample.box
#    port: '' # прим. 443. Если не указан, то используется стандартный порт протокола.
#    # Учётные данные для подключения.
#    username: ''
#    password: ''
#    params:
#      # Вес платформы в интерфейсе заказа продукта. Чем меньше вес, тем выше в списке.
#      weight: 100
#      # Имя кластера vSphere.
#      cluster_name: CL01
#      # Идентификатор ClusterComputeResource, который можно взять из urn-ресурса, например:
#      # urn:vmomi:ClusterComputeResource:domain-c8:b857d79d-de9d-4a6c-b34d-9b935ad35619
#      domain_id: domain-c8
#      # Идентификатор Datastore, который можно взять из urn-ресурса, например:
#      # urn:vmomi:Datastore:datastore-16:b857d79d-de9d-4a6c-b34d-9b935ad35619
#      datastore_id: datastore-16
#      # Имя директории, в которой будут создаваться поддиректории и виртуальные машины.
#      tenant_prefix: cloud
#      # Путь к директории в Inventory vSphere с шаблонами виртуальных машин, например: 'Content Library/contLib_CL01'.
#      template_inventory_path: library/templates
#
  # Код платформы.
  zvirt:
    # Тип платформы.
    type: zvirt
    # Человеко-читаемое название платформы.
    label: zVirt
    # Схема для доступа к zVirt API.
    scheme: https
    # IP адрес zVirt API.
    host: 'z-engine-01.tesla-demo.local' # прим. 10.13.250.2 или zvirt.sample.box
    port: '' # прим. 443. Если не указан, то используется стандартный порт протокола.
    # Учётные данные для подключения.
    username: 'admin@internal'
    password: 'you-zvirt-pwd'
    params:
      # Вес платформы в интерфейсе заказа продукта. Чем меньше вес, тем выше в списке.
      weight: 101
      # Значение поля "Cluster ID" в свойствах кластера zVirt.
      cluster_id: 0cc4b548-f0fa-11ee-b333-56734e258618
      # Имя кластера zVirt.
      cluster_name: Default
      # Имя домена во вкладке "Storage Domains" zVirt.
      storage_name: h-zvirt-vol2
#
#  # Код платформы.
#  openstack:
#    # Тип платформы.
#    type: openstack
#    # Человеко-читаемое название платформы.
#    label: OpenStack
#    # Схема для доступа к OpenStack Identity service (keystone).
#    scheme: https
#    # IP адрес и порт OpenStack Identity service (keystone).
#    host: '' # прим. 10.91.0.10 или openstack.sample.box
#    port: '' # прим. 5000. Если не указан, то используется стандартный порт протокола.
#    # Учётные данные для подключения.
#    username: ''
#    password: ''
#    # Параметры платформы виртуализации.
#    params:
#      # Вес платформы в интерфейсе заказа продукта. Чем меньше вес, тем выше в списке.
#      weight: 102
#      # Регион OpenStack.
#      region: portal-dchw
#      # Domain Name OpenStack.
#      domain_name: box
#      tenant_prefix: box
#
#  # Код платформы.
#  vcloud:
#    # Тип платформы.
#    type: vcloud
#    # Человеко-читаемое название платформы.
#    label: vCloud
#    # Параметры подключения к vCloud Director.
#    scheme: https
#    host: '' # Пример: vcloud.example.com
#    port: '' # Пример: 443. Если не указан, то используется стандартный порт протокола.
#    # Учетные данные для подключения.
#    username: ''
#    password: ''
#    # Параметры платформы виртуализации.
#    params:
#      # Вес платформы в интерфейсе заказа продукта. Чем меньше вес, тем выше в списке.
#      weight: 103
#      # Имя и идентификатор "Provider VDCs".
#      provider_vdc_name: '' # Пример: DC01
#      provider_vdc_uuid: '' # Пример: a7dcb618-405e-473f-93a3-722bbd38395b
#      cpu_in_mhz: 2400
#
#  # Код платформы.
#  hyper_v:
#    # Тип платформы.
#    type: hyper_v
#    # Человеко-читаемое название платформы.
#    label: Hyper-V
#    # Параметры подключения к Hyper-V.
#    scheme: http
#    host: '' # Пример: hyperv.sample.box
#    port: '' # Пример: 80. Если не указан, то используется стандартный порт протокола.
#    # Учетные данные для подключения.
#    username: ''
#    password: ''
#    # Параметры платформы виртуализации.
#    params:
#      # Вес платформы в интерфейсе заказа продукта. Чем меньше вес, тем выше в списке.
#      weight: 104
#
#  # Код платформы.
#  yandex_cloud:
#    # Тип платформы.
#    type: yandex_cloud
#    # Человеко-читаемое название платформы.
#    label: Yandex Cloud
#    # Параметры подключения к Yandex Cloud.
#    hosts:
#      compute:
#        scheme: https
#        host: compute.api.cloud.yandex.net
#        port: '' # Если не указан, то используется стандартный порт протокола.
#      iam:
#        scheme: https
#        host: iam.api.cloud.yandex.net
#        port: '' # Если не указан, то используется стандартный порт протокола.
#    # Учетные данные для подключения.
#    service_account_id: '' # Пример: x96q9v9xt4dd88tgh5x8
#    private_key: >-
#      PLEASE DO NOT REMOVE THIS LINE! Yandex.Cloud SA Key ID <x96q9v9xt4dd88tgh5x8>
#      -----BEGIN PRIVATE KEY-----
#      MIIEvQIBADANbU4qmjkVFNP6GtyMR1itBKcwggSjAgEAAoIBAQDO8dGH7DEJB56z
#      <...>
#      -----END PRIVATE KEY-----
#    # Параметры платформы виртуализации.
#    params:
#      # Вес платформы в интерфейсе заказа продукта. Чем меньше вес, тем выше в списке.
#      weight: 105
#      # Имя облака.
#      cloud_name: '' # Пример: box
#      # Идентификатор облака.
#      cloud_id: '' # Пример: ai6r39835585icm329kc
#      # Идентификатор папки, в которой будут создаваться VM.
#      folder_id: '' # Пример: u2312uq8m54z2i942s34
#      # Идентификатор платформы.
#      # Подробнее см. в документации https://cloud.yandex.ru/ru/docs/compute/concepts/vm-platforms
#      platform_id: standard-v3
#      # Зона доступности.
#      zone_id: ru-central1-d

    

# IP-адрес и порт NTP сервера (необходимо для корректной работы кластерных продуктов).
# Если оставить поле пустым, то будет поднят отдельный NTP-сервер в составе коробки, а все сервисы настроены на работу с ним.
ntp_host: '169.254.123.1' # Пример: 10.15.8.13
ntp_port: 123
######################################################################################################
# Для установки внутренних компонентов требуется доступ к репозиториям Docker (DEB/RPM пакеты) и PyPI.
# Есть несколько способов организовать этот доступ:
# 1) Использование локального репозитория (только для AlmaLinux 9.3):
#      - Установите "local_repo_enabled: true".
#      - Остальные переменные оставьте без изменений.
# 2) Доступ через прокси-сервер (например, Squid):
#      - Укажите адрес прокси-сервера в переменной "http_proxy".
#      - Установите "local_repo_enabled: false".
#      - Остальные переменные оставьте без изменений.
# 3) Использование внутреннего прокси-репозитория (например, Nexus):
#      - Измените адреса в переменных "docker_install_repository" и "pypi_repository".
#      - Установите "local_repo_enabled: false".
#      - Остальные переменные оставьте без изменений.
# 4) Прямой доступ в интернет:
#      - Установите "local_repo_enabled: false".
#      - Остальные переменные оставьте без изменений.
######################################################################################################
# Включить использование локального репозитория.
# В этом случае установка CloudLink не требует доступа в интернет.
local_repo_enabled: false
# Прокси для доступа в интернет, например: "http://proxy01.example.com:3128". Если не указан, то не используется.
http_proxy: ''
# Репозиторий для установки DEB/RPM пакетов Docker. Можно изменить на внутренний прокси-репозиторий.
docker_install_repository: https://download.docker.com/linux
# Репозиторий для установки PIP пакетов. Можно изменить на внутренний прокси-репозиторий.
pypi_repository: https://pypi.org/simple
# IP-адрес SMTP relay для отправки почты.
smtp_host: 127.0.0.1
# Port SMTP relay для отправки почты.
smtp_port: 25
# Использовать TLS или нет.
smtp_use_tls: 'False'
# Адрес отправителя, используемый в рассылках.
smtp_default_from: noreply@clink.tesla-demo.local
# Учётные данные для подключения.
smtp_username: ''
smtp_password: ''
##############################################################################################
# Переменные для установки сертификата в CloudLink.
# Если хотя бы один из параметров не задан, то будет сгенерирован самоподписанный сертификат.
##############################################################################################
# Корневой CA сертификат.
tls_ca_cert: ''
# Сертификат или цепочка сертификатов.
tls_cert: ''
# Ключ от сертификата.
tls_key: ''
# Базовый домен, который был установлен при развёртывании Nova Universe, например: universe.nova.internal
nova_universe_base_domain: 'universe.tesla-demo.local'
# Учётные данные для подключения. Значения полей hubUsername и hubToken из конфигуратора Nova Universe.
nova_universe_hub_username: 'deploy-user'
nova_universe_hub_token: 'ce0d49c40f1e87238cca6df8a59b1a6b73ba0ffa'
dns_servers:
  - /etc/resolv.conf

7. Запустить playbook, после чего ввести пароль для установки, который необходимо получить у менеджера Cloudlink.

docker run -it --network host --rm </span>
    -v /home/

portal-box:/apps \
    -v ~/.ssh/id_rsa:/root/.ssh/id_rsa \
    -v ~/.kube/cloudlink:/root/.kube/cloudlink \
    cloudlink-manager:1.1.0 \
    -i inventories/box/hosts \
    -u $USER \
    portal_box.yml \
    --ask-vault-pass

/home/" class="formula inline">USER/portal-box – путь до директории portal-box 
~/.ssh/id_rsa – путь до созданного SSH-файла
~/.kube/cloudlink – в этой директории будет созданный kubernetes config-файл
cloudlink-manager:1.1.0 – имя образа, которое указано в результате команды docker images
inventories/box/hosts – путь до файла inventory
USER – пользователь, с помощью которого будет производиться подключение на удалённый хост
portal_box.yml – файл, находящийся в portal-box директории
--ask-vault-pass – пароль предоставляет менеджер Cloudlink

Настройка после установки

Ниже будут приведены примеры ссылок с доменом clink.tesla-demo.local, который был указан в переменной domain_int при настройке файла inventories/box/hosts.

По окончанию выполнения playbook будет выведена информация о подключении к Vault, K3s и самому порталу.

TASK [Vault connection information] ******************************************************************************************************************************************************************************************
ok: [k3s.clink.tesla-demo.local] => {
    "msg": "VAULT_ADDR='https://vault.clink.tesla-demo.local' VAULT_TOKEN='hvs.qVWTqgOQXzTL3LxabI9hB1NN'"
}

TASK [Kubeconfig information] ************************************************************************************************************************************************************************************************
ok: [k3s.clink.tesla-demo.local] => {
    "msg": "Kubeconfig for connecting to the cluster is available at '~/.kube/cloudlink/box'"
}

TASK [Portal admin credentials] **********************************************************************************************************************************************************************************************
ok: [k3s.clink.tesla-demo.local] => {
    "msg": "url='https://portal.clink.tesla-demo.local' username='admin-box' password='WhAsh7#.hnu=h)hB<dLK'"
}

PLAY RECAP *******************************************************************************************************************************************************************************************************************
k3s.clink.tesla-demo.local : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Необходимо сохранить учётные данные, так как они понадобятся для дальнейшей настройки.

~/.kube/cloudlink – в этой директории будет созданный kubernetes config-файл, который тоже сохраняем.

Также данную информацию можно вывести повторно, для этого необходимо выполнить playbook с тегом info

docker run -it --network host --rm -v /home/$USER/portal-box:/apps -v ~/.ssh/id_rsa:/root/.ssh/id_rsa -v ~/.kube/cloudlink:/root/.kube/cloudlink cloudlink-manager:1.1.0 -i inventories/box/hosts portal_box.yml --ask-vault-pass --tags info

Перейти по адресу, указанному в результатах выполнения задачи Portal admin credentials (https://portal.clink.tesla-demo.local), после чего скачать корневой сертификат сайта и добавить его в доверенные на вашем ПК.

Настроим менеджер сети Netbox под задачи Cloudlink.

  1. Настроить сервис NetBox (IPAM), расположенный по адресу https://netbox.clink.tesla-demo.local/

  2. Получить учётные данные (adminUsername и adminPassword) из Vault по адресу https://vault.clink.tesla-demo.local/ui/vault/secrets/deployment/show/netbox. Vault token берём из предыдущего вывода credentials на manager-хосте.

3. Перейти по адресу https://netbox.tesla-demo.local/ipam/vlans/ и создать новый VLAN.

Пример для zVirt:

ID = 72
# Имя ресурса vNIC Profile
Name = VLAN72
Status = Active
Tenant = BOX
Site = COD-A
# Идентификатор vNIC Profile, который можно получить запросом к api (значение "id" нужной сети):
# https://АДРЕС-ZVIRT-ENGINE/ovirt-engine/api/vnicprofiles
# Пример команды: curl https://АДРЕС-ZVIRT-ENGINE/ovirt-engine/api/vnicprofiles -u 'ЛОГИН@internal:ПАРОЛЬ' -k
Custom virt subnet uuid = 02baf04b-d3e9-40c3-80d7-32f61b78e36d

Пример в нашем случае:

 4. При желании можно настроить свой VRFs по адресу https://netbox.clink.tesla-demo.local/ipam/vrfs вместо преднастроенного DEV_DEV:

5. Перейти во вкладку Prefixes https://netbox.clink.tesla-demo.local/ipam/prefixes и создать подсеть, в которой будут создаваться виртуальные машины.

Пример для zVirt:

Prefix = 10.138.72.0/24
Status = Active
VRF = DEV_DEV (dev_dev) или как в нашем случае VLAN72
# Тег CLUSTER_NAME в данном примере – это имя кластера в zVirt, и в вашем примере он может отличаться.
Tags = cloud, Default, zvirt
Site = COD-A
# Ранее созданный VLAN.
VLAN = VLAN72 (72)
Tenant = BOX
# Адрес шлюза подсети.
Default gw = 10.138.72.1
# DNS адреса, которые будут устанавливаться при развёртывании ВМ.
Nameservers = ["10.138.123.2"]

6. Настройка резервирования IP-адресов

  • Нерекомендуемый вариант для нескольких IP по порядку. Перейти во вкладку IP-Addresses https://netbox.clink.tesla-demo.local/ipam/ip-addresses/ и зарезервировать уже занятые IP-адреса в подсети, например, адрес шлюза.

    Address = 10.138.72.1/24
    Status = Reserved
    VRF = VLAN72 (72)
    Description = Gateway
    Tenant = BOX

  • Рекомендуемый вариант для нескольких IP по порядку. Перейти во вкладку IP-Ranges https://netbox.clink.tesla-demo.local/ipam/ip-ranges/ и зарезервировать уже занятые диапазоны IP, например, в подсети 10.138.72.0/24 зарезервировать первые 100 адресов.

    VRF = VLAN72 (72)
    Start address = 10.138.72.1/24
    End address = 10.138.72.100/24
    Status = Reserved
    Description = [zVirt] Reserved
    Tenant = BOX

7. Так как мы создавали VRF VLAN72 (vlan72) вместо штатно предустановленного VRF DEV_DEV (dev_dev), то необходимо также добавить сегмент сети в Сервисе заказа https://order-service.clink.tesla-demo.local/admin/net_segments

В разделе Платформы https://order-service.clink.tesla-demo.local/admin/platforms добавляем наш VLAN

8. Зачислить виртуальные деньги для организации через контрольную панель https://control.clink.tesla-demo.local

  • Авторизоваться под пользователем admin-box и перейти во вкладку Биллинг -> Пополнение счета.

  • Выбрать организацию, счета отправителя и получателя, сумму, описание и нажать Подтвердить.

  • Перейти в орг. структуру основного портала https://portal.clink.tesla-demo.local/management/org-structure

  • Нажать на три точки возле имени организации и нажать Перевести.

  • Выбрать счёт получателя, например Проект Cloud take away, сумму, описание и нажать Перевести

Обновление портала

Чтобы обновить портал, нужно выполнить следующие шаги:

  1. Разархивировать новую версию дистрибутива в отдельную директорию.

  2. Скопировать inventory/sample в inventories/box (аналогично процессу установки с 0).

  3. Это будет новый inventory для обновлённого портала.

  4. Перенести значения из старых файлов yml и hosts в соответствующие разделы нового inventory.

  5. Не копируйте старые файлы целиком, так как структура нового файла конфигурации может измениться, и совместимость не гарантируется.

  6. После заполнения нового inventory необходимыми значениями, процесс обновления портала будет аналогичен его установке с нуля.

Поиск и исправление проблем

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

Чеклист:

  • Manager и Target хостам выделено корректное количество ядер и памяти.

  • Проверить наличие свободного пространства в файловой системе хостов.
    Manager-хост – минимум 50 ГБ.
    Target-хост – минимум 150 ГБ.

  • Все необходимые имена разрешаются с Manager- и Target-хостов, а также клиентской машины, например:
    nslookup portal.clink.tesla-demo.local
    nslookup control.clink.tesla-demo.local

  • Убедиться, что у пользователя, с помощью которого производится установка на target-хост, есть sudo-права без пароля на target-хосте:
    sudo -v

  • Target-хост должен иметь доступ к репозиториям ОС для загрузки необходимых пакетов в процессе установки.

  • Проверить корректность введённых данных в файлах конфигурации (hosts и config.yml) в директории inventories. Пункты, для обращения внимания:

    • DNS домен для внутренних сервисов введён в соответствии с wildcard-записью в DNS.

    • Логин для подключения в zVirt должен быть с доменом, к которому относится пользователь, например, admin@internal

В случае ошибки в процессе деплоя портала, можно проверить логи пода, который находится в статусе ERROR.
Получение списка подов и их статусов на target-хосте: sudo kubectl get pods -A
Просмотр логов выбранного пода: sudo kubectl logs -n portal-box 
имя-пода

Также деплой можно запускать с повышенной детализацией с помощью ключа -vvv

В случае ошибок после деплоя следует открывать логи соответствующего пода в зависимости от проблемы:

  • При проблеме с настройкой сети, при выполнении заказа – rpc-reserver-ipam 

  • При ошибке с подключением облаков в административном интерфейсе – selector-worker-box

Настройка Nova Universe

Для заказа кластера Nova Container Platform в Cloudlink необходимо предварительно развернуть сервер управления Nova Universe. Он поставляется в виде образа виртуальной машины в формате qcow2 и включает следующий набор компонентов:

  • Хранилище образов контейнеров

  • Сервис доставки ПО

  • Сервис настройки ПО

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

Требования к серверу управления Nova Universe

Требования к среде размещения

Для размещения Nova Universe подходят среды виртуализации zVirt и VMware vSphere. Формат образа виртуальной машины qcow2 является нативным для zVirt. В случае, когда необходимо разместить сервер управления в vSphere, следует провести дополнительные манипуляции, которые описаны в разделе создания виртуальной машины из образа в среде виртуализации VMware vSphere.

Требования к ресурсам

Для запуска сервера управления Nova Universe необходимо следующее количество ресурсов:

vCPU

RAM

Диск

IOPS

4

8 GB

40 GB SSD

300+

Внимание! Компоненты сервера управления Nova Universe чувствительны к производительности диска, поэтому всегда рекомендуется использовать более быстрое хранилище.

Требования к настройке сети

Сервер управления Nova Universe поддерживает использование IP-адреса, настроенного как с помощью DHCP, так и заданного статически. Рекомендуется размещать сервер управления в отдельной от кластеров Kubernetes сети.

Важно:

  • В случае использования DHCP-сервера для настройки сетевого интерфейса сервера, необходимо настроить DHCP-сервер на предоставление постоянного IP-адреса и сведений о DNS-серверах.

  • Сервер управления Nova Universe на текущий момент не поддерживает IPv6.

Требования к системе разрешения имён DNS

Для работы сервера управления Nova Universe необходимо создать следующие DNS-записи.

Компонент

Пример записи

Описание

Сервер управления Nova Universe

universe.имя.домена
(в нашем случае universe.tesla-demo.local)

DNS-запись типа A разрешает адрес сервера управления.

Службы Nova Universe

.universe.имя.домена
(в нашем случае .universe.tesla-demo.local)

DNS-запись типа A или CNAME разрешает адрес сервера управления при запросе его поддоменов, например, sun.universe.tesla-demo.local, hub.universe.tesla-demo.local и т. д.

Внимание! Для корректной работы сервера управления вам необходимо также настроить DNS-сервер в его сетевой конфигурации.

Требования к межсетевому экранированию

Если сервер управления Nova Universe размещается в отдельной маршрутизируемой сети, то для организации доступа к ресурсам сервера управления из сетей узлов Kubernetes, необходимо настроить следующие разрешающие правила:

Ресурс

DNS-имя

Порт

IP-адрес

Хранилище образов

hub.DNS-имя Nova Universe

https/3000

IP-адрес Nova Universe

Сервис доставки ПО

hub.DNS-имя Nova Universe

https/3000

IP-адрес Nova Universe

Сервис настройки ПО

sun.DNS-имя Nova Universe

https/443

IP-адрес Nova Universe

Репозиторий пакетов

repo.DNS-имя Nova Universe

https/443

IP-адрес Nova Universe

Сервис загрузки обновлений

DNS-имя Nova Universe

https/443

IP-адрес Nova Universe

Установка сервера управления

Создание виртуальной машины из образа в среде виртуализации zVirt

Подключитесь к WEB-интерфейсу управления Hosted Engine и перейдите в меню Storage – Disks. В данном меню необходимо загрузить образ сервера в домен хранения, нажав Upload – Start. 

2

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

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

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

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

Рис. 2. Главная страница интерфейса управления Nova Universe
Рис. 2. Главная страница интерфейса управления Nova Universe

На главной странице интерфейса управления отображается статус системных сервисов Nova Universe. При первом запуске общий системный статус "Not Provisioned" и статус сервисов "Not Available" являются нормой, поскольку инициализация сервера управления не выполнена.

Изменение пароля учётной записи по умолчанию

Рекомендуется изменить пароль учётной записи universe. Для этого перейдите в раздел Configure и выберите опцию Change user password. Установите новый пароль в соответствии с политикой ниже:

  • используйте сочетание букв разного регистра, цифр и специальных символов;

  • не используйте простые и повторяющиеся слова;

  • длина пароля должна быть не менее 8 символов.

Настройка параметров сетевого интерфейса

Вы можете настроить сетевой интерфейс сервера управления или установить дополнительные параметры сети. Для этого перейдите в раздел Configure и выберете опцию Network configuration.

Рис. 3. Интерфейс настройки сети Nova Universe
Рис. 3. Интерфейс настройки сети Nova Universe

Для настройки сети используется текстовая версия утилиты Network Manager (TUI). С помощью Network Manager вы можете:

  • установить имя сервера, используя опцию Set system hostname;

  • отредактировать существующее подключение, используя опцию Edit a connection;

  • Активировать и деактивировать существующее подключение, используя опцию Activate a connection.

Настройка базового DNS-имени

Выполните настройку базового DNS-имени сервера управления. Для этого перейдите в раздел Configure, далее в раздел System configuration и выберете опцию Set initial configuration.

Рис. 4.1 Настройка базового DNS-имени Nova Universe
Рис. 4.1 Настройка базового DNS-имени Nova Universe


Укажите базовое DNS-имя в соответствии с требованиями к системе разрешения имён DNS.

Рис. 4.2 Настройка базового DNS-имени Nova Universe
Рис. 4.2 Настройка базового DNS-имени Nova Universe

Инициализация сервера управления

После установки параметров сетевого интерфейса и базового DNS-имени вам необходимо выполнить первичную инициализацию Nova Universe. Для этого перейдите в раздел Configure, далее в раздел System configuration и выберете опцию Initialize appliance. Подтвердите инициализацию кнопкой Confirm.

Рис. 5.1 Инициализация Nova Universe
Рис. 5.1 Инициализация Nova Universe


Процесс инициализации сервера управления Nova Universe может занять до 30 минут. После того, как инициализация успешно завершена, выполните повторный вход в интерфейс управления Nova Universe и проверьте статус сервисов.

Рис. 5.2 Инициализация Nova Universe
Рис. 5.2 Инициализация Nova Universe

Получение реквизитов доступа к серверу управления

Реквизиты доступа к серверу управления необходимы для формирования файла конфигурации установки платформы. Для получения реквизитов доступа перейдите в раздел Configure, далее в раздел System configuration и выберете опцию Get current configuration.

Рис. 6. Реквизиты доступа к Nova Universe
Рис. 6. Реквизиты доступа к Nova Universe

Сохраните значения hubUsername, hubToken, DNS wildcard domain.

Данные значения понадобятся при последующей установке портала Cloudlink (или, как в нашем случае, добавляем эти значения в inventories/box/group_vars/k3s/config.yml на manager хост) – их необходимо добавить в качестве значений к соответствующим переменным в файле конфигурации config.yml:

 # Базовый домен, который был установлен при развёртывании Nova Universe, например: universe.nova.internal nova_universe_base_domain: 'DNS wildcard domain' # Учётные данные для подключения. Значения полей hubUsername и hubToken из конфигуратора Nova Universe. nova_universe_hub_username: 'hubUsername' nova_universe_hub_token: 'hubToken'

Для удобства копирования информации вы можете подключиться к интерфейсу управления Nova Universe по протоколу SSH.

Получение корневого сертификата сервера управления

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

Для этого перейдите в раздел Configure, далее в раздел System configuration и выберете опцию Get current configuration. Скопируйте значение параметра CA certificates URL (ссылку) и загрузите сертификат с помощью браузера или командных утилит.

Пример загрузки сертификата Nova Universe и установки в хранилище локальной машины представлен далее.

sudo curl -ko /etc/pki/ca-trust/source/anchors/universe-ca.crt https://repo.universe.tesla-demo.local/ca/ca.crt
sudo update-ca-trust

Подготовка шаблонов VM

Платформа Cloudlink предлагает нам несколько встроенных продуктов для заказа услуг. Но для их работы нам необходимо подготовить базовые шаблоны операционных систем. Ниже будет описан принцип настройки и подготовки наиболее популярных ОС, таких как AstraLinux, RedOS, Ubuntu, AlmaLinux, Debian, CentOS.

AstraLinux

zVirt

  1. Получить образ в формате iso Astra linux 1.7.3.

  2. Выгрузить iso в “хранилище → Диски → Загрузить”.

  3. Создать виртуальную машину. (выделить гарантированную ОЗУ 2048 МБ, 2 CPU, 20 Гб Диск), использовать диск lvm и базовую защиту, также установить ssh.

  4. Установить (опционально) Network-Manager из локального репозитория, если не установился автоматически. При необходимости дополнительно установить resolv.conf, так как могут быть проблемы с DNS.

  5. Подключить виртуальную машину к сети интернет (необходим доступ до репозиториев Астры, при необходимости поправить список source репозиториев /etc/apt/sources.list, по стандарту интернет репозитории под комментариями).

  6. В виртуальной машине установить и настроить qemu-guest-agent и cloud-init, а после создания шаблона из ВМ удалить сетевые интерфейсы шаблона.

Устанавливаем resolvconf
apt install resolvconf

Устанавливаем qemu-guest-agent
apt install qemu-guest-agent

Устанавливаем cloud-init
apt install cloud-init

Вносим изменения в cloud-init (вендор обещал исправить ошибку в 1.7.5)

nano /usr/lib/python3/dist-packages/cloudinit/distros/astra_util.py

в функции mic_is_active() добавить в блок except в первую строчку: status = 'ERROR'

Запускаем сервисы
service cloud-init start
service qemu-guest-agent start

Перезапускаем 
reboot

RedOS

zVirt

  1. Скачать образ в формате iso RedOS 7.3.

  2. Создать виртуальную машину (выделить гарантированную ОЗУ 2048 МБ, 2 CPU, 20 Гб Диск).

  3. Запустить → Однократный запуск → Параметры загрузки → Прикрепить CD (выбрать необходимый ISO)

  4. В виртуальной машине установить и настроить qemu-guest-agent и cloud-init

Монтируем ISO
mount /dev/sr0 /media

Зачищаем все репы
rm -rf /etc/yum.repos.d/Red

Создаем локальную репу br cat > /etc/yum.repos.d/redos.repo << EOF
[redos_main]
name=RedOS 7.3
baseurl=file:///media #путь до iso
gpgkey=""
enabled=1
gpgcheck=0
EOF

Инициализируем репы
yum clean all && yum makecache

Устанавливаем qemu-guest-agent
yum install qemu-guest-agent

Устанавливаем cloud-init
yum install cloud-init

Очистить все записи в resolv.conf 
vi /etc/resolv.conf

Запускаем сервисы
systemctl enable cloud-init
service qemu-guest-agent start

Перезапускаем
reboot

Ubuntu

zVirt

  1. Получить образ в формате iso ubuntu (либо использовать облачный образ cloud image).

  2. Выгрузить .iso в домен хранения (либо выгрузить .ova образ на хост zVirt в папку и изменить права на папку и файл chown 36:36 <директория и файл>, использовать thick диск)

  3. Создать виртуальную машину (выделить гарантированную ОЗУ 2048 МБ, 2 CPU, 20 Гб Диск).

  4. Подключить виртуальную машину к сети интернет (необходим доступ до репозиториев ubuntu). При установке использовать диск LVM.

В виртуальной машине установить и настроить qemu-guest-agent и cloud-init:

Устанавливаем qemu-guest-agent
apt install qemu-guest-agent

Устанавливаем cloud-init
apt install cloud-init

Устанавливаем поддержку файловой системы XFS

sudo apt install -y xfsprogs

Запускаем сервисы
service cloud-init start
service qemu-guest-agent start

Выключаем ВМ
poweroff

Создать из ВМ шаблон и назвать его ubuntu-tempate

Удалить сетевой интерфейс из шаблона

В случае проблем в разрешении имён DNS (с чем столкнулся я при тестировании) можно сделать так: 


sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

sudo rm /etc/resolv.conf

создать новый resolv.conf и вписать свои DNS
sudo nano /etc/resolv.conf

AlmaLinux

zVirt

  1. Получить образ в формате iso AlmaLinux 8.10.

  2. Выгрузить iso в “хранилище →Диски → Загрузить”

  3. Создать виртуальную машину (выделить гарантированную ОЗУ 2048 МБ, 2 CPU, 20 ГБ), использовать диск lvm.

  4. В виртуальной машине установить и настроить qemu-guest-agent и cloud-init:

После создания шаблона из ВМ удалить сетевые интерфейсы шаблона

Установить tar

yum install -y tar

Устанавливаем qemu-guest-agent
yum install qemu-guest-agent

Устанавливаем cloud-init
yum install cloud-init

Запускаем сервисы
service cloud-init start
service qemu-guest-agent start

Выключить ВМ
poweroff

Создать из ВМ шаблон и назвать его alma-tempate.

Удалить сетевой интерфейс из шаблона.

Debian

zVirt

  1. Получить образ debian-11.7

  2. Создать виртуальную машину (выделить гарантированную ОЗУ 2048 МБ, 2 CPU, 20 Гб Диск). Использовать диск lvm.

Запустить → Однократный запуск → Параметры загрузки → Прикрепить CD (выбрать необходимый ISO).

Устанавливаем resolvconf

apt install resolvconf

Устанавливаем qemu-guest-agent
apt install qemu-guest-agent

Устанавливаем cloud-init
apt install cloud-init

Устанавливаем поддержку файловой системы XFS

sudo apt install -y xfsprogs

Устанавливаем дополнительные компоненты:

apt install gnupg gnupg1 gnupg2 apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt-cache policy docker-ce
apt install docker-ce

Запускаем сервисы:
service cloud-init start
service qemu-guest-agent start

очистить /etc/network/interfaces (оставить source /etc/network/interfaces.d/)

Очистить сетевые интерфейсы

ip addr flush dev enp1s0

ip route flush table main

Выключить ВМ

poweroff

Создать из ВМ шаблон и назвать его debian-template

Удалить сетевой интерфейс из шаблона

CentOS 7

zVirt

  1. Получить образ Centos 7.

  2. Создать виртуальную машину (выделить гарантированную ОЗУ 2048 МБ, 2 CPU, 20 Гб Диск).

  3. Примонтировать образ к виртуальной машине, выполнить установку ОС, режим minimal install.

  4. Проверить, что установлен Network-Manager (nmcli). Если его нет, выполнить установку (yum install Network-Manager).

Установить и настроить пакеты:

yum install -y qemu-guest-agent

systemctl start qemu-guest-agent

systemctl enable qemu-guest-agent

yum install -y cloud-init

systemctl enable cloud-init

Выполнить настройку cloud-init:

/etc/cloud/cloud.cfg

.....

выставить ssh_pwauth: 1

.....

Включить возможность авторизации по паролю через SSH
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config

очистить кэш cloud-init и выключить ВМ

cloud-init clean

poweroff

Удалить сетевой интерфейс и создать шаблон из ВМ centos-7-template.

Комментарии (0)