Я Руслан Никитенко, инженер отдела сервиса компании Тринити. Наш отдел занимается диагностикой, тестированием и ремонтом серверов и СХД, техподдержкой Linux-систем в аппаратной части оборудования, взаимодействием с вендорами и участием в проектах по внедрению и освоению новых моделей оборудования и ПО.
Недавно я вёл проект по внедрению платформы Cloudlink для одного национального исследовательского центра и хочу поделиться практическими знаниями и рекомендациями, которые помогут другим компаниям и ИТ-специалистам избежать типичных ошибок внедрения облачных технологий в своих проектах и ускорить этот процесс. Я расскажу о тестировании продукта на демо-стенде, после которого было осуществлено реальное внедрение у заказчика.
Про платформу Cloudlink
Cloudlink — комплексное решение для создания частного облака, ориентированное на автоматизацию, аналитику и управление ресурсами. Эта платформа интегрируется с рядом ведущих технологий виртуализации, таких как VMware, zVirt, OpenStack и Hyper-V, что позволяет предоставить широкий спектр возможностей для on-premise инсталляций.
Ключевые особенности Cloudlink:
Управление ресурсами. Платформа позволяет управлять виртуализацией различных систем, включая VMware vSphere, zVirt и OpenStack. Встроенный IPAM (управление IP-адресами) и возможность управления внешними хранилищами S3 обеспечивают полный контроль над инфраструктурой.
Портал самообслуживания. Cloudlink предлагает удобный пользовательский и административный веб-порталы, что делает заказ ресурсов таким же простым, как в публичных облаках. Платформа включает конструктор PaaS-сервисов, позволяющий пользователям самостоятельно создавать услуги через портал самообслуживания.
Биллинг и аналитика. Cloudlink предоставляет гибкие инструменты для биллинга и аналитики, включая создание уникальных тарифных планов для разных организаций, а также продвинутые отчёты и дашборды для анализа загрузки всех кластеров ИТ-инфраструктуры.
Управление пользователями и безопасность. Встроенные возможности управления SSH-ключами, интеграция с AD и LDAP, а также гибкая ролевая модель обеспечивают эффективное управление правами доступа и безопасностью данных.
Маркетплейс и сервисы. Cloudlink включает в себя маркетплейс сервисов уровня IaaS+ и PaaS, позволяя заказать виртуальные машины с преднастроенным ПО, базы данных и кластеры K8s, что значительно ускоряет развёртывание и преднастройку приложений и услуг.
Преимущества использования Cloudlink:
Гибкость и масштабируемость. Cloudlink обеспечивает высокий уровень гибкости в заказе и управлении ресурсами, что позволяет компаниям легко масштабировать свои операции в соответствии с изменяющимися бизнес-потребностями.
Управление проектами. Иерархическая структура проектов и мощные инструменты управления делают Cloudlink идеальной платформой для больших организаций с разветвлённой структурой управления.
Автоматизация процессов. Конструктор сценариев и система контроля версий созданных сервисов значительно упрощают процесс разработки и внедрения новых услуг, способствуя быстрому и эффективному обновлению систем.
Таким образом, Cloudlink является мощным инструментом для компаний, стремящихся максимально использовать потенциал частного облачного хостинга, обеспечивая при этом высокий уровень автоматизации и удобства управления.
Про тестирование платформы на демо-стенде
Тщательное тестирование осуществлялось на специально подготовленном демо-стенде. Я стремился не только изучить функционал и возможности платформы, но и выявить потенциальные проблемы и сложности, которые могут возникнуть при её использовании. Важно было зафиксировать все «узкие» места и проблемные ситуации, чтобы оценить возможности и устойчивость работы платформы Cloudlink, а также разработать решения до начала реализации проекта на стороне клиента.
Процесс тестирования включал использование трех различных хостов, каждый из которых выполнял свою уникальную роль.
Manager host — эта машина является узлом конфигурирования платформы. С неё осуществляется развёртывание платформы, обновление и настройка некоторых ключевых конфигурационных параметров. На менеджер-хосте задаются важные системные настройки, такие как конфигурация под систему виртуализации, DNS-сервер, NTP-сервер и другие критические параметры, необходимые для корректной работы всей платформы.
Target host — машина, на которую производится установка платформы с менеджер-хоста. Этот хост становится основной рабочей площадкой, на которой фактически функционирует платформа Cloudlink после её установки и конфигурации. Важно, что именно на этом хосте происходят все ключевые операции и обработка данных, что делает его центром активности Cloudlink в процессе работы.
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-хоста
Установить пакет docker-ce и сопутствующие пакеты.
Импортировать docker образ cloudlink-manager на manager-хосте.
# Файл находится в корне дистрибутива, версия может отличаться.
docker load < cloudlink-manager-1.1.0.tar
Проверить, что docker-образ стал доступен.
Установка портала
Установить пакет docker-ce и сопутствующие пакеты.
Настроить авторизацию 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> portal-box:/apps \ | /home/" class="formula inline">USER/portal-box – путь до директории portal-box |
Настройка после установки
Ниже будут приведены примеры ссылок с доменом 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.
Настроить сервис NetBox (IPAM), расположенный по адресу https://netbox.clink.tesla-demo.local/
Получить учётные данные (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, сумму, описание и нажать Перевести
Обновление портала
Чтобы обновить портал, нужно выполнить следующие шаги:
Разархивировать новую версию дистрибутива в отдельную директорию.
Скопировать inventory/sample в inventories/box (аналогично процессу установки с 0).
Это будет новый inventory для обновлённого портала.
Перенести значения из старых файлов yml и hosts в соответствующие разделы нового inventory.
Не копируйте старые файлы целиком, так как структура нового файла конфигурации может измениться, и совместимость не гарантируется.
После заполнения нового 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 -vTarget-хост должен иметь доступ к репозиториям ОС для загрузки необходимых пакетов в процессе установки.
Проверить корректность введённых данных в файлах конфигурации (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.имя.домена | DNS-запись типа A разрешает адрес сервера управления. |
Службы Nova Universe | .universe.имя.домена | 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. Вы сможете изменить пароль учётной записи позже в ходе настройки сервера управления.
На главной странице интерфейса управления отображается статус системных сервисов Nova Universe. При первом запуске общий системный статус "Not Provisioned" и статус сервисов "Not Available" являются нормой, поскольку инициализация сервера управления не выполнена.
Изменение пароля учётной записи по умолчанию
Рекомендуется изменить пароль учётной записи universe. Для этого перейдите в раздел Configure и выберите опцию Change user password. Установите новый пароль в соответствии с политикой ниже:
используйте сочетание букв разного регистра, цифр и специальных символов;
не используйте простые и повторяющиеся слова;
длина пароля должна быть не менее 8 символов.
Настройка параметров сетевого интерфейса
Вы можете настроить сетевой интерфейс сервера управления или установить дополнительные параметры сети. Для этого перейдите в раздел Configure и выберете опцию Network configuration.
Для настройки сети используется текстовая версия утилиты Network Manager (TUI). С помощью Network Manager вы можете:
установить имя сервера, используя опцию Set system hostname;
отредактировать существующее подключение, используя опцию Edit a connection;
Активировать и деактивировать существующее подключение, используя опцию Activate a connection.
Настройка базового DNS-имени
Выполните настройку базового DNS-имени сервера управления. Для этого перейдите в раздел Configure, далее в раздел System configuration и выберете опцию Set initial configuration.
Укажите базовое DNS-имя в соответствии с требованиями к системе разрешения имён DNS.
Инициализация сервера управления
После установки параметров сетевого интерфейса и базового DNS-имени вам необходимо выполнить первичную инициализацию Nova Universe. Для этого перейдите в раздел Configure, далее в раздел System configuration и выберете опцию Initialize appliance. Подтвердите инициализацию кнопкой Confirm.
Процесс инициализации сервера управления Nova Universe может занять до 30 минут. После того, как инициализация успешно завершена, выполните повторный вход в интерфейс управления Nova Universe и проверьте статус сервисов.
Получение реквизитов доступа к серверу управления
Реквизиты доступа к серверу управления необходимы для формирования файла конфигурации установки платформы. Для получения реквизитов доступа перейдите в раздел Configure, далее в раздел System configuration и выберете опцию Get current configuration.
Сохраните значения 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
Получить образ в формате iso Astra linux 1.7.3.
Выгрузить iso в “хранилище → Диски → Загрузить”.
Создать виртуальную машину. (выделить гарантированную ОЗУ 2048 МБ, 2 CPU, 20 Гб Диск), использовать диск lvm и базовую защиту, также установить ssh.
Установить (опционально) Network-Manager из локального репозитория, если не установился автоматически. При необходимости дополнительно установить resolv.conf, так как могут быть проблемы с DNS.
Подключить виртуальную машину к сети интернет (необходим доступ до репозиториев Астры, при необходимости поправить список source репозиториев /etc/apt/sources.list, по стандарту интернет репозитории под комментариями).
В виртуальной машине установить и настроить 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
Скачать образ в формате iso RedOS 7.3.
Создать виртуальную машину (выделить гарантированную ОЗУ 2048 МБ, 2 CPU, 20 Гб Диск).
Запустить → Однократный запуск → Параметры загрузки → Прикрепить CD (выбрать необходимый ISO)
В виртуальной машине установить и настроить 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
Получить образ в формате iso ubuntu (либо использовать облачный образ cloud image).
Выгрузить .iso в домен хранения (либо выгрузить .ova образ на хост zVirt в папку и изменить права на папку и файл chown 36:36 <директория и файл>, использовать thick диск)
Создать виртуальную машину (выделить гарантированную ОЗУ 2048 МБ, 2 CPU, 20 Гб Диск).
Подключить виртуальную машину к сети интернет (необходим доступ до репозиториев 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 rm /etc/resolv.conf
создать новый resolv.conf и вписать свои DNS
sudo nano /etc/resolv.conf
AlmaLinux
zVirt
Получить образ в формате iso AlmaLinux 8.10.
Выгрузить iso в “хранилище →Диски → Загрузить”
Создать виртуальную машину (выделить гарантированную ОЗУ 2048 МБ, 2 CPU, 20 ГБ), использовать диск lvm.
В виртуальной машине установить и настроить 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
Получить образ debian-11.7
Создать виртуальную машину (выделить гарантированную ОЗУ 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
Получить образ Centos 7.
Создать виртуальную машину (выделить гарантированную ОЗУ 2048 МБ, 2 CPU, 20 Гб Диск).
Примонтировать образ к виртуальной машине, выполнить установку ОС, режим minimal install.
Проверить, что установлен 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.