Управление узлами в Huawei DCS
В этом документе описано, как управлять рабочими узлами с помощью ресурсов Cluster API Machine.
Содержание
Предварительные требованияОбзорРазвертывание рабочих узловШаг 1: Настройка пула IP-адресов и hostnameШаг 2: Настройка шаблона MachineПостоянные диски, управляемые пулом IPДополнительные NIC, управляемые пулом IPШаг 3: Настройка Bootstrap TemplateШаг 4: Настройка Machine DeploymentОперации управления узламиМасштабирование рабочих узловДобавление рабочих узловУдаление рабочих узловОбновление инфраструктуры MachineОбновление bootstrap templatesОбновление версии KubernetesУправление node pool через Web UIПросмотр node poolДобавление Worker Node PoolУдаление Worker Node PoolПросмотр Conditions (только control plane)Устранение неполадокНовый workerMachine остается в состоянии Provisioning, а VM DCS — в состоянии creatingСледующие шагиПредварительные требования
Важные предварительные требования
- Перед выполнением операций с узлами должен быть развернут control plane. Инструкции по настройке см. в разделе Create Cluster.
- Убедитесь, что у вас есть надлежащий доступ к платформе DCS и необходимые разрешения.
Рекомендации по конфигурации При работе с конфигурациями в этом документе:
- Изменяйте только значения, заключенные в скобки
<> - Заменяйте значения-заполнители настройками, специфичными для вашей среды
- Сохраняйте все остальные значения конфигурации по умолчанию, если иное явно не требуется
Обзор
Рабочие узлы управляются через ресурсы Cluster API Machine, обеспечивая декларативное и автоматизированное управление жизненным циклом узлов. Процесс развертывания включает:
- Настройка пула IP-адресов и hostname — сетевые параметры для рабочих узлов
- Настройка шаблона Machine — параметры виртуальной машины
- Настройка bootstrap — параметры инициализации узла и подключения к кластеру
- Развертывание Machine — оркестрация создания и управления узлами
Развертывание рабочих узлов
Шаг 1: Настройка пула IP-адресов и hostname
Пул IP-адресов и hostname определяет сетевую конфигурацию для виртуальных машин рабочих узлов. Перед развертыванием необходимо спланировать и настроить IP-адреса, hostname, DNS-серверы, дополнительные NIC и другие сетевые параметры.
В Huawei DCS пул IP-адресов также используется для объявления постоянных дисков, которые должны сохраняться при замене виртуальной машины. Используйте persistentDisk для диска /var/cpaas, требуемого платформой, а также для любого другого диска рабочего узла, который должен сохраняться при операциях удаления и повторного создания. Для этого сценария требуется DCS provider v1.0.16 или более поздней версии.
Требование к размеру пула Пул должен содержать как минимум столько записей, сколько рабочих узлов вы планируете развернуть. Недостаточное количество записей не позволит развернуть узлы.
Пример:
Создайте DCSIpHostnamePool с именем <cluster-name>-worker-pool:
Ключевые параметры:
*Поля, помеченные как Да*, требуются провайдеру для определения целевой сети и подключения дополнительного NIC. Поля, помеченные как Рекомендуется*, необходимы для сгенерированной статической гостевой сетевой конфигурации. CRD не требует эти поля.
Шаг 2: Настройка шаблона Machine
DCSMachineTemplate определяет параметры виртуальных машин рабочих узлов, включая шаблоны VM, вычислительные ресурсы, конфигурацию хранилища и сетевые параметры.
Поля в этом ресурсе ссылаются на несколько понятий платформы Huawei DCS (DCS VM Template, DCS VM Folder, DCS Datastore и связанные элементы). Описание этих понятий и того, как они сопоставляются с ресурсами Cluster API, см. в разделе Huawei DCS Concepts and Terminology.
Обязательные конфигурации дисков Следующие точки монтирования дисков обязательны. Не удаляйте их:
- Системный том (
systemVolume: true) /var/lib/kubelet— каталог данных Kubelet/var/lib/containerd— данные контейнерного runtime
Настраивайте /var/cpaas в пуле IP как постоянный диск, а не в DCSMachineTemplate.
Вы можете добавлять дополнительные диски шаблона, но эти основные диски шаблона должны быть сохранены.
Пример:
Создайте DCSMachineTemplate с именем <cluster-name>-worker-template:
Ключевые параметры:
*Обязательно, когда указан родительский объект
Постоянные диски, управляемые пулом IP
Объявляйте любой диск, который должен сохраняться при обновлении, в соответствующей записи DCSIpHostnamePool.spec.pool[].persistentDisk (DCS provider v1.0.16 или более поздней версии).
- Используйте это для
/var/cpaas, который требуется платформой. - Оставьте
DCSMachineTemplateдля системного диска и локальных дисков шаблона, которые могут быть пересозданы вместе с VM. - Для каждой записи IP выбирайте уникальное значение
slot. Контроллер использует(ip, slot)как идентификатор постоянного диска. - На заменяемых узлах логика настройки диска гостевой ОС проверяет наличие существующей файловой системы. Если диск уже отформатирован,
mkfsпропускается, и диск монтируется напрямую. - Сценарии с постоянными дисками требуют замены по одному узлу, поэтому установите
MachineDeployment.spec.strategy.rollingUpdate.maxSurge = 0. - Вы можете добавлять новые записи
persistentDisk, но удаление существующих записей не поддерживается. Контроллер подключает новый добавленный диск к работающей VM на стороне DCS, но не форматирует и не монтирует диск внутри гостевой ОС. Форматирование и монтирование в гостевой системе вступают в силу только после замены VM, когда replacement VM выполняет сгенерированную настройку диска во время bootstrap. - Контроллер создает новые постоянные тома как независимые persistent normal volumes. При повторном использовании существующего тома требуется только, чтобы он был независимым и постоянным; конкретный тип тома DCS не требуется.
- Рассматривайте
format,optionsиpciTypeкак неизменяемые после создания. - Используйте
isThinтолько тогда, когда среде DCS требуется явное значение thin-provisioning для вновь создаваемых постоянных томов. Если поле не указано, провайдер не отправляетisThin, и DCS использует значение по умолчанию платформы. - Рассматривайте изменения
quantityGBи datastore как изменения, влияющие на rolling update. Webhook выполняет best-effort валидацию на стороне платформы DCS, когда имеет достаточно контекста кластера.isThin— это значение только для создания: его изменение не вызывает валидацию, reconcile или преобразование существующих томов и влияет только на постоянные тома, созданные позже.
Чтобы проверить состояние постоянных дисков во время операций с узлами, просмотрите status.persistentDiskStatus в пуле:
Дополнительные NIC, управляемые пулом IP
Объявляйте дополнительные NIC рабочих узлов в DCSIpHostnamePool.spec.pool[].additionNic[].
- Провайдер применяет
additionNic[]только при создании новой VM. - Существующие рабочие VM не обновляются на лету при изменении Pool.
- Новые
Machineрабочих узлов используют значенияadditionNic[]из того слота Pool, который они занимают. - Каждый дополнительный NIC должен включать и
dvSwitchName, иportGroupName, чтобы провайдер мог определить целевой DCS Port Group до клонирования VM. - Если вы также используете
persistentDisk[], установитеMachineDeployment.spec.strategy.rollingUpdate.maxSurge = 0, чтобы фиксированные слоты IP и сохраненные диски перемещались по одному узлу за раз. - Если у дополнительного NIC указан gateway, проверьте, что таблица маршрутов гостевой ОС по-прежнему использует нужную основную сеть для маршрута по умолчанию.
Чтобы проверить состояние дополнительных NIC во время выполнения, просмотрите DCSMachine.status.additionalNic:
Шаг 3: Настройка Bootstrap Template
KubeadmConfigTemplate определяет bootstrap-конфигурацию для рабочих узлов, включая учетные записи пользователей, SSH-ключи, системные файлы и настройки kubeadm join.
Оптимизация шаблона Шаблон содержит предварительно оптимизированные настройки для безопасности и производительности. Изменяйте только те параметры, которые требуется адаптировать под вашу среду.
Пример:
PROVIDER_ID и NODE_IP — это буквальные magic tokens, которые DCS Provider подставляет во время подключения машины к кластеру — оставляйте их точно в том виде, как они написаны. Полный список см. в Magic-Token Placeholders.
Альтернатива: используйте централизованно управляемый Secret для патча worker kubelet
Плагин DCS Provider поставляет Secret с именем dcs-kubernetes-<kubernetes-major-minor>-files в пространстве имен cpaas-system (например, dcs-kubernetes-1.33-files для Kubernetes 1.33). Помимо файлов control plane, которые он предоставляет для KubeadmControlPlane (см. приложение в разделе create-cluster), этот Secret также содержит ключ worker-kubelet-patch.json, подходящий для worker KubeadmConfigTemplate. Когда этот Secret доступен, вы можете заменить встроенную запись files, показанную выше, ссылкой contentFrom.secret — это позволяет синхронизировать патч worker kubelet с установленной версией плагина и избежать ручных обновлений при апгрейде кластера.
Встроенная форма и форма со ссылкой на Secret функционально эквивалентны; форма с Secret является рекомендуемым вариантом, когда Secret плагина доступен в целевом кластере.
Минимальная версия плагина: как и в подсказке в приложении для control plane, worker-kubelet-patch.json входит в Secret dcs-kubernetes-1.33-files, поставляемый начиная с DCS Provider v1.0.13. В более старых версиях плагина этот Secret отсутствует; в таком случае оставьте встроенную форму content:.
Шаг 4: Настройка Machine Deployment
MachineDeployment оркестрирует создание и управление рабочими узлами, ссылаясь на ранее настроенные ресурсы DCSMachineTemplate и KubeadmConfigTemplate. Он управляет требуемым количеством узлов и обрабатывает rolling updates.
Пример:
Ключевые параметры:
Операции управления узлами
В этом разделе описаны распространенные операционные задачи по управлению рабочими узлами, включая масштабирование, обновления, апгрейды и изменения шаблонов.
Cluster API Framework Операции управления узлами основаны на framework Cluster API. Подробную информацию см. в официальной документации Cluster API.
Масштабирование рабочих узлов
Масштабирование рабочих узлов позволяет адаптировать емкость кластера к требованиям нагрузки. Cluster API автоматически управляет жизненным циклом узлов через ресурс MachineDeployment.
Добавление рабочих узлов
Увеличьте количество рабочих узлов, чтобы обработать возросшую нагрузку или добавить новую емкость.
Сценарий использования: увеличение кластера для добавления вычислительных ресурсов
Предварительные условия:
- Убедитесь, что в пуле IP-адресов достаточно свободных IP-адресов для новых узлов
- Убедитесь, что на платформе DCS достаточно ресурсов для подготовки новых VM
Порядок действий:
-
Проверьте текущее состояние узлов
Просмотрите текущие машины в кластере:
-
Расширьте пул IP
Перед увеличением количества узлов добавьте в пул новые конфигурации IP для дополнительных узлов.
INFOРасширение пула IP Пул IP должен содержать как минимум столько записей, сколько требуется replicas. Добавьте новые записи IP для каждого дополнительного рабочего узла, который планируете развернуть.
Добавьте записи IP в пул:
Сначала экспортируйте текущую конфигурацию пула, чтобы сохранить существующие записи:
Затем используйте следующую команду, чтобы добавить новые конфигурации IP. Массив
poolдолжен включать все существующие записи плюс новые записи:WARNINGВажные замечания
- Массив
poolдолжен включать все существующие записи плюс новые записи, которые вы хотите добавить - Скопируйте существующие записи из экспортированного YAML, чтобы избежать потери данных
kubectl patch --type='merge'заменяет весь массивspec.pool, поэтому скопируйте каждый существующий блокpersistentDiskбез изменений, включаяisThin, если он присутствует, если только вы не добавляете новые диски намеренно- Убедитесь, что каждая новая запись имеет уникальные значения
ip,hostnameиmachineName - Если новым рабочим узлам также требуется диск
/var/cpaas, обязательный для платформы, объявите его вpersistentDiskкаждой новой записи - Параметры сети (
mask,gateway,dns) обычно совпадают с существующими записями
Пример: добавление 2 новых узлов к существующему пулу из 3 узлов
- Массив
-
Проверьте емкость пула IP
После расширения пула IP убедитесь, что он содержит достаточно записей для требуемого числа replicas:
Убедитесь, что пул содержит как минимум столько записей, сколько соответствует требуемому числу replicas.
-
Увеличьте число replicas в MachineDeployment
Измените поле
replicasна требуемое количество узлов:Пример: увеличение с 3 до 5 узлов
-
Отслеживайте ход масштабирования
Наблюдайте за процессом создания машин:
Контроллер Cluster API автоматически создаст новые машины на основе шаблона
MachineDeployment. -
Проверьте, что узлы присоединились к кластеру
Переключитесь на контекст целевого кластера и проверьте новые узлы:
Новые узлы должны появиться в списке и перейти в состояние
Ready.
Поведение rolling update При масштабировании вверх новые узлы создаются немедленно, не затрагивая существующие узлы. Это обеспечивает масштабирование без простоя.
Удаление рабочих узлов
Уменьшите количество рабочих узлов, чтобы сократить емкость кластера или удалить неиспользуемые ресурсы. Cluster API поддерживает две стратегии удаления:
- Случайное удаление: уменьшите replicas, платформа случайным образом выбирает и удаляет машины
- Целевое удаление: пометьте конкретные машины для удаления, затем уменьшите replicas (рекомендуется для восстановления IP)
Сценарий восстановления IP Когда требуется повторно использовать конкретные IP машин (например, для переназначения или управления пулом IP), используйте метод целевого удаления. Аннотация удаления гарантирует, что платформа удалит именно помеченные машины, а не случайные.
Предупреждение о потере данных При уменьшении числа узлов удаляются узлы и связанные с ними VM. Убедитесь, что:
- Нагрузки могут пережить потерю узла благодаря правильной репликации
- На удаляемых узлах не хранится только критически важные данные
- Приложения рассчитаны на горизонтальное масштабирование
Объявленные постоянные диски в DCSIpHostnamePool.spec.pool[].persistentDisk не удаляются только потому, что Machine был заменен. Они остаются доступными для повторного использования, пока соответствующий слот IP остается в пуле. Удаление слота IP из пула, удаление пула или удаление кластера может инициировать очистку persistent volume.
Случайное удаление
Сценарий использования: уменьшение кластера, когда можно удалить любой узел (нет требований к конкретному IP)
Порядок действий:
-
Определите текущее состояние машин
Просмотрите текущие машины в
MachineDeployment: -
Уменьшите число replicas в MachineDeployment
Измените поле
replicas, чтобы сократить количество узлов:Пример: уменьшение с 5 до 3 узлов
Контроллер Cluster API случайным образом выберет и удалит машины так, чтобы число соответствовало требуемому количеству replicas.
-
Отслеживайте ход удаления
Наблюдайте за процессом удаления машин:
Контроллер Cluster API выполнит:
- Drain выбранных узлов (эвакуация pods, если это возможно)
- Удаление underlying VM с платформы DCS
- Удаление ресурсов machine
-
Проверьте, что узлы удалены
Переключитесь на контекст целевого кластера:
Удаленные узлы больше не должны отображаться в списке.
Целевое удаление
Сценарий использования: удалить конкретные машины (например, для восстановления IP, замены неисправных узлов)
Порядок действий:
-
Определите машины для удаления
Просмотрите текущие машины:
Запомните
<machine-name>машин, которые необходимо удалить. -
Добавьте аннотацию удаления для машин
Пометьте конкретные машины для удаления:
Повторите для каждой машины, которую нужно удалить.
Пример: удаление двух конкретных машин
-
Уменьшите число replicas в MachineDeployment
После аннотирования машин уменьшите количество replicas:
INFOКоличество replicas должно соответствовать числу аннотированных машин Уменьшите replicas ровно на количество аннотированных машин.
- Если уменьшить меньше, будут удалены не все аннотированные машины
- Если уменьшить больше, дополнительные машины будут выбраны для удаления случайным образом
Пример: если вы аннотировали 2 машины, уменьшите replicas ровно на 2 (например, с 5 до 3)
Платформа удалит аннотированные машины, а не выбранные случайным образом.
-
Отслеживайте ход удаления
Наблюдайте за процессом удаления машин:
-
Проверьте, что узлы удалены
Переключитесь на контекст целевого кластера:
Удаленные узлы больше не должны отображаться в списке.
Обновление инфраструктуры Machine
Чтобы обновить параметры рабочих машин (CPU, memory, disk, VM template), выполните следующие шаги:
-
Создайте новый шаблон Machine
- Скопируйте существующий
DCSMachineTemplate, на который ссылается вашMachineDeployment - Измените необходимые значения (CPU, memory, disk, VM template и т. д.)
- Дайте новому шаблону уникальное имя
- Примените новый
DCSMachineTemplateк кластеру
- Скопируйте существующий
-
Обновите Machine Deployment
- Измените ресурс
MachineDeployment - Обновите поле
spec.template.spec.infrastructureRef.name, чтобы оно ссылалось на новый шаблон - Примените изменения
- Измените ресурс
-
Rolling update
- Система автоматически запустит rolling update
- Рабочие узлы будут заменены с новыми параметрами
- Любые диски, объявленные в
DCSIpHostnamePool.spec.pool[].persistentDisk, будут отсоединены от старой VM и повторно подключены к replacement VM - Отслеживайте ход обновления через status
MachineDeployment
Если вы переносите существующий кластер со старой схемы template-disk на управляемые пулом постоянные диски, сначала выполните Migrate Existing Huawei DCS Clusters to Pool-Managed Persistent Disks, прежде чем полагаться на сохранение данных во время обновления.
Обновление bootstrap templates
Bootstrap templates (KubeadmConfigTemplate) используются ресурсами MachineDeployment и MachineSet. Изменения существующих шаблонов не запускают автоматический rollout существующих машин; только новые машины используют обновленный шаблон.
Процесс обновления:
-
Экспортируйте существующий шаблон
-
Измените конфигурацию
- Обновите нужные поля в экспортированном YAML
- Измените
metadata.nameна новое уникальное имя - Удалите лишние поля metadata (
resourceVersion,uid,creationTimestampи т. д.)
-
Создайте новый шаблон
-
Обновите MachineDeployment
- Измените ресурс MachineDeployment
- Обновите
spec.template.spec.bootstrap.configRef.name, чтобы он ссылался на новый шаблон - Примените изменения, чтобы запустить rolling update
Поведение rollout шаблона Существующие машины продолжают использовать старую bootstrap-конфигурацию. Только вновь созданные машины (во время масштабирования или rolling update) будут использовать обновленный шаблон.
Обновление версии Kubernetes
Для обновления Kubernetes в Huawei DCS см. Upgrading Kubernetes on Huawei DCS. В этом руководстве описаны требуемый порядок обновления, YAML-процесс для ресурсов MachineDeployment, а также workflow через web UI для обновления Node Pool.
Управление node pool через Web UI
Fleet Essentials UI не поддерживает обновления кластеров ACP 4.3
Workflow Fleet Essentials UI не был адаптирован к механизму Cluster Version Operator (CVO), представленному в ACP 4.3. Не используйте Fleet Essentials UI для обновления кластеров DCS на ACP 4.3.
Две поддерживаемые альтернативы:
- Путь YAML — следуйте процедуре обновления на основе YAML в Upgrading Kubernetes on Huawei DCS.
- Интерфейс управления кластерами ACP Core — используйте двухэтапный workflow обновления, встроенный в платформу ACP Core; см. Request the upgrade for the global cluster или Request the upgrade for workload clusters.
Добавление, удаление и просмотр node pool через Fleet Essentials UI этим ограничением не затрагиваются.
Node pool предоставляют декларативный способ управления группами узлов с идентичной конфигурацией. Через web UI можно просматривать, добавлять и удалять рабочие node pool.
Требование к версии: этот workflow требует Fleet Essentials и Alauda Container Platform DCS Infrastructure Provider версии 1.0.13 или более поздней. Если версия провайдера ниже 1.0.13, используйте описанные в этом документе YAML-based workflows для node pool. Если workflow node pool опирается на постоянные диски, управляемые пулом, используйте DCS provider v1.0.16 или более поздней версии. В v1.0.16 объявление persistentDisk в DCSIpHostnamePool остается доступным только в YAML и не отображается в UI node pool.
Если node pool использует постоянные диски, управляемые пулом, подготовьте или обновите соответствующую запись DCSIpHostnamePool с помощью YAML до использования workflow web UI, описанного здесь.
Навигация: Clusters → Clusters → Выберите кластер → вкладка Node Pools
Просмотр node pool
Вкладка Node Pools отображает все node pool в кластере:
Node Pool control plane:
- Фиксированное количество 3 replicas для высокой доступности
- Отображает версию Kubernetes с индикатором обновления, если он доступен
- Показывает ссылку Conditions для подробного статуса
Worker Node Pool:
- Настраиваемое количество replicas
- Независимое управление версией Kubernetes
- Операции масштабирования и обновления
Информация на карточке node pool:
Добавление Worker Node Pool
Навигация: вкладка Node Pools → нажмите Add Worker Node Pool
Поля формы:
Проверка:
- Имя pool должно быть уникальным в пределах кластера
- В пуле IP должно быть достаточно доступных IP-адресов (≥ Replicas)
- Должны быть соблюдены ограничения maxSurge/maxUnavailable
- Если node pool использует постоянные диски, установите
maxSurge = 0, чтобыMachineзаменялись по одному
Подсказка: добавьте к имени pool префикс с именем кластера и дефисом (например, mycluster-worker-1), чтобы избежать конфликтов имен.
После создания новые узлы появятся на вкладке Nodes. Количество узлов будет равно настроенному значению Replicas.
Удаление Worker Node Pool
Шаги:
- Нажмите значок удаления на карточке Worker Node Pool
- Подтвердите удаление в диалоговом окне
Удаление Worker Node Pool навсегда удаляет все связанные узлы и машины. Убедитесь, что workloads могут пережить потерю этих узлов благодаря правильной репликации.
Просмотр Conditions (только control plane)
Нажмите ссылку Conditions на карточке Control Plane Node Pool, чтобы просмотреть подробную информацию о статусе.
Список conditions:
Устранение неполадок
Новый worker Machine остается в состоянии Provisioning, а VM DCS — в состоянии creating
Диагностический процесс одинаков для объектов Machine control plane и worker — если DCSMachine достигает состояния Provisioning, при этом status.cdRomFile уже установлен (аутентификация DCS API и загрузка ISO выполнены), но underlying VM DCS так и не назначается на host, ошибка находится на стороне платформы DCS, а не контроллера.
Полное дерево диагностики см. в разделе Infrastructure → Troubleshooting: VM stuck in creating, где описаны:
- Проверка того, что проблема связана с зависанием размещения, а не с медленной загрузкой.
- Проверка свободного места в datastore.
- Проверка загрузки CPU / memory на host и коэффициентов overcommit.
- Координация с командой платформы DCS для перераспределения нагрузки, когда один DCS Host перегружен.
- Путь эскалации, когда задача развертывания действительно заблокирована.
Для обеспечения высокой доступности control plane на нескольких физических host см. Infrastructure → Cross-Host High Availability for Control Plane.
Та же диагностика применяется независимо от того, является ли зависший узел первым узлом control plane нового кластера, новым worker, добавленным через масштабирование MachineDeployment, или replacement worker, созданным во время rolling update.