Ещё

Заменить операционную систему на узлах

Шаблоном ВМ определяется операционная система узлов кластера. При необходимости перейти на другую ОС или изменить версию ОС потребуется подготовить новый шаблон с ОС и той же версией Kubernetes, а после замените в конфигурации группы узлов шаблон ВМ.

Рекомендуется использовать одну ОС в рамках кластера.

Изменение версии Kubernetes на узлах выполняется по аналогии, см. подробнее на странице Узлы и шаблоны ВМ.

Инструкция применима в кластерах с провайдерами, работающими с шаблонами ВМ:

  • oVirt и подобные среды: zVirt, HostVM, РЕД Виртуализация, ROSA Virtualization;
  • VMware vSphere;
  • OpenStack и подобные облака;
  • Basis Dynamix;
  • VMware vCloud Director;
  • Yandex Cloud.

В гибридном кластере шаблон ВМ потребуется заменить в группах основного провайдера с виртуальными машинами. Шаблон ВМ необходимо отдельно заменить в каждой Control Plane и Worker группах узлов, которые должны получить новую ОС.

При изменении шаблона ВМ Cluster API пересоздаёт узлы группы согласно установленной стратегии восстановления RollingUpdate или OnDelete в конфигурации групп. Подробнее Конфигурация Cluster API.

Если узел с новым шаблоном ВМ не перешёл в состояние Ready, не удаляйте его. Сначала замените шаблон ВМ в конфигурации группы и проверьте запрошенное количество реплик.

Шаг 1. Подготовить шаблон в виртуализации

  1. Выберите ОС из списка поддерживаемых операционных систем узлов кластера. При необходимости вы можете подготовить шаблон ВМ с ОС вне протестированного списка. В этом случае успешное развёртывание кластера и корректность конфигурации шаблона не гарантируются.
  2. Создайте ВМ и подготовьте из неё шаблон ВМ по пошаговому процессу создания шаблона с новой ОС.

Версию Kubernetes в новом шаблоне оставьте той же. Соответствие версии платформы и Kubernetes приведено в таблице.

Шаг 2. Добавить шаблон в экземпляр провайдера

Добавьте новый шаблон ВМ в экземпляре провайдера, на котором создан кластер.

  1. Откройте вкладку Платформа. В блоке Провайдеры инфраструктуры нажмите Управлять.

    Скриншот: вкладка «Платформа», переход к провайдерам

    Вкладка Платформа: карточка Провайдеры инфраструктуры и ссылка Управлять

  2. Откройте экземпляр провайдера кластера.

    Скриншот: конфигурация провайдера

    Конфигурация провайдера, блок шаблонов виртуальных машин

  3. В блоке Шаблоны виртуальных машин нажмите + и выберите подготовленный шаблон ВМ с новой ОС.

    Скриншот: добавление шаблона ВМ и версии Kubernetes

    Добавление шаблона ВМ с версией Kubernetes

  4. Сохраните экземпляр.

Шаг 3. Заменить шаблон в группах узлов

Выполните шаг в GUI или CLI для каждой группы, которую нужно перевести на новую ОС.

  1. В кластере откройте Администрирование → Управление узлами.

    Скриншот: управление узлами

    Страница управления узлами со списком групп

  2. Справа от названия группы нажмите на Конфигурация группы и перейдите на вкладку InfraMachineTemplate.

    Скриншот: вкладка InfraMachineTemplate

    Вкладка InfraMachineTemplate в конфигурации группы

  3. В поле Шаблон ВМ выберите подготовленный шаблон ВМ, который добавили в экземпляр провайдера на шаге 2.

    Скриншот: поле «Шаблон ВМ»

    Поле Шаблон ВМ на вкладке InfraMachineTemplate

  4. Сохраните изменения в конфигурации группы.

После сохранения изменений будет создан новый InfraMachineTemplate. Перейдите в раздел Администрирование → Управление узлами, чтобы отследить обновление ОС на узлах группы. Дождитесь, пока число узлов группы в состоянии Ready снова совпадёт с запрошенным количеством реплик в конфигурации. В конфигурации группы на вкладке InfraMachineTemplate в поле Шаблон ВМ должен быть указан новый шаблон. В манифесте группы поле infrastructureRef.name равно имени нового InfraMachineTemplate.

