Обновление Kubernetes на Huawei DCS
Это руководство объясняет, как завершить Phase 2 рабочего процесса обновления для кластеров на Huawei DCS. Перед обновлением Kubernetes выполните обновление Distribution Version, описанное в Обновление кластеров.
Где эта страница находится в полном потоке обновления ACP
На этой странице описан только шаг Kubernetes в процессе обновления. Полный поток обновления ACP — включая синхронизацию артефактов обновления, обновление ACP Core через CVO, обновления плагинов Aligned и обновления плагинов Agnostic из Marketplace — документирован в документации продукта ACP. Выполните эти шаги до начала шага Kubernetes на этой странице:
- Обзор обновления (область и последовательность)
- Подготовка перед обновлением
- Обновление глобального кластера (Core, Aligned, Agnostic)
- Обновление workload-кластеров (Core, Aligned, Agnostic)
Используйте эту страницу, когда один и тот же кластер работает на неизменяемой операционной системе, поскольку шаг Kubernetes на immutable OS заменяет узлы из нового VM-шаблона на базе Alauda OS вместо обновления бинарных файлов на месте.
Версия
Версия провайдера DCS v1.0.16 — это первый релиз с поддержкой persistent disks, управляемых pool.
Миграция существующего кластера
Если ваш кластер работает под ACP v4.2.1 или более поздней версии и вы переходите на провайдер DCS v1.0.16 или новее, выполните процедуру миграции из Миграция существующих кластеров Huawei DCS на persistent disks, управляемые pool перед тем, как полагаться на сохранение дисков во время обновления.
Содержание
Последовательность обновленияПредварительные требованияИспользование YAMLТребуемые значения из OS Support MatrixОбновление инфраструктуры Control PlaneПроцедураОбновление версии Kubernetes control planeПроцедураОбновление worker nodesПроцедураОткат неудачного обновленияИспользование Web UIПредварительные требованияРабочий процесс обновленияПроверка доступных обновленийОбновление Control Plane Node PoolОбновление Worker Node PoolsУстранение неполадокДополнительные ресурсыПоследовательность обновления
Обновляйте кластеры DCS в следующем порядке:
- (Обязательное условие) Сначала обновите платформу ACP на management-кластере. Это приведет к обновлению контроллера cluster-api-provider-dcs и связанных компонентов CAPI (core, провайдер KubeadmControlPlane, bootstrap-провайдер) до версий, которые понимают новую schema. Запускайте обновление workload-кластера только после того, как контроллеры на стороне management-кластера завершат раскатку и перейдут в состояние Ready.
- Обновите Distribution Version (Aligned Extensions) на workload-кластере. См. Обновление Distribution Version.
- Обновите Kubernetes control plane.
- Обновите worker nodes до целевой версии Kubernetes.
Cluster API оркестрирует rolling updates с встроенными механизмами безопасности, чтобы снизить влияние на сервис.
Пропуск шага 1 создает риск двух сценариев отказа: старый контроллер молча проигнорирует новые поля schema, записанные в DCSIpHostnamePool / DCSMachineTemplate; либо замена образа контроллера в середине раскатки прервет продвижение state machine для persistent disks. Всегда завершайте обновление на стороне management-кластера перед тем, как затрагивать раскатку workload.
Предварительные требования
Перед началом убедитесь, что выполнены все следующие предварительные требования:
- Обновление Distribution Version завершено
- Control plane доступен
- Все узлы находятся в состоянии Ready и исправны
- IP Pool имеет достаточную емкость для rolling updates
- VM-шаблон поддерживает целевую версию Kubernetes. См. Матрица поддержки ОС для сопоставления версий
- Для кросс-версийных обновлений, охватывающих более одного minor-обновления Kubernetes, промежуточные версии Core images и VM-шаблоны заранее подготовлены. См. Подготовка к кросс-версийному обновлению
- Целевая версия Kubernetes совместима с вашими workload и add-ons
- VM-шаблоны DCS имеют версию
4.2.1или новее, если вы используете persistent disks, управляемые pool, поскольку безопасное завершение работы и отсоединение дисков зависят от guest tools - Если вы используете persistent disks, управляемые pool, сохраняйте
KubeadmControlPlane.spec.rolloutStrategy.rollingUpdate.maxSurge = 0и для каждогоMachineDeployment.spec.strategy.rollingUpdate.maxSurge = 0 - Если кластер использует дополнительные NIC, сохраняйте необходимые записи
DCSIpHostnamePool.spec.pool[].additionNic[]и убедитесь, что DCS DVS и Port Groups доступны с хостов, которые могут получить replacement VMs
Модель сохранения дисков
Обновления полагаются на механизм rolling update в Cluster API. У каждого кластера есть четыре класса дисков; только класс, управляемый pool, переживает delete-recreate.
«Сохранен» означает, что тот же идентификатор диска повторно присоединяется — это не означает, что содержимое диска переносится во времени. Все, что записано на диск, управляемый pool, в течение окна обновления, остается после обновления и остается после rollback.
Сохранение дисков, управляемое pool, требует замены по одному, поэтому оставляйте maxSurge = 0 и в KubeadmControlPlane.spec.rolloutStrategy.rollingUpdate, и в MachineDeployment.spec.strategy.rollingUpdate.
Если существующий кластер по-прежнему хранит сохраненные данные в старом формате template-disk, сначала выполните миграцию по инструкции Миграция существующих кластеров Huawei DCS на persistent disks, управляемые pool.
Дополнительные NIC во время rolling replacement
Дополнительные NIC определяются в DCSIpHostnamePool.spec.pool[].additionNic[], а не в DCSMachineTemplate. Во время обновления каждая replacement VM использует дополнительные NIC из того slot Pool, который она получает. Шаги шаблона обновления ниже не должны переносить настройки дополнительных NIC в DCSMachineTemplate.
Шаблоны нельзя изменять на месте
DCSMachineTemplate — это инфраструктурный template Cluster API. Cluster API запускает rolling replacement только тогда, когда KubeadmControlPlane.spec.machineTemplate.infrastructureRef.name или MachineDeployment.spec.template.spec.infrastructureRef.name указывает на другое имя template. Редактирование существующего template на месте меняет manifest, но не создает новую раскатку — работающие VMs продолжают использовать snapshot предыдущего template, находящийся в памяти.
Поэтому каждый шаг обновления на этой странице создает новый DCSMachineTemplate с новым metadata.name, применяет его, а затем меняет infrastructureRef.name у управляющего ресурса на новый template. Предыдущий template следует сохранять до тех пор, пока новая раскатка не станет healthy, на случай если потребуется rollback.
Использование YAML
Обновления на основе YAML не зависят от Fleet Essentials.
Требуемые значения из OS Support Matrix
Авторитетное сопоставление между релизом ACP, образом Alauda OS, версией Kubernetes, а также соответствующими версиями CoreDNS, etcd и Kube-OVN находится в Матрица поддержки ОС. Найдите строку, соответствующую целевой версии ACP, прежде чем начать; эта строка содержит все значения, необходимые для шагов YAML ниже.
Значения из этой строки используются в manifest обновления следующим образом:
Теги образов CoreDNS и etcd применяются только к control plane, поскольку clusterConfiguration — это поле KubeadmControlPlane. Worker nodes наследуют версии container image из нового VM-шаблона; у MachineDeployment нет собственных тегов dns/etcd. Аннотация Kube-OVN находится на ресурсе Cluster, а не на KubeadmControlPlane, потому что провайдер DCS отслеживает ее независимо от раскатки Kubernetes control plane.
Подтвердите у владельца платформы кластера, что целевой образ Alauda OS уже загружен в платформу DCS под тем же именем, что и значение Alauda OS Image Version в строке матрицы. Обновление завершится ошибкой, если этот VM-шаблон отсутствует в DCS в момент применения DCSMachineTemplate.
Обновление инфраструктуры Control Plane
Обновление шаблона машин control plane позволяет раскатить обновленные спецификации VM, системные патчи и параметры инфраструктуры.
Процедура
-
Создайте обновленный machine template
Скопируйте существующий
DCSMachineTemplate, на который ссылаетсяKubeadmControlPlane, и сохраните его в новый файл: -
Измените спецификацию template
Обновите новый template по мере необходимости:
- Установите
metadata.nameв<new-template-name> - Обновите
spec.template.spec.vmTemplateName - Обновите
spec.template.spec.vmConfig.dcsMachineCpuSpec.quantity - Обновите
spec.template.spec.vmConfig.dcsMachineMemorySpec.quantity - Обновите
spec.template.spec.vmConfig.dcsMachineDiskSpecтолько для системных дисков и локальных для template дисков - Удалите сгенерированные сервером метаданные (
resourceVersion,uid,generation,creationTimestamp,managedFields, annotationkubectl.kubernetes.io/last-applied-configuration) и все полеstatusиз скопированного manifest. - Оставьте
spec.template.spec.providerIDпустым. Провайдер DCS устанавливаетproviderIDвdcs://<machine-name>после создания VM; предварительное заполнение этого поля в template нарушает привязку идентичности контроллера.
Храните persistent disks, управляемые pool, включая
/var/cpaas, вDCSIpHostnamePool.spec.pool[].persistentDisk. Дополнительные NIC храните вDCSIpHostnamePool.spec.pool[].additionNic[]. - Установите
-
Примените обновленный template
-
Обновите ссылку control plane
Измените ресурс
KubeadmControlPlane, чтобы он ссылался на новый template: -
Контролируйте rolling update
Обновление версии Kubernetes control plane
Обновление версии Kubernetes control plane на immutable OS — это рабочий процесс delete-recreate. VM control plane заменяются по одной из нового DCSMachineTemplate, который указывает на целевой VM-шаблон Alauda OS, а ресурс KubeadmControlPlane патчится, чтобы использовать соответствующие версию Kubernetes, тег образа CoreDNS и тег образа etcd.
Перед началом соберите все необходимые значения из целевой строки ACP в OS Support Matrix, как описано в Требуемые значения из OS Support Matrix.
Процедура
-
Создайте новый
DCSMachineTemplateдля целевой версии KubernetesСкопируйте существующий template control plane и обновите
metadata.nameна новое имя, аspec.template.spec.vmTemplateName— на значение Alauda OS Image Version, взятое из целевой строки в Матрица поддержки ОС. Храните persistent disks, управляемые pool, вDCSIpHostnamePool.spec.pool[].persistentDisk, а дополнительные NIC — вDCSIpHostnamePool.spec.pool[].additionNic[], вместо того чтобы повторно задавать их как поля template. -
Пропатчите
KubeadmControlPlaneзначениями целевой версии KubernetesОбновите ресурс
KubeadmControlPlaneодним изменением, чтобыspec.version, тег образа CoreDNS, тег образа etcd и ссылка на infrastructure template соответствовали одному и тому же релизу Alauda OS:-
spec.version← Kubernetes Version из строки OS Support Matrix -
spec.kubeadmConfigSpec.clusterConfiguration.dns.imageTag← столбец coredns из той же строки -
spec.kubeadmConfigSpec.clusterConfiguration.etcd.local.imageTag← столбец etcd из той же строки -
spec.machineTemplate.infrastructureRef.name← имя новогоDCSMachineTemplate, созданного на шаге 1
Обновления только
spec.versionнедостаточно. Теги образов CoreDNS и etcd должны обновляться вместе с версией Kubernetes, поскольку они собираются из одного и того же релиза Alauda OS; если оставить их прежними, могут получиться pods CoreDNS и etcd, не соответствующие новой minor-версии Kubernetes. -
-
Обновите chart Kube-OVN на workload-кластере
Kube-OVN — это компонент жизненного цикла Core, но на immutable OS провайдер DCS не привязывает его версию chart к версии Kubernetes кластера. Версия chart передается отдельным
AppReleaseс именемcni-kube-ovnв namespacecpaas-systemworkload-кластера, и вы переводите его вперед в два шага: сначала обновляете аннотацию на ресурсеClusterдля учета и будущего пересоздания, затем напрямую патчите существующийAppRelease, чтобы повысить revision chart.WARNINGПочему на DCS нужны два шага
Провайдер DCS создает
AppReleasecni-kube-ovnпри первом создании кластера, и после этого он синхронизирует только блокspec.values(имя кластера, CIDR, registry, список control-plane node). Он не записываетspec.source.charts[0].targetRevisionв уже существующийAppRelease. В результате изменениеcpaas.io/kube-ovn-versionтолько на ресурсеClusterне меняет версию chart на workload-кластере. Аннотацию все равно необходимо обновить, чтобы зафиксированная целевая версия соответствовала строке OS Support Matrix, но само обновление chart выполняется прямым патчемAppRelease.3.1. Обновите аннотацию
cpaas.io/kube-ovn-versionна ресурсеClusterАннотация не обновляется автоматически при изменении
spec.version; держите ее в соответствии со столбцом kube-ovn (chart) целевой строки.3.2. Пропатчите revision chart
AppReleaseна workload-кластереВыполняйте патч против API server workload-кластера, а не bootstrap KIND или
global-кластера:Используйте то же значение, которое вы задали в аннотации.
releaseName(cpaas-kube-ovn) иname(acp/chart-cpaas-kube-ovn) управляются провайдером; не изменяйте их.3.3. Дождитесь завершения reconciliation
Отслеживайте phase chart и установленный revision:
Нормальная последовательность:
Upgrading → HealthChecking → Success. На небольших кластерах полный переход обычно завершается примерно за одну минуту. Интерпретируйте phase следующим образом:WARNINGНе объявляйте обновление завершенным, основываясь только на
installedRevision. Это поле переключается на целевое значение во времяHealthChecking, до того как pods будут проверены как Ready. Chart считается обновленным только тогда, когдаphaseравенSuccessиinstalledRevisionсовпадает с целевым значением.API
AppReleaseтакже определяетDownloading,Installing,Syncing,DownloadFailed,DeployFailedиNotReady. Первые три являются временными, и обновление должно завершиться самостоятельно. Последние три указывают на сбой, требующий ручного анализа; начните сkubectl describe apprelease cni-kube-ovn -n cpaas-system, чтобы прочитать полеmessageдля каждой condition. -
Контролируйте rolling update
KubeadmControlPlane.spec.rolloutStrategy.rollingUpdate.maxSurgeдолжен оставаться0, когда кластер использует persistent disks, управляемые pool, чтобы VM control plane заменялись по одной.
Обновление worker nodes
Обновления Kubernetes для worker nodes управляются через ресурсы MachineDeployment. Для worker-обновлений требуется меньше полей, чем для control plane: теги образов CoreDNS и etcd находятся в KubeadmControlPlane.spec.kubeadmConfigSpec.clusterConfiguration, которого у MachineDeployment нет. Worker nodes наследуют версии компонентов Kubernetes из нового VM-шаблона; MachineDeployment нужен только целевой версии Kubernetes и ссылка на новый template.
Перед началом прочитайте ячейки Alauda OS Image Version и Kubernetes Version из целевой строки ACP в Матрица поддержки ОС, как описано в Требуемые значения из OS Support Matrix.
Процедура
-
Создайте новый
DCSMachineTemplateдля worker nodes- Создайте новый
DCSMachineTemplateсvmTemplateName, установленным в значение Alauda OS Image Version из целевой строки в Матрица поддержки ОС - Храните
/var/cpaasи любые другие диски, сохраняемые при обновлении, вDCSIpHostnamePool.spec.pool[].persistentDisk, а не добавляйте их снова как диски template - Храните дополнительные NIC в
DCSIpHostnamePool.spec.pool[].additionNic[]
- Создайте новый
-
Обновите
MachineDeployment- Установите
spec.template.spec.versionв значение Kubernetes Version из той же строки OS Support Matrix - Установите
spec.template.spec.infrastructureRef.nameв имя новогоDCSMachineTemplate, созданного на шаге 1 - При необходимости обновите
spec.template.spec.bootstrap.configRef.name, если для этого релиза требуется изменение bootstrap-конфигурации
- Установите
-
Контролируйте rolling update
- Убедитесь, что rolling update успешно завершен
- Убедитесь, что новые worker nodes присоединились к кластеру с целевой версией Kubernetes
MachineDeployment.spec.strategy.rollingUpdate.maxSurgeдолжен оставаться0, когда кластер использует persistent disks, управляемые pool, чтобы worker nodes заменялись по одной.
Откат неудачного обновления
Если rolling update завершается сбоем — новые VMs не загружаются, узлы не переходят в состояние Ready или новая minor-версия Kubernetes выявляет несовместимость — верните ссылку на template и поля версии Kubernetes к предыдущим значениям. Cluster API рассматривает возврат как новый drift spec и откатывает machines v2 к предыдущему template, по одной за раз.
Перед откатом важно усвоить три факта:
- Старых VMs больше нет. Они были уничтожены во время обновления. Rollback использует старый template для создания нового набора replacement machines; он не восстанавливает исходные VMs.
- Старый ресурс
DCSMachineTemplateдолжен все еще существовать. Не удаляйте предыдущий template, пока новая раскатка не станет healthy. Если вы уже удалили его, восстановите его из системы контроля версий или резервной копии перед откатом. - Идентичность диска, управляемого pool, сохраняется, но состояние данных — нет. Диски, объявленные в
DCSIpHostnamePool.spec.pool[].persistentDisk, повторно присоединяются к откатываемым машинам в том же IP-слоте, но любые данные, записанные на эти диски в течение окна обновления (например, записи etcd в новом формате minor-версии Kubernetes), сохраняются. Если новый формат не читается более старой minor-версией Kubernetes, rollback все равно может завершиться неудачно и потребовать ручного восстановления etcd.
Процедура:
-
Control plane: пропатчите
KubeadmControlPlane, чтобы восстановить прежниеspec.machineTemplate.infrastructureRef.name,spec.version,spec.kubeadmConfigSpec.clusterConfiguration.dns.imageTagиspec.kubeadmConfigSpec.clusterConfiguration.etcd.local.imageTag. -
Workers: пропатчите каждый
MachineDeployment, чтобы восстановить прежниеspec.template.spec.infrastructureRef.nameиspec.template.spec.version. -
Kube-OVN: если chart Kube-OVN был обновлен, откатите его тем же способом, которым выполнялось обновление — сначала восстановите аннотацию, затем верните revision chart в
AppRelease. Проверьте результат тем же контролемinstalledRevision+phase=Success, который используется на шаге 3.
Если новый control plane так и не достиг quorum etcd, контроллер KubeadmControlPlane может отказаться откатывать любую машину, потому что его preflight checks блокируются из-за unhealthy etcd. Сначала восстановите quorum etcd (операторское вмешательство), а затем повторите rollback.
Использование Web UI
UI Fleet Essentials не поддерживает обновления кластеров ACP 4.3
Рабочий процесс UI Fleet Essentials не был адаптирован к механизму Cluster Version Operator (CVO), внедренному в ACP 4.3. Не используйте UI Fleet Essentials для обновления кластеров DCS на ACP 4.3.
Две поддерживаемые альтернативы:
- Путь YAML — Следуйте процедуре обновления на основе YAML, описанной ранее на этой странице.
- UI управления ACP Core cluster — Используйте двухшаговый поток обновления, встроенный в платформу ACP Core; см. Запросить обновление для global-кластера или Запросить обновление для workload-кластеров.
Создание кластера и управление node pool через UI Fleet Essentials не затрагиваются этим ограничением.
Используйте этот workflow для обновления Kubernetes из web UI после завершения Phase 1.
Требование к версии: Этот workflow требует Fleet Essentials и Alauda Container Platform DCS Infrastructure Provider 1.0.13 или новее. Если версия провайдера ниже 1.0.13, используйте YAML manifest. Если обновление опирается на persistent disks, управляемые pool, используйте провайдер DCS v1.0.16 или новее. В v1.0.16 объявление persistentDisk на DCSIpHostnamePool по-прежнему доступно только через YAML и не отображается в web UI.
Предварительные требования
- Обновление Distribution Version завершено. См. Обновление Distribution Version
- Control Plane Node Pool находится в состоянии Running
- IP Pool имеет достаточную емкость для rolling updates
- Если обновление опирается на persistent disks, управляемые pool, убедитесь, что необходимые записи
DCSIpHostnamePool.spec.pool[].persistentDiskуже созданы или обновлены через YAML
Рабочий процесс обновления
Обновления Kubernetes следуют такой последовательности после обновления Distribution Version:
- Обновите Control Plane Node Pool.
- Дождитесь завершения обновления Control Plane Node Pool.
- Обновите Worker Node Pools в любом порядке.
Проверка доступных обновлений
Навигация: Clusters → Clusters → Выберите кластер → Вкладка Node Pools
Node Pools, для которых доступны обновления, отображают индикатор Upgrade available. Нажмите на карточку Node Pool, чтобы посмотреть текущую и целевую версии.
Обновление Control Plane Node Pool
Шаги:
- На вкладке Node Pools найдите Control Plane Node Pool
- Нажмите Upgrade
- Проверьте информацию об обновлении:
- Current Version: текущая версия Kubernetes
- Target Version: последняя поддерживаемая minor-версия (выбирается автоматически)
- Нажмите Confirm, чтобы начать
Мониторинг:
- Следите за состоянием Node Pool
- Узлы будут обновляться по одному (
maxSurge=0). Такая замена по одному также обязательна, когда кластер использует persistent disks. - Время обновления зависит от количества узлов и ресурсов
Обновление Worker Node Pools
Worker Node Pools нельзя обновлять, пока не завершится обновление Control Plane Node Pool.
Когда доступно обновление Worker Pool:
- Версия Kubernetes control plane совпадает с версией global-кластера
- Control Plane находится в состоянии Running
Шаги обновления:
- Для каждого Worker Node Pool:
- Нажмите кнопку Upgrade
- Проверьте и подтвердите
- После завершения обновления Control Plane пулы можно обновлять параллельно
Ограничения обновления: