• Русский
  • Управление узлами на Huawei DCS

    В этом документе объясняется, как управлять рабочими узлами с помощью ресурсов Cluster API Machine.

    Предварительные требования

    WARNING

    Важные предварительные требования

    • Перед выполнением операций с узлами необходимо развернуть control plane. См. Create Cluster для инструкций по настройке.
    • Убедитесь, что у вас есть надлежащий доступ к платформе DCS и необходимые разрешения.
    INFO

    Рекомендации по конфигурации При работе с конфигурациями в этом документе:

    • Изменяйте только значения, заключенные в скобки <>
    • Заменяйте значения-заполнители настройками, соответствующими вашей среде
    • Сохраняйте все остальные конфигурации по умолчанию, если иное явно не требуется

    Обзор

    Рабочие узлы управляются через ресурсы Cluster API Machine, что обеспечивает декларативное и автоматизированное управление жизненным циклом узлов. Процесс развертывания включает:

    1. Конфигурация IP-Hostname Pool - сетевые настройки для рабочих узлов
    2. Настройка шаблона Machine - спецификации VM
    3. Bootstrap-конфигурация - инициализация узла и настройки присоединения
    4. Развертывание Machine - оркестрация создания и управления узлами

    Развертывание рабочих узлов

    Шаг 1. Настройте IP-Hostname Pool

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

    WARNING

    Требование к размеру пула Пул должен содержать не меньше записей, чем количество рабочих узлов, которое вы планируете развернуть. Недостаточное число записей не позволит выполнить развертывание узлов.

    Пример:

    Создайте DCSIpHostnamePool с именем <worker-iphostname-pool-name>:

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: DCSIpHostnamePool
    metadata:
      name: <worker-iphostname-pool-name>
      namespace: cpaas-system
    spec:
      pool:
      - ip: "<worker-ip-1>"
        mask: "<worker-mask>"
        gateway: "<worker-gateway>"
        dns: "<worker-dns>"
        hostname: "<worker-hostname-1>"
        machineName: "<worker-machine-name-1>"
      - ip: "<worker-ip-2>"
        mask: "<worker-mask>"
        gateway: "<worker-gateway>"
        dns: "<worker-dns>"
        hostname: "<worker-hostname-2>"
        machineName: "<worker-machine-name-2>"
      - ip: "<worker-ip-3>"
        mask: "<worker-mask>"
        gateway: "<worker-gateway>"
        dns: "<worker-dns>"
        hostname: "<worker-hostname-3>"
        machineName: "<worker-machine-name-3>"

    Ключевые параметры:

    ПараметрТипОписаниеОбязательно
    .spec.pool[].ipstringIP-адрес для worker virtual machineДа
    .spec.pool[].maskstringМаска подсети для сетиДа
    .spec.pool[].gatewaystringIP-адрес шлюзаДа
    .spec.pool[].dnsstringIP-адреса DNS-серверов (для нескольких значений через запятую)Нет
    .spec.pool[].machineNamestringИмя виртуальной машины на платформе DCSНет
    .spec.pool[].hostnamestringИмя хоста для виртуальной машиныНет

    Шаг 2. Настройте Machine Template

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

    WARNING

    Требуемые конфигурации дисков Следующие точки монтирования дисков обязательны. Не удаляйте их:

    • Системный том (systemVolume: true)
    • /var/lib/kubelet - каталог данных Kubelet
    • /var/lib/containerd - данные контейнерного runtime
    • /var/cpaas - данные, специфичные для платформы

    Можно добавлять дополнительные диски, но эти обязательные конфигурации должны быть сохранены.

    Пример:

    Создайте DCSMachineTemplate с именем <worker-dcs-machine-template-name>:

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: DCSMachineTemplate
    metadata:
      name: <worker-dcs-machine-template-name>
      namespace: cpaas-system
    spec:
      template:
        spec:
          vmTemplateName: <vm-template-name>
          location:
            type: folder
            name: <folder-name>
          resource: # Optional, if not specified, uses template defaults
            type: cluster # cluster | host. Optional
            name: <cluster-name> # Optional
          vmConfig:
            dvSwitchName: <dv-switch-name> # Optional
            portGroupName: <port-group-name> # Optional
            dcsMachineCpuSpec:
              quantity: <worker-cpu>
            dcsMachineMemorySpec: # MB
              quantity: <worker-memory>
            dcsMachineDiskSpec: # GB
            - quantity: 0
              datastoreClusterName: <datastore-cluster-name>
              systemVolume: true
            - quantity: 100
              datastoreClusterName: <datastore-cluster-name>
              path: /var/lib/kubelet
              format: xfs
            - quantity: 100
              datastoreClusterName: <datastore-cluster-name>
              path: /var/lib/containerd
              format: xfs
            - quantity: 40
              datastoreClusterName: <datastore-cluster-name>
              path: /var/cpaas
              format: xfs
          ipHostPoolRef:
            name: <worker-iphostname-pool-name>

    Ключевые параметры:

    ПараметрТипОписаниеОбязательно
    .spec.template.spec.vmTemplateNamestringИмя шаблона виртуальной машины DCSДа
    .spec.template.spec.locationobjectМестоположение создания VM (если не указано, выбирается автоматически)Нет
    .spec.template.spec.location.typestringТип расположения (в настоящее время поддерживается только "folder")Да*
    .spec.template.spec.location.namestringИмя папки для создания VMДа*
    .spec.template.spec.resourceobjectВыбор вычислительного ресурса (если не указано, выбирается автоматически)Нет
    .spec.template.spec.resource.typestringТип ресурса: cluster или hostДа*
    .spec.template.spec.resource.namestringИмя вычислительного ресурсаДа*
    .spec.template.spec.vmConfigobjectКонфигурация виртуальной машиныДа
    .spec.template.spec.vmConfig.dvSwitchNamestringИмя виртуального коммутатора (если не указано, используется значение по умолчанию шаблона)Нет
    .spec.template.spec.vmConfig.portGroupNamestringИмя port group (должно принадлежать указанному switch)Нет
    .spec.template.spec.vmConfig.dcsMachineCpuSpec.quantityintКоличество CPU cores для worker VMДа
    .spec.template.spec.vmConfig.dcsMachineMemorySpec.quantityintРазмер памяти в MBДа
    .spec.template.spec.vmConfig.dcsMachineDiskSpec[]objectМассив конфигурации дисковДа
    .spec.template.spec.vmConfig.dcsMachineDiskSpec[].quantityintРазмер диска в GB (0 для системного диска использует размер шаблона)Да
    .spec.template.spec.vmConfig.dcsMachineDiskSpec[].datastoreClusterNamestringИмя datastore clusterДа
    .spec.template.spec.vmConfig.dcsMachineDiskSpec[].systemVolumeboolФлаг системного диска (true может быть только у одного диска)Нет
    .spec.template.spec.vmConfig.dcsMachineDiskSpec[].pathstringТочка монтирования (если не указана, диск не монтируется)Нет
    .spec.template.spec.vmConfig.dcsMachineDiskSpec[].formatstringФормат файловой системы (например, xfs, ext4)Нет
    .spec.template.spec.ipHostPoolRef.namestringИмя ссылочного DCSIpHostnamePoolДа

    *Обязательно, если указанный родительский объект существует

    Шаг 3. Настройте Bootstrap Template

    KubeadmConfigTemplate определяет bootstrap-конфигурацию для рабочих узлов, включая учетные записи пользователей, SSH-ключи, системные файлы и параметры kubeadm join.

    INFO

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

    Пример:

    apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
    kind: KubeadmConfigTemplate
    metadata:
      name: <worker-kubeadm-config-template>
      namespace: cpaas-system
    spec:
      template:
        spec:
          format: ignition
          users:
          - name: boot
            sshAuthorizedKeys:
            - "<ssh-authorized-keys>"
          files:
          - path: /etc/kubernetes/patches/kubeletconfiguration0+strategic.json
            owner: "root:root"
            permissions: "0644"
            content: |
              {
                "apiVersion": "kubelet.config.k8s.io/v1beta1",
                "kind": "KubeletConfiguration",
                "protectKernelDefaults": true,
                "staticPodPath": null,
                "tlsCertFile": "/etc/kubernetes/pki/kubelet.crt",
                "tlsPrivateKeyFile": "/etc/kubernetes/pki/kubelet.key",
                "streamingConnectionIdleTimeout": "5m",
                "clientCAFile": "/etc/kubernetes/pki/ca.crt"
              }
          preKubeadmCommands:
          - while ! ip route | grep -q "default via"; do sleep 1; done; echo "NetworkManager started"
          - mkdir -p /run/cluster-api && restorecon -Rv /run/cluster-api
          - if [ -f /etc/disk-setup.sh ]; then bash /etc/disk-setup.sh; fi
          postKubeadmCommands:
          - chmod 600 /var/lib/kubelet/config.yaml
          joinConfiguration:
            patches:
              directory: /etc/kubernetes/patches
            nodeRegistration:
              kubeletExtraArgs:
                provider-id: PROVIDER_ID
                volume-plugin-dir: "/opt/libexec/kubernetes/kubelet-plugins/volume/exec/"

    Шаг 4. Настройте Machine Deployment

    MachineDeployment координирует создание и управление рабочими узлами, используя ранее настроенные ресурсы DCSMachineTemplate и KubeadmConfigTemplate. Он управляет требуемым количеством узлов и выполняет rolling updates.

    Пример:

    apiVersion: cluster.x-k8s.io/v1beta1
    kind: MachineDeployment
    metadata:
      name: <worker-machine-deployment-name>
      namespace: cpaas-system
    spec:
      strategy:
        rollingUpdate:
          maxSurge: 0
          maxUnavailable: 1
        type: RollingUpdate
      clusterName: <cluster-name>
      replicas: 3
      selector:
        matchLabels: null
      template:
        spec:
          nodeDrainTimeout: 1m
          nodeDeletionTimeout: 5m
          bootstrap:
            configRef:
              apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
              kind: KubeadmConfigTemplate
              name: <worker-kubeadm-config-template-name>
              namespace: cpaas-system
          clusterName: <cluster-name>
          infrastructureRef:
            apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
            kind: DCSMachineTemplate
            name: <worker-dcs-machine-template-name>
            namespace: cpaas-system
          version: <worker-kubernetes-version>

    Ключевые параметры:

    ПараметрТипОписаниеОбязательно
    .spec.clusterNamestringИмя целевого кластера для развертывания узловДа
    .spec.replicasintКоличество рабочих узлов (не должно превышать размер IP pool)Да
    .spec.template.spec.bootstrap.configRefobjectСсылка на KubeadmConfigTemplateДа
    .spec.template.spec.infrastructureRefobjectСсылка на DCSMachineTemplateДа
    .spec.template.spec.versionstringВерсия Kubernetes (должна соответствовать шаблону VM)Да
    .spec.strategy.rollingUpdate.maxSurgeintМаксимальное число узлов сверх требуемого во время обновленияНет
    .spec.strategy.rollingUpdate.maxUnavailableintМаксимальное число недоступных узлов во время обновленияНет

    Операции управления узлами

    В этом разделе описаны распространенные операционные задачи по управлению рабочими узлами, включая масштабирование, обновления, upgrade и изменение шаблонов.

    INFO

    Фреймворк Cluster API Операции управления узлами основаны на фреймворке Cluster API. Для подробной информации см. официальную документацию Cluster API.

    Масштабирование рабочих узлов

    Масштабирование рабочих узлов позволяет изменять емкость кластера в зависимости от нагрузки. Cluster API автоматически управляет жизненным циклом узлов через ресурс MachineDeployment.

    Добавление рабочих узлов

    Увеличьте число рабочих узлов, чтобы обработать возросшую нагрузку или добавить новую емкость.

    Сценарий использования: Масштабирование кластера вверх для добавления вычислительных ресурсов

    Предварительные требования:

    • Проверьте, что в IP pool достаточно свободных IP-адресов для новых узлов
    • Убедитесь, что на платформе DCS достаточно ресурсов для выделения новых VM

    Процедура:

    1. Проверьте текущее состояние узлов

      Просмотрите текущие машины в кластере:

      # List all machines in the cluster
      kubectl get machines -n cpaas-system
      
      # List machines for a specific MachineDeployment
      kubectl get machines -n cpaas-system -l cluster.x-k8s.io/deployment-name=<worker-machine-deployment-name>
    2. Расширьте IP pool

      Перед масштабированием вверх добавьте в пул новые IP-конфигурации для дополнительных узлов.

      INFO

      Расширение IP pool IP pool должен содержать не меньше записей, чем желаемое число реплик. Добавьте новые IP-записи для каждого дополнительного рабочего узла, который вы планируете развернуть.

      Добавьте IP-записи в пул:

      Сначала экспортируйте текущую конфигурацию пула, чтобы сохранить существующие записи:

      kubectl get dcsiphostnamepool <worker-iphostname-pool-name> -n cpaas-system -o yaml

      Затем используйте следующую команду, чтобы добавить новые IP-конфигурации. Массив pool должен включать все существующие записи плюс новые записи:

      kubectl patch dcsiphostnamepool <worker-iphostname-pool-name> -n cpaas-system \
        --type='merge' -p='
      {
        "spec": {
          "pool": [
            {
              "ip": "<existing-ip-1>",
              "mask": "<worker-mask>",
              "gateway": "<worker-gateway>",
              "dns": "<worker-dns>",
              "hostname": "<existing-hostname-1>",
              "machineName": "<existing-machine-name-1>"
            },
            {
              "ip": "<existing-ip-2>",
              "mask": "<worker-mask>",
              "gateway": "<worker-gateway>",
              "dns": "<worker-dns>",
              "hostname": "<existing-hostname-2>",
              "machineName": "<existing-machine-name-2>"
            },
            {
              "ip": "<new-worker-ip-1>",
              "mask": "<worker-mask>",
              "gateway": "<worker-gateway>",
              "dns": "<worker-dns>",
              "hostname": "<new-worker-hostname-1>",
              "machineName": "<new-worker-machine-name-1>"
            },
            {
              "ip": "<new-worker-ip-2>",
              "mask": "<worker-mask>",
              "gateway": "<worker-gateway>",
              "dns": "<worker-dns>",
              "hostname": "<new-worker-hostname-2>",
              "machineName": "<new-worker-machine-name-2>"
            }
          ]
        }'
      WARNING

      Важные замечания

      • Массив pool должен включать все существующие записи плюс новые записи, которые вы хотите добавить
      • Скопируйте существующие записи из экспортированного YAML, чтобы избежать потери данных
      • Убедитесь, что каждая новая запись имеет уникальные значения ip, hostname и machineName
      • Сетевые параметры (mask, gateway, dns) обычно совпадают с существующими записями

      Пример: добавление 2 новых узлов в существующий пул из 3 узлов

      # Current pool has 3 entries (10.0.1.11, 10.0.1.12, 10.0.1.13)
      # Adding 2 more entries for nodes 4 and 5
      kubectl patch dcsiphostnamepool worker-pool-1-ippool -n cpaas-system \
        --type='merge' -p='
      {
        "spec": {
          "pool": [
            {
              "ip": "10.0.1.11",
              "mask": "255.255.255.0",
              "gateway": "10.0.1.1",
              "dns": "10.0.0.2",
              "hostname": "worker-node-1",
              "machineName": "worker-vm-1"
            },
            {
              "ip": "10.0.1.12",
              "mask": "255.255.255.0",
              "gateway": "10.0.1.1",
              "dns": "10.0.0.2",
              "hostname": "worker-node-2",
              "machineName": "worker-vm-2"
            },
            {
              "ip": "10.0.1.13",
              "mask": "255.255.255.0",
              "gateway": "10.0.1.1",
              "dns": "10.0.0.2",
              "hostname": "worker-node-3",
              "machineName": "worker-vm-3"
            },
            {
              "ip": "10.0.1.14",
              "mask": "255.255.255.0",
              "gateway": "10.0.1.1",
              "dns": "10.0.0.2",
              "hostname": "worker-node-4",
              "machineName": "worker-vm-4"
            },
            {
              "ip": "10.0.1.15",
              "mask": "255.255.255.0",
              "gateway": "10.0.1.1",
              "dns": "10.0.0.2",
              "hostname": "worker-node-5",
              "machineName": "worker-vm-5"
            }
          ]
        }'
    3. Проверьте емкость IP pool

      После расширения IP pool проверьте, что в нем достаточно записей для желаемого числа реплик:

      kubectl get dcsiphostnamepool -n cpaas-system <worker-iphostname-pool-name> -o yaml

      Убедитесь, что пул содержит не меньше записей, чем желаемое число реплик.

    4. Масштабируйте MachineDeployment вверх

      Обновите поле replicas до желаемого числа узлов:

      kubectl patch machinedeployment <worker-machine-deployment-name> -n cpaas-system \
        --type='json' -p='[{"op": "replace", "path": "/spec/replicas", "value": <new-replica-count>}]'

      Пример: масштабирование с 3 до 5 узлов

      kubectl patch machinedeployment worker-pool-1 -n cpaas-system \
        --type='json' -p='[{"op": "replace", "path": "/spec/replicas", "value": 5}]'
    5. Отслеживайте процесс масштабирования

      Наблюдайте за процессом создания машин:

      # Watch machines being created
      kubectl get machines -n cpaas-system -w
      
      # Check MachineDeployment status
      kubectl get machinedeployment <worker-machine-deployment-name> -n cpaas-system

      Контроллер Cluster API автоматически создаст новые машины на основе шаблона MachineDeployment.

    6. Проверьте, что узлы присоединились к кластеру

      Переключитесь на контекст целевого кластера и проверьте новые узлы:

      # Switch to target cluster context
      kubectl config use-context <target-cluster-context>
      
      # Check all nodes are Ready
      kubectl get nodes

      Новые узлы должны появиться в списке и перейти в состояние Ready.

    INFO

    Поведение rolling update При масштабировании вверх новые узлы создаются немедленно и не затрагивают существующие узлы. Это обеспечивает масштабирование без простоя.

    Удаление рабочих узлов

    Уменьшите число рабочих узлов, чтобы сократить емкость кластера или удалить недостаточно используемые ресурсы. Cluster API поддерживает две стратегии удаления:

    1. Случайное удаление: при уменьшении числа реплик платформа случайным образом выбирает и удаляет машины
    2. Целевое удаление: помечаете конкретные машины для удаления, затем уменьшаете число реплик (рекомендуется для восстановления IP)
    INFO

    Сценарий восстановления IP Когда требуется повторно использовать IP-адреса конкретных машин (например, для переназначения или управления IP pool), используйте метод целевого удаления. Аннотация удаления гарантирует, что платформа удалит именно помеченные машины, а не случайные.

    WARNING

    Предупреждение о потере данных При уменьшении масштаба удаляются узлы и связанные с ними диски. Убедитесь, что:

    • Рабочие нагрузки устойчивы к потере узлов благодаря корректной репликации
    • На удаляемых узлах не хранится критически важные данные
    • Приложения спроектированы для горизонтального масштабирования
    Случайное удаление

    Сценарий использования: уменьшение кластера, когда можно удалить любой узел (нет специфических требований к IP)

    Процедура:

    1. Определите текущее состояние машин

      Просмотрите текущие машины в MachineDeployment:

      kubectl get machines -n cpaas-system -l cluster.x-k8s.io/deployment-name=<worker-machine-deployment-name>
    2. Масштабируйте MachineDeployment вниз

      Обновите поле replicas, чтобы уменьшить число узлов:

      kubectl patch machinedeployment <worker-machine-deployment-name> -n cpaas-system \
        --type='json' -p='[{"op": "replace", "path": "/spec/replicas", "value": <new-replica-count>}]'

      Пример: масштабирование с 5 до 3 узлов

      kubectl patch machinedeployment worker-pool-1 -n cpaas-system \
        --type='json' -p='[{"op": "replace", "path": "/spec/replicas", "value": 3}]'

      Контроллер Cluster API случайным образом выберет и удалит машины, чтобы привести число к желаемому количеству реплик.

    3. Отслеживайте процесс удаления

      Наблюдайте за процессом удаления машин:

      kubectl get machines -n cpaas-system -w

      Контроллер Cluster API:

      • Выполнит drain выбранных узлов (по возможности evict pods)
      • Удалит базовые VM на платформе DCS
      • Удалит ресурсы machine
    4. Проверьте, что узлы удалены

      Переключитесь на контекст целевого кластера:

      kubectl config use-context <target-cluster-context>
      kubectl get nodes

      Удаленные узлы больше не должны отображаться в списке.

    Целевое удаление

    Сценарий использования: удалить конкретные машины (например, для восстановления IP, замены неисправных узлов)

    Процедура:

    1. Определите машины для удаления

      Просмотрите текущие машины:

      kubectl get machines -n cpaas-system -l cluster.x-k8s.io/deployment-name=<worker-machine-deployment-name>

      Запишите <machine-name> машин, которые требуется удалить.

    2. Добавьте аннотацию удаления для машин

      Пометьте конкретные машины для удаления:

      kubectl patch machine <machine-name> -n cpaas-system \
        --type='merge' -p='{"metadata": {"annotations": {"cluster.x-k8s.io/delete-machine": "true"}}}'

      Повторите для каждой машины, которую нужно удалить.

      Пример: удалить две конкретные машины

      kubectl patch machine worker-pool-1-abc123 -n cpaas-system \
        --type='merge' -p='{"metadata": {"annotations": {"cluster.x-k8s.io/delete-machine": "true"}}}'
      
      kubectl patch machine worker-pool-1-def456 -n cpaas-system \
        --type='merge' -p='{"metadata": {"annotations": {"cluster.x-k8s.io/delete-machine": "true"}}}'
    3. Масштабируйте MachineDeployment вниз

      После добавления аннотаций уменьшите число реплик:

      INFO

      Число реплик должно соответствовать количеству помеченных машин Уменьшите число реплик ровно на количество помеченных машин.

      • Если уменьшить меньше, удалятся не все помеченные машины
      • Если уменьшить больше, дополнительные машины будут выбраны случайным образом для удаления
      kubectl patch machinedeployment <worker-machine-deployment-name> -n cpaas-system \
        --type='json' -p='[{"op": "replace", "path": "/spec/replicas", "value": <new-replica-count>}]'

      Пример: если вы пометили 2 машины, уменьшите число реплик ровно на 2 (например, с 5 до 3)

      Платформа удалит помеченные машины, а не выбранные случайным образом.

    4. Отслеживайте процесс удаления

      Наблюдайте за процессом удаления машин:

      kubectl get machines -n cpaas-system -w
    5. Проверьте, что узлы удалены

      Переключитесь на контекст целевого кластера:

      kubectl config use-context <target-cluster-context>
      kubectl get nodes

      Удаленные узлы больше не должны отображаться в списке.

    Обновление инфраструктуры Machine

    Чтобы обновить спецификации worker machine (CPU, память, диск, VM template), выполните следующие шаги:

    1. Создайте новый шаблон Machine

      • Скопируйте существующий DCSMachineTemplate, на который ссылается ваш MachineDeployment
      • Измените необходимые значения (CPU, память, диск, VM template и т. д.)
      • Дайте новому шаблону уникальное имя
      • Примените новый DCSMachineTemplate к кластеру
    2. Обновите Machine Deployment

      • Измените ресурс MachineDeployment
      • Обновите поле spec.template.spec.infrastructureRef.name, чтобы оно указывало на новый шаблон
      • Примените изменения
    3. Rolling update

      • Система автоматически запустит rolling update
      • Рабочие узлы будут заменены на новые, с обновленными спецификациями
      • Отслеживайте ход обновления через статус MachineDeployment

    Обновление Bootstrap Templates

    Bootstrap templates (KubeadmConfigTemplate) используются ресурсами MachineDeployment и MachineSet. Изменения существующих шаблонов не запускают автоматический rollout существующих машин; только новые машины используют обновленный шаблон.

    Процесс обновления:

    1. Экспортируйте существующий шаблон

      kubectl get KubeadmConfigTemplate <template-name> -o yaml > new-template.yaml
    2. Измените конфигурацию

      • Обновите нужные поля в экспортированном YAML
      • Измените metadata.name на новое уникальное имя
      • Удалите лишние поля метаданных (resourceVersion, uid, creationTimestamp и т. д.)
    3. Создайте новый шаблон

      kubectl apply -f new-template.yaml
    4. Обновите MachineDeployment

      • Измените ресурс MachineDeployment
      • Обновите spec.template.spec.bootstrap.configRef.name, чтобы он ссылался на новый шаблон
      • Примените изменения, чтобы запустить rolling update
    INFO

    Поведение rollout шаблона Существующие машины продолжают использовать старую bootstrap-конфигурацию. Только вновь созданные машины (во время масштабирования или rolling updates) будут использовать обновленный шаблон.

    Обновление версии Kubernetes

    Для обновления Kubernetes на Huawei DCS см. Upgrading Kubernetes on Huawei DCS. Это руководство описывает требуемый порядок обновления, workflow на YAML для ресурсов MachineDeployment и workflow в web UI для обновления Node Pool.


    Управление Node Pools через Web UI

    Node pools предоставляют декларативный способ управления группами узлов с идентичными конфигурациями. Вы можете просматривать, добавлять и удалять worker node pools через web UI.

    Требование к версии: Этот workflow требует Fleet Essentials и Alauda Container Platform DCS Infrastructure Provider 1.0.13 или более поздней версии. Если версия provider ниже 1.0.13, используйте описанные в этом документе workflow управления node pool через YAML.

    INFO

    Навигация: Clusters → Clusters → Select cluster → Node Pools Tab

    Просмотр Node Pools

    Node Pools Tab отображает все node pools в кластере:

    Node Pool control plane:

    • Фиксирован на 3 репликах для обеспечения высокой доступности
    • Отображает версию Kubernetes с индикатором обновления, если он доступен
    • Показывает ссылку Conditions для подробного статуса

    Worker Node Pools:

    • Настраиваемое число реплик
    • Индивидуальное управление версией Kubernetes
    • Операции масштабирования и обновления

    Информация на карточке Node Pool:

    ПолеОписание
    TypeControl Plane / Worker Node
    NameИмя ресурса
    StatusBadge, показывающий состояние пула
    ReplicasТекущее количество (для worker — с Max Surge/Max Unavailable)
    SSH Authorized KeysСписок SSH public keys
    Kubernetes VersionТекущая версия (если доступен индикатор обновления)
    Machine TemplateИмя связанного шаблона
    ConditionsСсылка на список conditions (только для Control Plane)

    Добавление worker node pool

    Навигация: Node Pools Tab → Нажмите Add Worker Node Pool

    Поля формы:

    ПолеТипОбязательноОписание
    Pool NametextДаУникальный идентификатор node pool
    Machine TemplatedropdownДаФильтрация по Type: Worker Node и совместимой версии Kubernetes
    ReplicasnumberДаКоличество узлов в пуле
    Max SurgenumberНетЗначение по умолчанию: 0, должно быть ≥ 0
    Max UnavailablenumberНетЗначение по умолчанию: 1, должно быть ≥ 0. Когда maxSurge = 0, должно быть > 0 и ≤ Replicas
    SSH Authorized KeystextНетДобавление нескольких SSH public keys

    Проверки:

    • Имя пула должно быть уникальным в пределах кластера
    • В IP Pool должно быть достаточно свободных IP-адресов (≥ Replicas)
    • Должны соблюдаться ограничения maxSurge/maxUnavailable

    Совет: Чтобы избежать конфликтов имен, добавляйте к имени пула имя кластера, разделенное дефисом (например, mycluster-worker-1).

    После создания новые узлы появятся во вкладке Nodes. Количество узлов будет равно заданному значению Replicas.

    Удаление worker node pool

    Шаги:

    1. Нажмите значок удаления на карточке Worker Node Pool
    2. Подтвердите удаление в диалоговом окне
    WARNING

    Удаление worker node pool навсегда удаляет все связанные узлы и машины. Убедитесь, что рабочие нагрузки могут выдержать потерю этих узлов благодаря корректной репликации.

    Просмотр Conditions (только Control Plane)

    Нажмите ссылку Conditions на карточке Control Plane Node Pool, чтобы просмотреть подробную информацию о статусе.

    Список Conditions:

    TypeStatusLast Transition TimeReasonMessage
    Condition TypeStatusTimestampReasonHuman-readable details

    Следующие шаги