Обновление кластеров на VMware vSphere
В этом документе объясняется, как выполнять обновление кластеров Kubernetes на VMware vSphere после завершения обновления дистрибутива на стороне платформы. Описанный рабочий процесс сосредоточен на обновлении плоскости управления и рабочих узлов через ресурсы Cluster API.
Как эта страница вписывается в полный процесс обновления ACP
На этой странице рассматривается только шаг обновления Kubernetes. Полный процесс обновления ACP — включая синхронизацию артефактов обновления, обновление ACP Core через CVO, обновления плагинов Aligned и обновления плагинов Agnostic из Marketplace — описан в документации по продукту ACP. Выполните эти шаги до начала шага обновления Kubernetes на этой странице:
- Обзор обновления (область действия и последовательность)
- Подготовка перед обновлением
- Обновление глобального кластера (Core, Aligned, Agnostic)
- Обновление рабочих кластеров (Core, Aligned, Agnostic)
Используйте эту страницу, когда тот же кластер работает на неизменяемой операционной системе, поскольку шаг Kubernetes на immutable OS заменяет узлы из нового шаблона VM, а не обновляет бинарные файлы на месте.
Содержание
Порядок обновленияПредварительные требованияНеобходимые значения из матрицы поддержки ОСШагиОткат неудачного обновленияПроверкаСледующие шагиПорядок обновления
Обновляйте кластеры VMware vSphere в следующем порядке:
- (Предварительное условие) Сначала обновите платформу ACP на управляющем кластере. Это обновит контроллер
cluster-api-provider-vsphereи связанные компоненты CAPI до версий, которые понимают новую схему. Запускайте обновления рабочих кластеров только после того, как контроллеры на стороне управления развернутся и перейдут в состояние Ready. - Завершите обновление версии дистрибутива, описанное в Обновление кластеров.
- Убедитесь, что плоскость управления здорова, а текущий кластер стабилен.
- Обновите версию Kubernetes плоскости управления.
- Обновите рабочие узлы до целевой версии Kubernetes.
Предварительные требования
Перед началом убедитесь, что выполнены следующие условия:
- Обновление версии дистрибутива завершено.
- Плоскость управления здорова и доступна.
- Все узлы находятся в состоянии
Ready. - Целевой шаблон VM присутствует в среде vSphere под тем же именем, что и значение Alauda OS Image Version в строке матрицы поддержки ОС. Обновление завершится с ошибкой, если шаблон отсутствует в момент применения нового
VSphereMachineTemplate. - Для межверсионных обновлений, охватывающих более одного minor-уровня Kubernetes, промежуточные образы Core и шаблоны VM предварительно подготовлены. См. Подготовка к межверсионному обновлению.
- Целевая версия Kubernetes совместима с вашими рабочими нагрузками и дополнениями.
- Пулы конфигурации машин располагают достаточной емкостью для поэтапных обновлений.
- Изучите путь обновления Kubernetes и политику version skew.
Модель сохранения дисков
Обновления используют механизм поэтапной замены Cluster API. У каждого кластера есть четыре класса дисков; только класс, управляемый пулом, сохраняется при удалении и повторном создании.
«Сохраняется» означает, что повторно присоединяется тот же идентификатор диска — это не означает, что содержимое диска переносится во времени. Все, что записано на диск, управляемый пулом, в течение окна обновления, сохранится после обновления и после отката.
Шаблоны нельзя изменять на месте
VSphereMachineTemplate.spec.template.spec неизменяем. Webhook admission в vSphere отклоняет любое обновление с сообщением "VSphereMachineTemplate spec.template.spec field is immutable. Please create a new resource instead." Поэтому каждый шаг обновления на этой странице создает новый VSphereMachineTemplate с новым metadata.name, применяет его, а затем изменяет infrastructureRef.name управляющего ресурса на новый шаблон. Сохраняйте предыдущий шаблон до тех пор, пока новый rollout не станет здоровым, на случай если потребуется откат.
UI Fleet Essentials не поддерживает обновления кластеров ACP 4.3
Кластеры vSphere в настоящее время не предоставляют путь обновления через UI Fleet Essentials. Используйте описанную ниже процедуру YAML либо двухэтапный поток обновления, встроенный в платформу ACP Core — см. Запросить обновление для рабочих кластеров.
Необходимые значения из матрицы поддержки ОС
Авторитетное сопоставление между выпуском ACP, его шаблоном VM, версией Kubernetes, соответствующими версиями CoreDNS, etcd и Kube-OVN находится в Матрице поддержки ОС. Перед началом найдите строку, соответствующую целевой версии ACP; эта строка содержит все значения, необходимые для приведенных ниже шагов.
Ячейки, которые вы берете из этой строки, соответствуют манифестам обновления следующим образом:
Теги образов CoreDNS и etcd относятся только к плоскости управления, потому что clusterConfiguration — это поле KubeadmControlPlane. Рабочие узлы наследуют версии контейнерных образов из нового шаблона VM; MachineDeployment не содержит собственных тегов dns/etcd. Аннотация Kube-OVN находится в ресурсе Cluster, а не в KubeadmControlPlane, потому что провайдер vSphere отслеживает ее независимо от rollout плоскости управления Kubernetes.
Шаги
Создайте целевые шаблоны машин
Перед началом поэтапного обновления создайте новые ресурсы VSphereMachineTemplate для плоскости управления и рабочих узлов.
-
Экспортируйте существующий шаблон плоскости управления
-
Измените шаблон плоскости управления
Отредактируйте
new-cp-template.yaml:- Установите
metadata.nameв новое уникальное имя (например,<cluster_name>-control-plane-v2) - Обновите
spec.template.spec.templateдо имени целевого шаблона VM - При необходимости обновите параметры CPU, памяти или дисков
- Удалите поля, сгенерированные сервером:
metadata.resourceVersion,metadata.uid,metadata.generation,metadata.creationTimestamp,metadata.managedFields,metadata.annotations["kubectl.kubernetes.io/last-applied-configuration"]иstatus - Оставьте
spec.template.spec.providerIDпустым. Провайдер vSphere задаетproviderIDкак BIOS UUID VM после ее создания; предварительное заполнение этого поля в шаблоне нарушает связывание идентичности в контроллере.
- Установите
-
Экспортируйте и измените шаблон рабочих узлов
Отредактируйте
new-worker-template.yaml:- Установите
metadata.nameв новое уникальное имя (например,<cluster_name>-worker-v2) - Обновите
spec.template.spec.templateдо имени целевого шаблона VM - При необходимости обновите параметры CPU, памяти или дисков
- Удалите те же поля, сгенерированные сервером, что перечислены выше
- Установите
-
Примените оба новых шаблона
Обновите плоскость управления
Перед началом соберите все необходимые значения из целевой строки ACP в матрице поддержки ОС, как описано в разделе Необходимые значения из матрицы поддержки ОС.
-
Исправьте
KubeadmControlPlane, указав целевые значения KubernetesОбновите ресурс
KubeadmControlPlaneодной операцией редактирования, чтобыspec.version, тег образа CoreDNS, тег образа etcd и ссылка на инфраструктурный шаблон оставались согласованными с одним и тем же шаблоном VM:-
spec.version← Kubernetes Version из строки матрицы поддержки ОС -
spec.kubeadmConfigSpec.clusterConfiguration.dns.imageTag← столбец coredns из той же строки -
spec.kubeadmConfigSpec.clusterConfiguration.etcd.local.imageTag← столбец etcd из той же строки -
spec.machineTemplate.infrastructureRef.name← имя новогоVSphereMachineTemplate, созданного выше
Одного только обновления
spec.versionнедостаточно. Теги образов CoreDNS и etcd должны изменяться вместе с версией Kubernetes, потому что они собираются из одного и того же выпуска; если оставить их в прежних значениях, это может привести к тому, что поды CoreDNS и etcd не будут соответствовать новой minor-версии Kubernetes. -
-
Обновите аннотацию версии Kube-OVN в ресурсе
ClusterЕсли в целевой строке ACP в матрице поддержки ОС указано значение kube-ovn (chart), отличающееся от текущего кластера, обновите аннотацию в ресурсе
Cluster, чтобы провайдер vSphere согласовал новый AppRelease Kube-OVN.INFOПредварительное условие — аннотация-гейт для согласования Kube-OVN (только vSphere)
В vSphere провайдер согласует AppRelease Kube-OVN только тогда, когда ресурс
Clusterсодержит аннотациюcpaas.io/network-type: kube-ovn. Обычно эта аннотация задается при создании кластера. Если она отсутствует, приведенные ниже шаги успешно запишут аннотацию версии, но AppRelease Kube-OVN согласован не будет. Перед продолжением проверьте:Это предварительное условие специфично для vSphere. Провайдеры DCS и Huawei Cloud Stack используют вместо этого поле
spec.networkTypeресурсовDCSCluster/HCSClusterи не требуют этой аннотации.Kube-OVN — это компонент жизненного цикла Core, но на неизменяемой ОС провайдер vSphere управляет его доставкой на основе этой аннотации; аннотация не обновляется автоматически при изменении
spec.version.Провайдер vSphere согласует один AppRelease Kube-OVN с именем
cni-kube-ovnв пространстве именcpaas-systemрабочего кластера. Запустите следующую команду в рабочем кластере (не в bootstrap KIND и не в кластереglobal), чтобы отслеживать согласование:Обычная последовательность:
Upgrading → HealthChecking → Success. На небольших кластерах полный переход обычно завершается примерно за одну минуту. Интерпретируйте фазы следующим образом:WARNINGНе объявляйте обновление завершенным только по значению
installedRevision. Это поле переходит в целевое значение во времяHealthChecking, до того как поды будут проверены на состояние Ready. Chart считается обновленным только тогда, когдаphaseимеет значениеSuccessиinstalledRevisionсоответствует целевому значению.API
AppReleaseтакже определяет состоянияDownloading,Installing,Syncing,DownloadFailed,DeployFailedиNotReady. Первые три являются переходными, и обновление должно завершиться само. Последние три указывают на ошибку, требующую ручного анализа; начните сkubectl describe apprelease cni-kube-ovn -n cpaas-system, чтобы прочитать полеmessageдля каждого состояния. -
Отслеживайте rollout плоскости управления
Обновите рабочие узлы
После завершения обновления плоскости управления измените MachineDeployment, чтобы он ссылался на новый шаблон рабочих узлов и целевую версию Kubernetes.
Обычно изменяются следующие поля:
spec.template.spec.version— целевая версия Kubernetesspec.template.spec.infrastructureRef.name— имя новогоVSphereMachineTemplatespec.template.spec.bootstrap.configRef.name— имя новогоKubeadmConfigTemplate, если необходимо изменить параметры bootstrap (см. Обновление шаблонов Bootstrap)
Примените изменения:
Отслеживайте rollout рабочих узлов:
Откат неудачного обновления
Если поэтапное обновление завершается сбоем — новые VM не загружаются, узлы не переходят в состояние Ready или новая minor-версия Kubernetes выявляет несовместимость — верните ссылку на шаблон и поля версии Kubernetes к предыдущим значениям. Cluster API рассматривает откат как новое расхождение спецификации и по одному возвращает машины v2 к предыдущему шаблону.
Перед откатом важно усвоить три факта:
- Старых VM больше нет. Они были удалены во время обновления. Откат использует старый шаблон для создания нового набора машин-замен; он не восстанавливает исходные VM.
- Ресурс старого
VSphereMachineTemplateдолжен по-прежнему существовать. Не удаляйте предыдущий шаблон, пока новый rollout не станет здоровым. Если вы уже удалили его, восстановите его из системы контроля версий или из резервной копии перед откатом. - Идентичность диска, управляемого пулом, сохраняется, но состояние данных — нет. Диски, объявленные в
VSphereMachineConfigPool.spec.slot[].persistentDisks, повторно присоединяются к машинам после отката в том же слоте, но все данные, записанные на эти диски в течение окна обновления (например, записи etcd в новом формате minor-версии Kubernetes), сохраняются. Если новый формат нечитаем для более старой minor-версии Kubernetes, откат все равно может завершиться неудачей и потребовать ручного восстановления etcd.
Процедура:
-
Плоскость управления: исправьте
KubeadmControlPlane, восстановив предыдущие значенияspec.machineTemplate.infrastructureRef.name,spec.version,spec.kubeadmConfigSpec.clusterConfiguration.dns.imageTagиspec.kubeadmConfigSpec.clusterConfiguration.etcd.local.imageTag. -
Рабочие узлы: исправьте каждый
MachineDeployment, восстановив предыдущие значенияspec.template.spec.infrastructureRef.nameиspec.template.spec.version. -
Kube-OVN: если аннотация kube-ovn была изменена, восстановите прежнее значение в ресурсе
Cluster:
Если новая плоскость управления так и не достигла quorum etcd, контроллер KubeadmControlPlane может отказаться откатывать любую машину, потому что его предварительные проверки блокируются из-за нездорового etcd. Сначала восстановите quorum etcd (вручную, с участием оператора), а затем повторите откат.
Проверка
После обновления подтвердите следующие результаты:
KubeadmControlPlaneдостигает целевой версии и требуемого количества реплик.MachineDeploymentдостигает целевой версии и требуемого количества реплик.- Плоскость управления и рабочие узлы возвращаются в состояние
Ready. - DaemonSet vSphere CPI остается доступным в рабочем кластере.
Следующие шаги
После завершения обновления Kubernetes продолжайте с обычными операциями над узлами в Управление узлами на VMware vSphere.