Обновление кластера global
В этом документе описывается, как обновить кластер global, работающий на Immutable Infrastructure. При обновлении узлы заменяются новыми образами Alauda OS, управляемыми провайдером Cluster API; обновление узлов на месте не используется.
Содержание
Когда использовать этот путьОбзор двухэтапного обновленияОбщие предварительные требованияПроцедураШаг 1 — Обновите манифест кластераglobalШаг 2 — Примените обновленный манифестШаг 3 — Отслеживайте поэтапную заменуПроверкаСоображения по откатуСледующие шагиКогда использовать этот путь
Выбирайте этот путь обновления, если:
- Кластер
globalизначально был установлен на Immutable Infrastructure. См. Установка кластераglobal. - Ваша инфраструктура относится к одному из документированных провайдеров: Huawei DCS или Huawei Cloud Stack. Поддержка VMware vSphere и bare-metal для кластера
globalзапланирована.
Для кластеров global на traditional-OS вместо этого используйте стандартный путь обновления.
Обзор двухэтапного обновления
Как и workload-кластеры, кластер global на Immutable Infrastructure обновляется в два этапа.
- Фаза 1 — Distribution Version: согласованные и независимые расширения обновляются до целевой Distribution Version. Эта процедура общая для workload-кластеров; см. Обновление кластеров для описания механики Фазы 1.
- Фаза 2 — Kubernetes и образ ОС: узлы заменяются новыми образами Alauda OS, содержащими целевую версию Kubernetes. В этом документе основное внимание уделяется Фазе 2 для кластера
global.
Перед началом Фазы 2 убедитесь, что каждый workload-кластер входит в матрицу Compatible Versions целевой Distribution Version. Кластеры workload, выходящие за допустимый диапазон, необходимо сначала обновить.
Общие предварительные требования
- Кластер
globalзавершил Фазу 1 (обновление Distribution Version). - Резервная копия etcd кластера
globalбыла создана и проверена. - В реестре платформы доступны новый образ Alauda OS и соответствующие версии
KubeadmControlPlaneиMachineDeployment. - План окна обслуживания, учитывающий поэтапную замену control plane.
- Для межверсийных обновлений, охватывающих более одного minor-релиза Kubernetes, заранее подготовлены образы Core и образы ОС промежуточной версии. См. Подготовка к межверсийному обновлению.
Процедура
После установки контроллеры Cluster API, управляющие кластером global, работают в самом кластере global. Используйте kubeconfig кластера global для команд kubectl в этой процедуре.
Шаг 1 — Обновите манифест кластера global
Обновите манифесты Cluster API кластера global, чтобы они ссылались на новый образ Alauda OS и версию Kubernetes. Поля манифеста, которые нужно обновить, зависят от провайдера.
Для DCS создавайте новые шаблоны immutable infrastructure вместо редактирования шаблонов, на которые уже ссылаются работающие машины.
Обновите ресурсы control plane:
- Создайте новый
DCSMachineTemplateдля целевого образа и установитеspec.template.spec.vmTemplateNameв значение шаблона Alauda OS, соответствующего целевой версии Kubernetes. - Сохраняйте закрепленные локальные данные узла, включая
/var/cpaas, вDCSIpHostnamePool.spec.pool[].persistentDisk. Не переносите сохраненные диски обратно вDCSMachineTemplate. - Установите
KubeadmControlPlane.spec.versionв значение целевой версии Kubernetes. - Укажите
KubeadmControlPlane.spec.machineTemplate.infrastructureRef.nameна новыйDCSMachineTemplate. - Оставьте
KubeadmControlPlane.spec.rolloutStrategy.rollingUpdate.maxSurge: 0, если кластер использует постоянные диски, управляемые пулом.
Обновите ресурсы рабочих узлов:
- Создайте новый
DCSMachineTemplateдля рабочих узлов с целевымvmTemplateName. - Установите
MachineDeployment.spec.template.spec.versionкаждого объекта в значение целевой версии Kubernetes. - Укажите
MachineDeployment.spec.template.spec.infrastructureRef.nameкаждого объекта на новыйDCSMachineTemplateрабочих узлов. - Оставьте
MachineDeployment.spec.strategy.rollingUpdate.maxSurge: 0, если пул рабочих узлов использует постоянные диски, управляемые пулом.
Постоянные диски, управляемые пулом, объявляются в IP-пуле, а не в шаблоне машины:
Используйте isThin только если среда DCS требует явного значения thin-provisioning. Если этот параметр опущен, провайдер не отправляет isThin, и DCS использует значение платформы по умолчанию. Новые постоянные тома создаются как независимые постоянные обычные тома.
Используйте состояние IP-пула, чтобы убедиться, что сохраненные диски отсоединяются от старых VM и подключаются к заменяющим VM во время поэтапной замены.
Шаг 2 — Примените обновленный манифест
Примените обновленный манифест к кластеру global.
Провайдер Cluster API начинает заменять узлы control plane и рабочие узлы, используя новый образ. Когда задано maxSurge: 0, каждый старый узел сначала выводится из эксплуатации и удаляется, прежде чем его замена сможет повторно использовать тот же фиксированный идентификатор, IP-адрес или сохраненный диск.
Шаг 3 — Отслеживайте поэтапную замену
Следите за поэтапной заменой, пока не будут заменены все узлы control plane и рабочие узлы.
Обновление считается завершенным, когда каждый Machine сообщает новую версию Kubernetes и Phase: Running, а KubeadmControlPlane сообщает Ready: True для новой версии.
Проверка
После завершения поэтапной замены убедитесь, что обновленный кластер global находится в исправном состоянии.
Все узлы должны сообщать новую версию Kubernetes, ClusterVersionShadow должен отражать целевую Distribution Version, а основные системные pods платформы должны иметь состояние Running.
Соображения по откату
Откат после частичного обновления Фазы 2 зависит от провайдера. В общем случае:
Если обновление еще не заменило ни одного узла control plane, верните манифест к предыдущему образу и примените его повторно. Если узлы control plane уже были заменены, восстановите кластер из резервной копии etcd, созданной до начала обновления, а затем верните манифест.
Для кластеров DCS, использующих постоянные диски, управляемые пулом, перед откатом проверьте состояние дисков:
Сначала проверьте DCSIpHostnamePool.status.persistentDiskStatus перед удалением или пересозданием машин. Не удаляйте сохраненные тома DCS, перечисленные в DCSIpHostnamePool.spec.pool[].persistentDisk.
Оставляйте maxSurge: 0 при возврате к предыдущим шаблонам машин, чтобы замена выполнялась по одному узлу за раз. Если control plane уже был заменен, а состояние кластера неконсистентно, восстановите его из проверенной резервной копии etcd перед повторным применением предыдущего манифеста.
Следующие шаги
- Обновите workload-кластеры до той же Distribution Version: см. Обновление кластеров.
- Изучите изменения в конфигурации машин, поставляемые с новым образом: см. Конфигурация машин.