Создание кластеров на Huawei DCS
В этом документе приведены инструкции по созданию кластеров Kubernetes на платформе Huawei DCS. Создание кластера на основе YAML доступно через manifests. Если установлен Fleet Essentials и версия Alauda Container Platform DCS Infrastructure Provider равна 1.0.13 или выше, вы также можете создавать кластеры через web UI. Если рабочий процесс опирается на persistent disks, управляемые пулом, используйте DCS provider v1.0.16 или выше. В v1.0.16 объявление persistentDisk для DCSIpHostnamePool доступно только через YAML и не отображается в web UI.
Web UI предоставляет пошаговый сценарий с проверками, тогда как YAML обеспечивает большую гибкость автоматизации.
Содержание
Предварительные требования1. Ресурсы инфраструктуры2. Установка необходимых плагинов3. Подготовка шаблона виртуальной машины4. Сетевое подключение5. Настройка LoadBalancer6. Настройка публичного registryИспользование Web UIСценарий созданияШаг 1: Основная информацияШаг 2: Node Pool control planeШаг 3: Worker Node PoolsШаг 4: СетьШаг 5: ПроверкаИспользование YAMLСценарий создания кластераСценарий настройкиРазрешение значений-заполнителейЗаменители Magic TokenПланирование сети и Load BalancerНастройка KubeadmControlPlaneНастройка DCSClusterSingle-Control-Plane (No External LB) LayoutНастройка ClusterРазвертывание узловПроверка кластераИспользование ConsoleИспользование kubectlПроверка HA control planeОжидаемые результатыПриложениеПолная конфигурация KubeadmControlPlaneСледующие шагиУстранение неполадокПредварительные требования
Перед созданием кластеров убедитесь, что выполнены все следующие предварительные требования:
1. Ресурсы инфраструктуры
Перед созданием кластера настройте следующие ресурсы инфраструктуры:
- Cloud Credential - информация для доступа к платформе DCS
- IP Pool - сетевые настройки для узлов кластера, дополнительных NIC и любых persistent disks с IP-slot, таких как
/var/cpaas - Machine Template - характеристики VM для control plane и worker-узлов, без persistent disks, управляемых пулом
Подробные инструкции по настройке см. в разделе Infrastructure Resources for Huawei DCS.
2. Установка необходимых плагинов
Установите следующие плагины в кластере global:
- Alauda Container Platform Kubeadm Provider
- Alauda Container Platform DCS Infrastructure Provider
Подробные инструкции по установке см. в Installation Guide.
3. Подготовка шаблона виртуальной машины
Для установки Kubernetes необходимо:
- загрузить образ Alauda OS на платформу DCS
- создать шаблон виртуальной машины на основе этого образа
- убедиться, что шаблон включает все необходимые компоненты Kubernetes
- использовать шаблоны DCS VM
4.2.1или выше, если планируется использовать persistent disks, поскольку безопасное завершение работы и отключение диска зависят от guest tools - использовать замену один за одним для любого кластера, который будет опираться на persistent disks, управляемые пулом. Установите
maxSurge: 0для control plane и для пулов worker-узлов.
Подробности о компонентах Kubernetes, включенных в каждый образ VM, см. в OS Support Matrix.
4. Сетевое подключение
Узлы кластера global должны иметь возможность обращаться к платформе DCS по двум различным адресатам:
Загрузка файла выполняется в два этапа: provider вызывает applyUpload на VRM virtual IP (TCP/7443); платформа DCS отвечает URL, который указывает на MGMT IP и порт конкретного physical host; после этого provider передает файл потоком по этому URL. Оба адресата должны быть доступны end-to-end до начала создания кластера.
Если узлы кластера global используют multi-NIC layout (например, один NIC в сети кластера ACP, а другой NIC — в сети управления клиента, где развернут DCS), убедитесь, что к обоим адресатам — VRM virtual IP и каждому DCS physical host MGMT IP — можно маршрутизировать трафик с соответствующего NIC.
Требование: подключение к обоим адресатам обязательно для создания и управления кластером.
5. Настройка LoadBalancer
Перед созданием кластера настройте LoadBalancer для Kubernetes API Server. LoadBalancer распределяет трафик API server между узлами control plane, обеспечивая высокую доступность.
DCS provider не создает этот load balancer. Разверните его самостоятельно до создания кластера и укажите его адрес в DCSCluster.spec.controlPlaneLoadBalancer. Для развертывания с одним control-plane, в котором перед API server нет load balancer, см. Single-Control-Plane (No External LB) Layout.
6. Настройка публичного registry
Настройте учетные данные публичного registry. Это включает:
- настройку адреса repository registry
- настройку корректных учетных данных для аутентификации
Использование Web UI
Fleet Essentials UI не поддерживает обновление кластеров ACP 4.3
Сценарий Fleet Essentials UI не был адаптирован под механизм Cluster Version Operator (CVO), представленный в ACP 4.3. Не используйте Fleet Essentials UI для обновления кластеров DCS на ACP 4.3.
Две поддерживаемые альтернативы:
- YAML path — выполните описанную далее на этой странице процедуру обновления на основе YAML.
- ACP Core cluster management UI — используйте встроенный в платформу ACP Core двухэтапный сценарий обновления; см. Request the upgrade for the global cluster или Request the upgrade for workload clusters.
Это ограничение не влияет на создание кластеров и управление node-pool через Fleet Essentials UI.
Требование к версии: этот сценарий требует Fleet Essentials и Alauda Container Platform DCS Infrastructure Provider 1.0.13 или выше. Если версия provider ниже 1.0.13, используйте YAML manifests. Если вы используете persistent disks, управляемые пулом, используйте DCS provider v1.0.16 или выше. В v1.0.16 настройте DCSIpHostnamePool.spec.pool[].persistentDisk через YAML, так как web UI не отображает это поле.
Если новый кластер будет опираться на persistent disks, управляемые пулом, создайте или обновите базовый DCSIpHostnamePool с помощью YAML, а затем используйте web UI для остальных шагов создания кластера.
Сценарий создания
Создание кластера выполняется через мастер из 5 шагов:
Навигация: Clusters → Clusters → Create Cluster → Select Huawei DCS
Шаг 1: Основная информация
Проверка предварительных условий:
Перед созданием кластера убедитесь, что:
- в платформе DCS существуют DCS VM Templates, а версия Alauda OS соответствует версии Kubernetes
- настроен LoadBalancer для Kubernetes API Server
Ограничение версии: можно создать только последнюю версию Kubernetes, поддерживаемую платформой.
Шаг 2: Node Pool control plane
Node pool control plane имеет фиксированное значение 3 replicas для обеспечения высокой доступности.
Проверка: связанный IP Pool должен иметь достаточное количество доступных IP-адресов (≥ 3).
Шаг 3: Worker Node Pools
Вы можете добавить несколько worker node pool. Для каждого pool предусмотрена следующая конфигурация:
Правила проверки:
- имена pool должны быть уникальными в пределах кластера
- IP Pool должен иметь достаточное количество доступных IP-адресов (≥ Replicas)
- maxSurge и maxUnavailable должны удовлетворять ограничению: если maxSurge = 0, то maxUnavailable > 0
- если кластер будет опираться на persistent disks, управляемые пулом, оставляйте
maxSurge = 0, чтобы узлы заменялись по одному во время будущих обновлений
Совет: добавьте к имени pool префикс в виде имени кластера и дефиса (например, mycluster-worker-1), чтобы избежать конфликтов имен между разными кластерами.
Шаг 4: Сеть
Проверка: Pods CIDR и Services CIDR не должны пересекаться.
Шаг 5: Проверка
Перед созданием кластера проверьте все параметры конфигурации:
Основная информация:
- Name, Display Name, Infrastructure Credential
- Distribution Version, Kubernetes Version
- Cluster API Address
Node Pool control plane:
- Machine Template с VM Template Name, OS Version, Kubernetes Version
- CPU, Memory, Replicas, SSH Keys
Worker Node Pools (вид списка):
- Pool Name, Machine Template, Replicas
- Max Surge, Max Unavailable, SSH Keys
Если кластер будет опираться на persistent disks, управляемые пулом, оставьте Max Surge равным 0 для worker node pool.
Сеть:
- Pods CIDR, Services CIDR, Join CIDR
Нажмите Create, чтобы запустить процесс создания кластера.
Использование YAML
Сценарий создания кластера
При использовании YAML вы создаете ресурсы Cluster API в кластере global, чтобы подготовить инфраструктуру и инициализировать рабочий кластер Kubernetes.
Важное требование к namespace
Чтобы обеспечить корректную интеграцию в качестве business clusters, все ресурсы должны быть развернуты в namespace cpaas-system. Развертывание ресурсов в других namespace может привести к проблемам интеграции.
Именование workload cluster
cluster-name для workload не должен быть global. Это имя зарезервировано для кластера global, и его повторное использование приводит к конфликту ресурсов workload cluster с ресурсами кластера global в cpaas-system. Префикс global- зарезервирован для ресурсов, которыми владеет DR workflow кластера global; см. Common Prerequisites. Не используйте global- для ресурсов workload cluster, поскольку операции failover могут выбрать эти ресурсы так, как будто они принадлежат кластеру global.
По соглашению, присваивайте ресурсам CAPI Cluster и ресурсу кластера provider (DCSCluster) точное имя <cluster-name>, а не-root ресурсам CAPI и provider (KubeadmControlPlane, KubeadmConfigTemplate, MachineDeployment, machine templates, IP/hostname pools и т. д.) — префикс <cluster-name>-; например, в приведенных ниже manifests используются <cluster-name>-kcp. Это рекомендация, а не правило, enforced controller, но она предотвращает конфликты в пределах одного namespace при размещении нескольких workload cluster в cpaas-system и делает владение ресурсами очевидным при выполнении операций.
Сценарий настройки
Выполняйте следующие шаги по порядку, чтобы подготовить функциональный кластер (control plane и worker-узлы):
- Настройте
KubeadmControlPlane(спецификация control plane и kubeadm bootstrap). - Настройте
DCSCluster(привязка инфраструктуры и ссылка на load balancer). - Создайте ресурс
Cluster(верхнеуровневый объект CAPI, связывающий два предыдущих). - Настройте worker-ресурсы:
KubeadmConfigTemplate(worker bootstrap), workerDCSMachineTemplate, workerDCSIpHostnamePoolиMachineDeployment. Только control plane не является полноценным рабочим кластером. См. Managing Nodes on Huawei DCS для четырех YAML-ресурсов worker.
Примечание: инфраструктурные ресурсы (Secret, control-plane DCSIpHostnamePool, control-plane DCSMachineTemplate) следует настраивать отдельно. Инструкции см. в Infrastructure Resources for Huawei DCS.
Если какой-либо диск должен сохраняться при rolling replacement, укажите его в соответствующей записи DCSIpHostnamePool.spec.pool[].persistentDisk. Это относится и к требуемому платформой диску /var/cpaas. Provider создает новые persistent volumes как независимые persistent normal volumes. Когда в среде DCS требуется явная настройка thin-provisioning, задайте persistentDisk[].isThin; если опустить это поле, provider не отправит isThin, и DCS будет использовать значение по умолчанию платформы.
Если кластеру нужны дополнительные NIC, укажите их в DCSIpHostnamePool.spec.pool[].additionNic[] до создания соответствующих Machines. Provider применяет дополнительные NIC только при создании новой VM. Уже существующие VM не получают hot-added NIC после последующего изменения Pool.
Разрешение значений-заполнителей
В примерах manifests ниже используется синтаксис <placeholder> для значений, зависящих от среды. У нескольких из них есть канонический источник истины, который следует запрашивать, а не подставлять вручную:
Заменители Magic Token
Некоторые значения в примерах manifests выглядят как заполнители, но на самом деле являются буквальными токенами, подставляемыми DCS Provider во время присоединения машины к кластеру. Оставляйте их ровно в том виде, в каком они написаны:
Ручная замена или заключение этих токенов в кавычки нарушает процесс join и приводит к тому, что узлы так и не регистрируются в control plane.
Планирование сети и Load Balancer
Перед созданием ресурсов control plane спланируйте сетевую архитектуру и разверните load balancer для обеспечения высокой доступности.
Требования:
- Сегментация сети: спланируйте диапазоны IP-адресов для узлов control plane
- Дополнительные NIC: если узлам требуются storage-, management- или изолированные application-сети, спланируйте значения
DCSIpHostnamePool.spec.pool[].additionNic[]для каждого IP slot, включая имена DVS и Port Group - Load balancer: разверните и настройте доступ к API server
- Адрес API server: подготовьте стабильный VIP или адрес load balancer для Kubernetes API Server
- Подключение: убедитесь в сетевой связности между всеми компонентами
Настройка KubeadmControlPlane
Ресурс KubeadmControlPlane определяет конфигурацию control plane, включая версию Kubernetes, спецификации узлов и параметры bootstrap.
Полная справка по конфигурации
В приведенном ниже примере длинные конфигурационные файлы сокращены для удобства чтения. Для полной конфигурации (включая политики аудита по умолчанию, admission controls и содержимое файлов) см. Complete KubeadmControlPlane Configuration в Appendix.
Описание параметров:
Для версий компонентов (например, <dns-image-tag>, <etcd-image-tag>) см. OS Support Matrix.
Настройка DCSCluster
DCSCluster — это объявление инфраструктурного кластера, которое ссылается на load balancer и учетные данные платформы DCS.
Описание параметров:
controlPlaneHA является необязательным. При включении provider создает и поддерживает одно правило взаимного исключения DRS ruleType=2 для текущих VM control plane в этом workload cluster. Фактическое размещение и runtime migration выполняет DCS. Provider не запускает DRS и не применяет рекомендации DRS. Если правило поддерживается, но размещение не стабилизировалось, дождитесь механизма планирования DCS или запустите/apply DRS со стороны платформы DCS. Предварительные требования к инфраструктуре см. в разделе Cross-Host High Availability for Control Plane.
Single-Control-Plane (No External LB) Layout
Для development, PoC или любого развертывания, где у control plane только одна replica (KubeadmControlPlane.spec.replicas: 1), у вас нет настоящего load balancer перед API server. Тем не менее, двум полям все равно нужно задать значение:
.spec.controlPlaneLoadBalancer.hostи.spec.controlPlaneEndpoint.host— задайте оба в качестве IP единственного master-узла (того же IP, который выделен master-узлу вDCSIpHostnamePoolдля control plane)..spec.controlPlaneLoadBalancer.type— оставьте значениеexternal(для этого поля не поддерживается другое значение).
Конкретно:
У этой схемы нет HA — потеря единственного master делает API кластера недоступным до восстановления master. Для production используйте replicas: 3 с настоящим load balancer.
Настройка Cluster
Ресурс Cluster объявляет кластер и ссылается на ресурсы control plane и инфраструктуры.
Описание параметров:
Аннотации Cluster:
В примере выше показаны три аннотации, но полный ресурс Cluster содержит еще несколько. В таблице ниже перечислены аннотации, которые задают авторы operator (некоторые другие записываются ACP controllers, и заранее задавать их не следует):
ACP controllers могут записывать дополнительные аннотации только для чтения (cpaas.io/cpu-cores-number, cpaas.io/memories, cpaas.io/nodes-number и т. п.) после запуска кластера — они вычисляются автоматически и не должны быть заранее заданы в применяемом YAML.
Развертывание узлов
Инструкции по развертыванию worker-узлов см. в разделе Managing Nodes on Huawei DCS.
Проверка кластера
После развертывания всех ресурсов кластера убедитесь, что кластер успешно создан и функционирует.
Использование Console
- Перейдите в Clusters → Clusters
- Найдите недавно созданный кластер в списке кластеров
- Убедитесь, что состояние кластера отображается как Running
- Проверьте, что все узлы control plane и worker находятся в состоянии Ready
Использование kubectl
В качестве альтернативы проверьте кластер с помощью команд kubectl:
Для кластеров, использующих дополнительные NIC, также проверьте, что provider записал их в соответствующие объекты DCSMachine:
Проверка HA control plane
Если вы включили DCSCluster.spec.controlPlaneHA.enabled, сначала проверьте condition DCSCluster:
Интерпретируйте condition следующим образом:
Проверьте наблюдаемое состояние правила и снимок membership:
Список members[] содержит имя CAPI Machine и DCS VM URN для каждой VM control plane в правиле. Текущий снимок состояния DCS не включает имя DCS host. Если вам нужно подтвердить точное размещение на host, запросите сведения о VM на платформе DCS или через DCS API и сравните значения hostName или hostUrn у VM.
Ожидаемые результаты
Успешно созданный кластер должен показывать:
- состояние кластера: Running или Provisioned
- все машины control plane: Running
- все worker-узлы (если развернуты): Running
- узлы Kubernetes: Ready
- Cluster Module Status: Completed
- для multi-NIC кластеров каждая созданная VM имеет ожидаемые дополнительные NIC в
DCSMachine.status.additionalNic, а гостевая ОС показывает соответствующие интерфейсыethN.
Приложение
Полная конфигурация KubeadmControlPlane
Ниже приведена полная конфигурация KubeadmControlPlane, включая все политики аудита по умолчанию, admission controls и содержимое файлов.
Альтернатива: используйте централизованно управляемый Secret вместо встроенного содержимого
Плагин Alauda Container Platform DCS Infrastructure Provider поставляет Secret с именем dcs-kubernetes-<kubernetes-major-minor>-files в namespace cpaas-system (например, dcs-kubernetes-1.33-files для Kubernetes 1.33). Он содержит каноническое содержимое psa-config.yaml, control-plane-kubelet-patch.json и audit-policy.yaml, и обновляется вместе с каждым релизом.
Если этот Secret присутствует, вы можете заменить три встроенные записи files ссылками contentFrom.secret. Встроенная форма и форма со ссылкой на Secret функционально эквивалентны; использование Secret позволяет синхронизировать содержимое файлов с установленной версией плагина и избежать ручных обновлений при upgrade кластера.
encryption-provider.conf не предоставляется Secret. Вы можете либо оставить его встроенным, как показано выше (и указать собственный <base64-encoded-secret>), либо полностью исключить встроенный файл и использовать версию, уже включенную в образ VM template DCS — оба варианта допустимы; второй проще, когда значение ключа по умолчанию в VM template подходит для вашей среды.
Минимальная версия плагина: этот Secret поставляется плагином DCS Provider начиная с v1.0.13. В более старых версиях плагина Secret отсутствует; в этом случае оставляйте встроенную форму content:. Чтобы проверить, присутствует ли Secret в целевом кластере, прежде чем выбирать формат:
Следующие шаги
После создания кластера:
Устранение неполадок
Если кластер достигает состояния Provisioned, но так и не становится Ready — например, worker-узлы остаются в состоянии NotReady, потому что CNI не развернут — см. Troubleshoot a Workload Cluster Stuck in Provisioned.