Команды выполняются в кластере управления. Неймспейс совпадает с именем клиентского кластера: в нём лежат объекты группы узлов.

Создайте новый InfraMachineTemplate как копию существующего шаблона группы с другим именем и новым шаблоном ВМ. В MachineDeployment и KubeadmControlPlane замените InfraMachineTemplate.

InfraMachineTemplate

Имя и kind InfraMachineTemplate заданы в infrastructureRef. Kind зависит от провайдера. Поля каждого kind собраны в справочнике InfraMachineTemplate.

ПровайдерKind
VMware vSphereVSphereMachineTemplate
oVirt и подобныеOVirtMachineTemplate
OpenStackOpenStackMachineTemplate
Basis DynamixBasisMachineTemplate
VMware vCloud DirectorVCDMachineTemplate
Yandex CloudYandexMachineTemplate

Получите InfraMachineTemplate для Worker-групп из ресурса MachineDeployment, для группы Control Plane — из ресурса KubeadmControlPlane, как приведено далее:

kubectl -n <имя-кластера> get MachineDeployment
kubectl -n <имя-кластера> get MachineDeployment <имя-группы> -o jsonpath='{.spec.template.spec.infrastructureRef}{"\n"}'
kubectl -n <имя-кластера> get KubeadmControlPlane <имя-кластера>-control-plane -o jsonpath='{.spec.machineTemplate.infrastructureRef}{"\n"}'

Новый InfraMachineTemplate

  1. Сохраните существующий InfraMachineTemplate в файл. Пример для VMware vSphere:

    kubectl -n <имя-кластера> get VSphereMachineTemplate <имя-InfraMachineTemplate> -o yaml > inframachinetemplate.yaml
    
  2. В файле задайте новое metadata.name, которого ещё нет в этом неймспейсе. namespace оставьте прежним. Метки metadata.labels сохраните, если они есть.

  3. Удалите из файла служебные поля uid, resourceVersion, generation, creationTimestamp, managedFields и весь блок status. В spec.template.spec.template замените только имя шаблона ВМ. Имя должно совпадать с именем в виртуализации и с именем, которое вы указали в экземпляре провайдера.

    Фрагмент файла после исправления для VMware vSphere:

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: VSphereMachineTemplate
    metadata:
      name: <имя-нового-inframachinetemplate>
      namespace: <имя-кластера>
    spec:
      template:
        spec:
          # datacenter, datastore, diskGiB, memoryMiB, numCPUs, networkName и остальные поля — из текущего шаблона группы
          template: <имя-шаблона-вм-в-виртуализации>
    
  4. Примените в кластере новый InfraMachineTemplate.

    kubectl apply -f inframachinetemplate.yaml
    

Добавить шаблон в MachineDeployment и KubeadmControlPlane

kubectl -n <имя-кластера> patch MachineDeployment <имя-группы> --type=merge -p '{"spec":{"template":{"spec":{"infrastructureRef":{"name":"<имя-нового-inframachinetemplate>"}}}}}'

Проверьте:

kubectl -n <имя-кластера> get MachineDeployment <имя-группы> -o jsonpath='{.spec.template.spec.infrastructureRef.name}{"\n"}'
kubectl -n <имя-кластера> patch KubeadmControlPlane <имя-кластера>-control-plane --type=merge -p '{"spec":{"machineTemplate":{"infrastructureRef":{"name":"<имя-нового-inframachinetemplate>"}}}}'

Проверьте:

kubectl -n <имя-кластера> get KubeadmControlPlane <имя-кластера>-control-plane -o jsonpath='{.spec.machineTemplate.infrastructureRef.name}{"\n"}'

После изменения InfraMachineTemplate Cluster API запустит пересоздание узлов группы.

Отследить пересоздание узлов Worker-группы:

kubectl -n <имя-кластера> get MachineDeployment <имя-группы> -o custom-columns=REPLICAS:.spec.replicas,READY:.status.readyReplicas,UPDATED:.status.updatedReplicas

Отследить пересоздание узлов группы Control Plane:

kubectl -n <имя-кластера> get KubeadmControlPlane <имя-кластера>-control-plane -o custom-columns=REPLICAS:.spec.replicas,READY:.status.readyReplicas,UPDATED:.status.updatedReplicas