Обновление кластеров в Huawei Cloud Stack
Это руководство объясняет, как обновлять кластеры Kubernetes в Huawei Cloud Stack с минимальным временем простоя, сохраняя стабильность и целостность данных.
Где эта страница находится в общем потоке обновления ACP
На этой странице описан только шаг Kubernetes в процессе обновления. Полный поток обновления ACP — включая синхронизацию артефактов обновления, обновление ACP Core через CVO, обновления плагинов Aligned и обновления плагинов Agnostic из Marketplace — описан в документации продукта ACP. Завершите эти шаги перед тем, как переходить к шагу Kubernetes на этой странице:
- Обзор обновления (область применения и порядок выполнения)
- Подготовка к обновлению
- Обновление глобального кластера (Core, Aligned, Agnostic)
- Обновление рабочих кластеров (Core, Aligned, Agnostic)
Используйте эту страницу, когда тот же кластер работает на неизменяемой операционной системе, поскольку шаг Kubernetes на immutable OS заменяет узлы из нового шаблона VM, а не обновляет бинарные файлы на месте.
Версия
Поставщик HCS v1.0.1 — это первый выпуск, который поддерживает постоянные диски, управляемые пулом.
Миграция существующего кластера
Если ваш кластер работает на ACP v4.3.1 или более поздней версии и вы переходите на поставщик HCS v1.0.1 или более поздней версии, выполните процедуру миграции в Миграция существующих кластеров Huawei Cloud Stack на постоянные диски, управляемые пулом перед тем, как полагаться на сохранение дисков при обновлении.
Содержание
ОбзорПоследовательность обновленияПредварительные требованияОбновления плоскости управленияОбновления образа инфраструктурыПроцедураОбновления версии KubernetesОбязательные значения из матрицы поддержки ОСПроцедураОбновления рабочих узловОткат неудачного обновленияДополнительные ресурсыОбзор
Обновления кластеров в HCS охватывают несколько компонентов и следуют структурированному подходу, чтобы обеспечить надежность системы:
- Обновления плоскости управления: обновление компонентов плоскости управления Kubernetes и базовой инфраструктуры
- Обновления рабочих узлов: обновление рабочих узлов с новыми образами машин и версиями Kubernetes
- Обновления инфраструктуры: изменение спецификаций виртуальных машин, хранилища и сетевых настроек
Последовательность обновления
Обновляйте кластеры HCS в следующем порядке:
- (Предварительное условие) Сначала обновите платформу ACP в управляющем кластере. Это приводит контроллер
cluster-api-provider-hcsи связанные компоненты CAPI к версиям, которые понимают новую схему. Запускайте обновления рабочих кластеров только после того, как контроллеры на стороне управления завершат развертывание и перейдут в состояние Ready. - Обновите версию Distribution на рабочем кластере. См. Обновление кластеров.
- Обновите версию Kubernetes плоскости управления.
- Обновите рабочие узлы до целевой версии Kubernetes.
Cluster API оркестрирует поэтапные обновления со встроенными механизмами безопасности, чтобы снизить влияние на сервисы.
Пропуск шага 1 создает риск двух сценариев отказа: старый контроллер молча игнорирует новые поля схемы, записанные в HCSMachineConfigPool / HCSMachineTemplate; либо замена образа контроллера в середине развертывания прерывает продвижение состояния постоянного диска в state machine. Всегда завершайте обновление на стороне управления до начала обновления рабочего кластера.
Предварительные требования
Перед началом убедитесь, что выполнены все перечисленные ниже предварительные требования:
- Обновление Distribution Version завершено.
- Плоскость управления доступна.
- Все узлы исправны и находятся в состоянии
Ready. - Целевой образ VM присутствует в среде HCS под тем же именем, что и значение Alauda OS Image Version в строке OS Support Matrix. Обновление завершится ошибкой, если образ отсутствует в момент применения нового
HCSMachineTemplate. - Для межверсийных обновлений, охватывающих более одного minor-уровня Kubernetes, промежуточные Core-образы и образы VM заранее подготовлены. См. Подготовка к межверсийному обновлению.
- Целевая версия Kubernetes совместима с вашими рабочими нагрузками и дополнениями.
- Проверьте путь обновления Kubernetes и политику допустимого расхождения версий.
- Любое локальное состояние узла, которое должно пережить замену, должно быть объявлено в
HCSMachineConfigPool.spec.configs[].persistentDisks[], а не вHCSMachineTemplate.spec.template.spec.dataVolumes[].
Для первоначального развертывания см. руководство Создание кластера.
Кластеры с одной плоскостью управления
Процесс обновления, описанный в этом документе, применяется к кластерам HCS с высокодоступной плоскостью управления. Кластеры HCS с одной плоскостью управления поддерживаются для создания, но не поддерживаются для обновления через этот процесс.
Модель сохранения дисков
Обновления опираются на механизм поэтапной замены Cluster API. У поставщика HCS есть четыре класса дисков:
Не считайте локальные данные узла на HCS dataVolumes[] сохраняемым состоянием. Перенесите /var/cpaas и любые другие сохраняемые локальные пути узла на постоянные диски, управляемые пулом, до начала поэтапной замены.
Шаблоны нельзя изменять на месте
HCSMachineTemplate — это инфраструктурный шаблон Cluster API. Cluster API запускает поэтапную замену только тогда, когда KubeadmControlPlane.spec.machineTemplate.infrastructureRef.name или MachineDeployment.spec.template.spec.infrastructureRef.name указывает на другое имя шаблона. Редактирование существующего шаблона на месте изменяет манифест, но не создает новый rollout — запущенные VM продолжают использовать снимок предыдущего шаблона, находящийся в памяти.
Поэтому каждый шаг обновления на этой странице создает новый HCSMachineTemplate с новым metadata.name, применяет его, а затем изменяет infrastructureRef.name управляющего ресурса на новый шаблон. Сохраняйте предыдущий шаблон до тех пор, пока новый rollout не станет исправным, на случай если потребуется откат.
Интерфейс Fleet Essentials UI не поддерживает обновления кластера ACP 4.3
Процесс в Fleet Essentials UI не был адаптирован к механизму Cluster Version Operator (CVO), введенному в ACP 4.3. Кластеры HCS в настоящее время не предоставляют путь обновления через Fleet Essentials UI; используйте описанную ниже процедуру YAML либо двухэтапный поток обновления, встроенный в платформу ACP Core — см. Запросить обновление для рабочих кластеров.
Обновления плоскости управления
Обновления плоскости управления затрагивают API server Kubernetes, etcd, scheduler и controller manager, а также базовую инфраструктуру VM.
Для плоскостей управления HCS, основанных на HCSMachineConfigPool, который использует постоянные диски, управляемые пулом, сохраняйте KubeadmControlPlane.spec.rolloutStrategy.rollingUpdate.maxSurge: 0 во время обновления. Постоянные диски привязаны к фиксированным идентификаторам (hostname, slot), поэтому при rollout старый узел должен быть удален до того, как новый узел сможет повторно использовать тот же диск.
Обновления образа инфраструктуры
Обновление базовых образов машин для узлов плоскости управления обеспечивает исправления безопасности, улучшение производительности и обновленные системные компоненты.
Процедура
-
Создайте обновленный шаблон машины
Скопируйте существующий
HCSMachineTemplate, на который ссылаетсяKubeadmControlPlane, и измените необходимые спецификации: -
Измените спецификации шаблона
Измените новый шаблон:
- Установите
metadata.nameв<new-template-name> - Удалите из скопированного манифеста метаданные и поля status, сгенерированные сервером.
- Не заполняйте поля идентичности времени выполнения, включая
spec.template.spec.providerIDиspec.template.spec.serverId. Поставщик HCS назначает эти значения при создании экземпляров. - Не включайте сохраняемые пути, такие как
/var/cpaas, вspec.template.spec.dataVolumes[]. Объявляйте эти пути в указанномHCSMachineConfigPool.spec.configs[].persistentDisks[]. - При необходимости обновите:
spec.template.spec.imageNamespec.template.spec.flavorNamespec.template.spec.rootVolume.sizespec.template.spec.dataVolumesтолько для временных дисков
- Установите
-
Разверните обновленный шаблон
Примените новый шаблон машины:
-
Обновите ссылку плоскости управления
Измените ресурс
KubeadmControlPlane, чтобы он ссылался на новый шаблон: -
Отслеживайте поэтапное обновление
Плоскость управления автоматически выполнит поэтапное обновление:
Обновления версии Kubernetes
Обновление версии Kubernetes включает обновление как программного обеспечения плоскости управления, так и поддерживающих образов виртуальных машин.
Обязательные значения из матрицы поддержки ОС
Авторитетное сопоставление между выпуском ACP, его образом Alauda OS, версией Kubernetes, соответствующими версиями CoreDNS, etcd и Kube-OVN находится в Матрица поддержки ОС. Перед началом найдите строку, соответствующую целевой версии ACP; в этой строке содержатся все значения, необходимые для процедуры ниже.
Ячейки, которые вы берете из этой строки, сопоставляются с манифестами обновления следующим образом:
Теги образов CoreDNS и etcd относятся только к плоскости управления, поскольку clusterConfiguration — это поле KubeadmControlPlane. Рабочие узлы наследуют версии контейнерных образов из нового шаблона VM; MachineDeployment не содержит собственных тегов dns/etcd. Аннотация Kube-OVN находится в ресурсе Cluster, а не в KubeadmControlPlane, поскольку поставщик HCS отслеживает ее независимо от rollout плоскости управления Kubernetes.
Процедура
-
Создайте новый
HCSMachineTemplateдля целевой версии KubernetesСкопируйте существующий шаблон плоскости управления и примените его под новым
metadata.nameс целевымimageName:В
new-cp-template.yaml:-
Установите
metadata.nameв<new-template-name>. -
Установите
spec.template.spec.imageNameв значение Alauda OS Image Version из целевой строки в Матрица поддержки ОС. -
Удалите метаданные, сгенерированные сервером (
resourceVersion,uid,generation,creationTimestamp,managedFields, annotationkubectl.kubernetes.io/last-applied-configuration), а также все полеstatus. -
Не заполняйте поля идентичности времени выполнения, включая
spec.template.spec.providerIDиspec.template.spec.serverId. Поставщик HCS устанавливаетproviderIDвhcs://<cluster-name>/<machine-name>иserverIdв идентификатор экземпляра HCS ECS после создания VM; предварительное заполнение этих значений в шаблоне ломает привязку идентичности контроллером.
-
-
Примените исправление
KubeadmControlPlaneс целевыми значениями KubernetesОбновите ресурс
KubeadmControlPlaneодной правкой, чтобыspec.version, тег образа CoreDNS, тег образа etcd и ссылка на инфраструктурный шаблон оставались согласованы с одним и тем же релизом Alauda OS:-
spec.version← Версия Kubernetes из строки OS Support Matrix -
spec.kubeadmConfigSpec.clusterConfiguration.dns.imageTag← столбец coredns из той же строки -
spec.kubeadmConfigSpec.clusterConfiguration.etcd.local.imageTag← столбец etcd из той же строки -
spec.machineTemplate.infrastructureRef.name← имя новогоHCSMachineTemplate, созданного на шаге 1
Одного только обновления
spec.versionнедостаточно. Теги образов CoreDNS и etcd должны обновляться вместе с версией Kubernetes, поскольку они собираются из одного и того же релиза Alauda OS; если оставить их на предыдущих значениях, это может привести к тому, что поды CoreDNS и etcd не будут соответствовать новой minor-версии Kubernetes.Сохраняйте
spec.rolloutStrategy.rollingUpdate.maxSurge: 0, если связанный пул плоскости управления использует постоянные диски. Новый узел должен повторно использовать тот же фиксированный hostname и слот диска после удаления старого узла. -
-
Обновите chart Kube-OVN на рабочем кластере
Kube-OVN — это компонент жизненного цикла Core, но на immutable OS поставщик HCS не привязывает его версию chart к версии Kubernetes кластера. Версия chart хранится в отдельном
AppReleaseс именемcni-kube-ovnв namespacecpaas-systemрабочего кластера, и вы переводите ее вперед в два шага: сначала обновляете аннотацию в ресурсеClusterдля учета и будущего пересоздания, затем напрямую изменяете существующийAppRelease, чтобы повысить revision chart.WARNINGПочему на HCS требуются два шага
Поставщик HCS создает
AppReleasecni-kube-ovnв первый раз, когда кластер собирается, а затем синхронизирует только блокspec.values(имя кластера, CIDR, registry, список узлов плоскости управления). Он не записываетspec.source.charts[0].targetRevisionв уже существующийAppRelease. В результате изменениеcpaas.io/kube-ovn-versionв ресурсеClusterсамо по себе не меняет версию chart на рабочем кластере. Аннотацию по-прежнему необходимо обновить, чтобы зафиксированная целевая версия соответствовала строке OS Support Matrix, но само обновление chart выполняется через прямое исправлениеAppRelease.3.1. Обновите аннотацию
cpaas.io/kube-ovn-versionв ресурсеClusterАннотация не обновляется автоматически при изменении
spec.version; держите ее в соответствии со столбцом kube-ovn (chart) целевой строки.3.2. Измените revision chart
AppReleaseна рабочем кластереВыполняйте исправление на API server рабочего кластера (а не на bootstrap KIND и не на
global-кластере):Используйте то же значение, которое вы указали в аннотации.
releaseName(cpaas-kube-ovn) иname(acp/chart-cpaas-kube-ovn) управляются поставщиком; не изменяйте их.3.3. Дождитесь завершения синхронизации
Отслеживайте фазу chart и установленный revision:
Нормальная последовательность —
Upgrading → HealthChecking → Success. На небольших кластерах полный переход обычно завершается примерно за одну минуту. Интерпретируйте фазы следующим образом:WARNINGНе объявляйте обновление завершенным только по
installedRevision. Это поле переключается на целевое значение во времяHealthChecking, еще до того, как pod-ы будут подтверждены как Ready. Chart считается обновленным только тогда, когдаphaseравноSuccessиinstalledRevisionсовпадает с целевым значением.API
AppReleaseтакже определяетDownloading,Installing,Syncing,DownloadFailed,DeployFailedиNotReady. Первые три являются переходными, и обновление должно завершиться самостоятельно. Последние три указывают на сбой, который требует ручного анализа; начните сkubectl describe apprelease cni-kube-ovn -n cpaas-system, чтобы прочитать полеmessageдля каждого состояния. -
Проверьте ход обновления
Отслеживайте процесс поэтапного обновления:
Обновления рабочих узлов
Обновления рабочих узлов управляются через ресурсы MachineDeployment.
Для подробных процедур работы с рабочими узлами см. раздел Управление узлами.
Откат неудачного обновления
Если поэтапное обновление завершается неудачно — новые VM не загружаются, узлы не переходят в состояние Ready, либо новая minor-версия Kubernetes выявляет несовместимость — верните ссылку на шаблон и поля версии Kubernetes к предыдущим значениям. Cluster API рассматривает возврат как новый drift схемы и поэтапно откатывает машины v2 к предыдущему шаблону, по одной за раз.
Перед откатом нужно усвоить три факта:
- Старых VM больше нет. Они были удалены во время обновления. Откат использует старый шаблон для создания нового набора заменяющих машин; он не восстанавливает исходные VM.
- Старый ресурс
HCSMachineTemplateдолжен по-прежнему существовать. Не удаляйте предыдущий шаблон до тех пор, пока новый rollout не станет исправным. Если вы уже удалили его, восстановите его из системы контроля версий или резервной копии перед откатом. - Только постоянные диски, управляемые пулом, сохраняют локальное состояние узла. Данные, записанные в
HCSMachineTemplate.spec.template.spec.dataVolumes[]во время окна обновления, теряются при замене этой VM. Данные, записанные на диски, объявленные вHCSMachineConfigPool.spec.configs[].persistentDisks[], сохраняются и переподключаются к заменяющей VM. Данные приложений по-прежнему следует хранить во внешнем постоянном хранилище, таком как HCS EVS CSI, если только ваша операционная модель явно не зависит от локального состояния узла.
Процедура:
-
Плоскость управления: измените
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: если chart Kube-OVN был обновлен, откатите его тем же способом, которым выполнялось обновление: сначала восстановите аннотацию, затем верните revision chart в
AppRelease. Проверьте результат тем же контролемinstalledRevision+phase=Success, который используется на шаге 3.
Если новая плоскость управления так и не достигла quorum etcd, контроллер KubeadmControlPlane может отказаться откатывать какие-либо машины, поскольку его предварительные проверки блокируются из-за неисправного etcd. Сначала восстановите quorum etcd (вмешательство оператора), а затем повторите откат.