• Русский
  • Обновление кластера global

    В этом документе описывается, как обновить кластер global, работающий на Immutable Infrastructure. При обновлении узлы заменяются новыми образами Alauda OS, управляемыми провайдером Cluster API; обновление узлов на месте не используется.

    Когда использовать этот путь

    Выбирайте этот путь обновления, если:

    • Кластер global изначально был установлен на Immutable Infrastructure. См. Установка кластера global.
    • Ваша инфраструктура относится к одному из документированных провайдеров: Huawei DCS или Huawei Cloud Stack. Поддержка VMware vSphere и bare-metal для кластера global запланирована.

    Для кластеров global на traditional-OS вместо этого используйте стандартный путь обновления.

    Обзор двухэтапного обновления

    Как и workload-кластеры, кластер global на Immutable Infrastructure обновляется в два этапа.

    1. Фаза 1 — Distribution Version: согласованные и независимые расширения обновляются до целевой Distribution Version. Эта процедура общая для workload-кластеров; см. Обновление кластеров для описания механики Фазы 1.
    2. Фаза 2 — Kubernetes и образ ОС: узлы заменяются новыми образами Alauda OS, содержащими целевую версию Kubernetes. В этом документе основное внимание уделяется Фазе 2 для кластера global.
    Совместимость Фазы 1

    Перед началом Фазы 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. Поля манифеста, которые нужно обновить, зависят от провайдера.

    Huawei DCS
    VMware vSphere
    Huawei Cloud Stack
    Bare Metal

    Для 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-пуле, а не в шаблоне машины:

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: DCSIpHostnamePool
    metadata:
      name: <global-pool-name>
      namespace: cpaas-system
    spec:
      pool:
        - ip: <node-ip>
          hostname: <node-hostname>
          persistentDisk:
            - slot: 0
              quantityGB: 40
              datastoreName: <datastore-name>
              path: /var/cpaas
              format: xfs
              mountOptions:
                - defaults

    Используйте isThin только если среда DCS требует явного значения thin-provisioning. Если этот параметр опущен, провайдер не отправляет isThin, и DCS использует значение платформы по умолчанию. Новые постоянные тома создаются как независимые постоянные обычные тома.

    Используйте состояние IP-пула, чтобы убедиться, что сохраненные диски отсоединяются от старых VM и подключаются к заменяющим VM во время поэтапной замены.

    Шаг 2 — Примените обновленный манифест

    Примените обновленный манифест к кластеру global.

    kubectl --kubeconfig <global-kubeconfig> apply -f <updated-manifest>

    Провайдер Cluster API начинает заменять узлы control plane и рабочие узлы, используя новый образ. Когда задано maxSurge: 0, каждый старый узел сначала выводится из эксплуатации и удаляется, прежде чем его замена сможет повторно использовать тот же фиксированный идентификатор, IP-адрес или сохраненный диск.

    Шаг 3 — Отслеживайте поэтапную замену

    Следите за поэтапной заменой, пока не будут заменены все узлы control plane и рабочие узлы.

    kubectl --kubeconfig <global-kubeconfig> get machines -A -o wide
    kubectl --kubeconfig <global-kubeconfig> get kubeadmcontrolplane -A

    Обновление считается завершенным, когда каждый Machine сообщает новую версию Kubernetes и Phase: Running, а KubeadmControlPlane сообщает Ready: True для новой версии.

    Проверка

    После завершения поэтапной замены убедитесь, что обновленный кластер global находится в исправном состоянии.

    kubectl --kubeconfig <global-kubeconfig> get nodes -o wide
    kubectl --kubeconfig <global-kubeconfig> get clusterversionshadow -o yaml
    kubectl --kubeconfig <global-kubeconfig> get pods -n cpaas-system

    Все узлы должны сообщать новую версию Kubernetes, ClusterVersionShadow должен отражать целевую Distribution Version, а основные системные pods платформы должны иметь состояние Running.

    Соображения по откату

    Откат после частичного обновления Фазы 2 зависит от провайдера. В общем случае:

    Если обновление еще не заменило ни одного узла control plane, верните манифест к предыдущему образу и примените его повторно. Если узлы control plane уже были заменены, восстановите кластер из резервной копии etcd, созданной до начала обновления, а затем верните манифест.

    Huawei DCS
    VMware vSphere
    Huawei Cloud Stack
    Bare Metal

    Для кластеров DCS, использующих постоянные диски, управляемые пулом, перед откатом проверьте состояние дисков:

    Сначала проверьте DCSIpHostnamePool.status.persistentDiskStatus перед удалением или пересозданием машин. Не удаляйте сохраненные тома DCS, перечисленные в DCSIpHostnamePool.spec.pool[].persistentDisk.

    Оставляйте maxSurge: 0 при возврате к предыдущим шаблонам машин, чтобы замена выполнялась по одному узлу за раз. Если control plane уже был заменен, а состояние кластера неконсистентно, восстановите его из проверенной резервной копии etcd перед повторным применением предыдущего манифеста.

    Следующие шаги