KeyLCM — управление жизненным циклом¶
KeyLCM (KeyStack Life Cycle Manager, LCM) — система управления жизненным циклом KeyStack. Она подготавливает физические серверы, организует и автоматизирует развёртывание регионов и операции эксплуатации. Конфигурация регионов хранится в Git-репозиториях, а большинство операций выполняется через CI/CD-пайплайны GitLab.
Варианты развёртывания KeyLCM¶
KeyLCM поддерживает два варианта развёртывания:
Multi-node — отказоустойчивый кластер из нескольких узлов с резервированием реплик сервисов, балансировкой запросов и встроенным хранилищем Rook-Ceph. Рекомендуется для промышленной эксплуатации.
multi-node KeyLCM¶
Single-node — установка на один узел с хранилищем на базе NFS CSI Driver и базами данных без резервирования.
single-node KeyLCM¶
Развёртывание LCM выполняется с помощью Helmfile и Taskfile, которые используют инструменты шаблонизации конфигураций из шаблонов Gomplate.
Порядок установки описан в разделе Установка KeyStack LCM.
Инсталлятор KeyLCM¶
Для первоначального развёртывания системы управления жизненным циклом KeyStack используется инсталлятор LCM (Installer). Он устанавливает сервисы LCM и формирует конфигурацию, репозитории и секреты для дальнейшей инсталляции регионов KeyStack.
Инсталлятор развёртывает следующие сервисы LCM:
Web-сервис с информацией по инсталляции Nginx — обратный прокси для компонентов LCM.
Функции, реализованные в Installer:
Выбор корневого имени домена для сервисов (например, если корневое имя домена —
cloud.itkey.com, то адрес GitLab будетks-lcm.cloud.itkey.com, у Nexus —nexus.cloud.itkey.com, у NetBox —netbox.cloud.itkey.com, а у Vault —vault.cloud.itkey.com).Генерация самоподписанного wildcard-сертификата для сервисов.
Reverse-proxy для сервисов LCM для обеспечения возможности HTTPS-шифрования трафика.
Выбор директории, в которой будут храниться данные и файлы конфигураций компонентов LCM.
Инсталлятор поставляется с архивом для offline-установки, который включает в себя:
архив с пакетами и их зависимостями, необходимыми для установки LCM-компонентов;
докер-образ Nexus;
докер-образ Nginx;
бандл со всеми необходимыми для развёртывания OpenStack докер-образами и репозиториями, а также докер-образы для LCM.
Загрузка репозиториев, реализующих функции автоматизированного управления инсталляциями KeyStack, в GitLab и настройка необходимых переменных окружения.
Интеграция с хранилищем секретов Vault.
Наполнение Vault данными для первичного развёртывания — паролями и сертификатами.
Порядок использования инсталлятора описан в разделе Установка KeyStack LCM.
Инфраструктура KeyLCM¶
В качестве инфраструктуры для KeyLCM используется Kubernetes-кластер на базе k0s, включающий в себя:
Сетевой плагин Calico, который обеспечивает сетевое взаимодействие подов и шифрованные туннели между узлами в варианте multi-node;
Компонент Istio, организующий сервисную сеть (service mesh), обеспечивает шифрование межсервисного трафика с помощью mTLS, ограничение доступа к сервисам политиками разрешённых взаимодействий и работу шлюзов входящего и исходящего трафика;
Сервис Kyverno, используемый для управления политиками Kubernetes;
Набор ресурсов Kubernetes Gateway API для описания маршрутов прикладного трафика;
Компоненты cert-manager и istio-csr, которые управляют TLS-сертификатами с использованием PKI Vault или совместимого внешнего сервиса;
Компонент MetalLB для предоставления внешних адресов сервисам Kubernetes типа LoadBalancer;
Операторы CloudNativePG и MariaDB Operator, управляющие базами данных подсистем;
Сервисы хранения Rook-Ceph (для multi-node) и NFS CSI Driver (для single-node), предоставляющие постоянные тома для данных подсистем LCM.
Примечание
В качестве хранилища данных может быть использован любой сторонний CSI-драйвер, которым можно заменить Rook-Ceph / NFS CSI Driver на этапе инсталляции продукта. При этом сторонний CSI-драйвер должен соответствовать следующим требованиям:
Поддержка томов с режимами доступа ReadWriteMany (RWX) и ReadWriteOnce (RWO) и возможностью подключения томов с соседних узлов или через сеть передачи данных;
StorageClass стороннего CSI должен быть установлен как StorageClass по умолчанию в кластере.
При установке CSI-драйвера необходимо учитывать, что в k0s путь к данным kubelet — /var/lib/k0s/kubelet, а не стандартный /var/lib/kubelet.
Обратите внимание, что корректная работа компонентов LCM со сторонними CSI-драйверами не гарантируется — при возникновении проблем, связанных с использованием стороннего хранилища, рекомендуется обратиться к документации соответствующего CSI-драйвера.
Порядок подключения стороннего CSI-драйвера приведён в разделе Установка KeyStack LCM.
Подсистемы KeyLCM¶
KeyLCM состоит из следующих подсистем:
GitLab — хранение репозиториев конфигурации и запуск пайплайнов развёртывания и эксплуатации. Подробнее см. в разделе Репозитории в GitLab;
Garage — S3-хранилище для GitLab и резервных копий баз данных регионов OpenStack;
NetBox — хранилище инвентаризационных данных физических серверов, сетевых интерфейсов и адресов, используемых при автоматизированной установке. Предоставляет веб-интерфейс для внесения и хранения информации о серверах, сетевых интерфейсах и других данных, которые используются при автоматизированной установке и настройке операционных систем серверов. Подробнее см. Администрирование NetBox;
Sonatype Nexus — хранилище образов контейнеров, QCOW2-образов для подготовки серверов и установочных артефактов, включая пакеты и репозитории;
Vault — хранилище паролей, секретов и TLS-сертификатов, используемых LCM и сервисами регионов. Настройка подключения описана в разделе Подключение к внешнему Vault (опционально);
Vault-unsealer — сервис, выполняющий автоматическую разблокировку встроенного Vault;
Ironic — компонент OpenStack, осуществляющий подготовку физических серверов и установку ОС на них. Порядок включения и установки сервиса описан в разделе Включение сервиса Ironic;
Портал документации — документация, поставляемая с релизом KeyStack;
VictoriaMetrics — хранилище метрик подсистем LCM и агрегированных метрик регионов. Состав компонентов сервиса описан в разделе VictoriaMetrics;
VictoriaLogs — приложение, отвечающее за агрегацию и хранение протоколов подсистем KeyLCM.
Состав устанавливаемых подсистем регулируется конфигурацией LCM. Для промышленной эксплуатации рекомендуется использовать внешние по отношению к LCM сервисы Vault и Nexus. Встроенные экземпляры предназначены прежде всего для ознакомительных инсталляций.
Взаимодействие подсистем при развёртывании региона¶
Развёртывание региона OpenStack начинается с установки хостовых операционных систем. Пайплайн GitLab управляет сервисом Ironic, который взаимодействует с физическими серверами через IPMI или Redfish и устанавливает ОС с использованием сетевой загрузки PXE и передачи данных по TFTP.
Организация установки хостовых ОС на серверы региона¶
После установки хостовой ОС пайплайн GitLab формирует целевую конфигурацию узлов на основе декларативного описания из репозитория региона. Управляя узлами через SSH, он устанавливает сервисы OpenStack и вспомогательные компоненты.
Источником образов Podman-контейнеров служит Nexus, а источником секретов — Vault. Узлы обращаются к обеим подсистемам по HTTPS.
Организация установки сервисов региона¶
Порядок подготовки серверов приведён в разделе Подготовка baremetal-узлов для установки KeyStack, настройки и развёртывания региона — в разделе Создание региона.