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

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

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

    WARNING

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

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

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

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

    Обзор

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

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

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

    Шаг 1: Настройка пула IP-имён хостов

    Пул IP-имён хостов определяет сетевую конфигурацию для виртуальных машин рабочих узлов. Необходимо спланировать и настроить 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-адрес виртуальной машины рабочего узлаДа
    .spec.pool[].maskstringМаска подсетиДа
    .spec.pool[].gatewaystringIP-адрес шлюзаДа
    .spec.pool[].dnsstringIP-адреса DNS-серверов (через запятую для нескольких)Нет
    .spec.pool[].machineNamestringИмя виртуальной машины на платформе DCSНет
    .spec.pool[].hostnamestringИмя хоста виртуальной машиныНет

    Шаг 2: Настройка шаблона машины

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

    WARNING

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

    • Системный том (systemVolume: true)
    • /var/lib/kubelet — каталог данных kubelet
    • /var/lib/containerd — данные контейнерного рантайма
    • /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: # Необязательно, если не указано, используются значения по умолчанию шаблона
            type: cluster # cluster | host. Необязательно
            name: <cluster-name> # Необязательно
          vmConfig:
            dvSwitchName: <dv-switch-name> # Необязательно
            portGroupName: <port-group-name> # Необязательно
            dcsMachineCpuSpec:
              quantity: <worker-cpu>
            dcsMachineMemorySpec: # МБ
              quantity: <worker-memory>
            dcsMachineDiskSpec: # ГБ
            - 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: 100
              datastoreClusterName: <datastore-cluster-name>
              path: /var/cpaas
              format: xfs
          ipHostPoolRef:
            name: <worker-iphostname-pool-name>

    Основные параметры:

    ПараметрТипОписаниеОбязательный
    .spec.template.spec.vmTemplateNamestringИмя шаблона виртуальной машины DCSДа
    .spec.template.spec.locationobjectМестоположение создания ВМ (автовыбор, если не указано)Нет
    .spec.template.spec.location.typestringТип местоположения (в настоящее время поддерживается только "folder")Да*
    .spec.template.spec.location.namestringИмя папки для создания ВМДа*
    .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Имя порт-группы (должна принадлежать указанному коммутатору)Нет
    .spec.template.spec.vmConfig.dcsMachineCpuSpec.quantityintКоличество ядер CPU для ВМ рабочего узлаДа
    .spec.template.spec.vmConfig.dcsMachineMemorySpec.quantityintРазмер памяти в МБДа
    .spec.template.spec.vmConfig.dcsMachineDiskSpec[]objectМассив конфигураций дисковДа
    .spec.template.spec.vmConfig.dcsMachineDiskSpec[].quantityintРазмер диска в ГБ (0 для системного диска — используется размер шаблона)Да
    .spec.template.spec.vmConfig.dcsMachineDiskSpec[].datastoreClusterNamestringИмя кластера хранилищаДа
    .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

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

    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: Настройка развертывания машин

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

    Пример:

    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)Да
    .spec.template.spec.bootstrap.configRefobjectСсылка на KubeadmConfigTemplateДа
    .spec.template.spec.infrastructureRefobjectСсылка на DCSMachineTemplateДа
    .spec.template.spec.versionstringВерсия Kubernetes (должна соответствовать шаблону ВМ)Да
    .spec.strategy.rollingUpdate.maxSurgeintМаксимальное количество узлов сверх желаемого при обновленииНет
    .spec.strategy.rollingUpdate.maxUnavailableintМаксимальное количество недоступных узлов при обновленииНет

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

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

    INFO

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

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

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

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

    Увеличьте количество рабочих узлов для обработки возросшей нагрузки или добавления новой ёмкости.

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

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

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

    Процедура:

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

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

      # Список всех машин в кластере
      kubectl get machines -n cpaas-system
      
      # Список машин для конкретного MachineDeployment
      kubectl get machines -n cpaas-system -l cluster.x-k8s.io/deployment-name=<worker-machine-deployment-name>
    2. Расширьте пул IP

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

      INFO

      Расширение пула IP Пул IP должен содержать не менее записей, чем желаемое количество реплик. Добавьте новые 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 узлов

      # Текущий пул содержит 3 записи (10.0.1.11, 10.0.1.12, 10.0.1.13)
      # Добавляем 2 записи для узлов 4 и 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

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

      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. Отслеживайте процесс масштабирования

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

      # Отслеживание создания машин
      kubectl get machines -n cpaas-system -w
      
      # Проверка статуса MachineDeployment
      kubectl get machinedeployment <worker-machine-deployment-name> -n cpaas-system

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

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

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

      # Переключение на контекст целевого кластера
      kubectl config use-context <target-cluster-context>
      
      # Проверка, что все узлы в статусе Ready
      kubectl get nodes

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

    INFO

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

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

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

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

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

    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 выполнит:

      • Дрейн выбранных узлов (эвакуация подов, если возможно)
      • Удаление ВМ с платформы DCS
      • Удаление ресурсов машин
    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

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

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

    Для обновления спецификаций рабочих машин (CPU, память, диск, шаблон ВМ) выполните следующие шаги:

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

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

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

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

    Обновление шаблонов Bootstrap

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

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

    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, чтобы ссылаться на новый шаблон
      • Примените изменения для запуска поэтапного обновления
    INFO

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

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

    Обновление версии Kubernetes требует согласованных изменений как в MachineDeployment, так и в базовом шаблоне ВМ для обеспечения совместимости.

    WARNING

    Совместимость версий Убедитесь, что версия Kubernetes в шаблоне ВМ совпадает с версией, указанной в MachineDeployment. Несовпадение версий приведёт к ошибкам при присоединении узлов.

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

    1. Обновите шаблон машины

      • Создайте новый DCSMachineTemplate с обновлённым vmTemplateName, поддерживающим целевую версию Kubernetes
      • Убедитесь, что шаблон ВМ содержит правильные бинарники и зависимости Kubernetes
    2. Обновите MachineDeployment

      • Измените ресурс MachineDeployment следующим образом:
        • Обновите spec.template.spec.version до целевой версии Kubernetes
        • Обновите spec.template.spec.infrastructureRef.name для ссылки на новый шаблон машины
        • При необходимости обновите spec.template.spec.bootstrap.configRef.name для изменений в bootstrap-конфигурации
    3. Отслеживайте обновление

      • Система выполнит поэтапное обновление рабочих узлов
      • Проверьте, что новые узлы присоединяются к кластеру с правильной версией Kubernetes
      • Следите за состоянием кластера в процессе обновления