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

    Путь обновления

    На этой странице описан путь традиционной операционной системы для кластера global. Если ваш кластер global работает на Immutable Infrastructure (Alauda OS on Huawei DCS, VMware vSphere или Huawei Cloud Stack), шаг Kubernetes описан в документации по immutable infrastructure — см. Обновление глобального кластера на Immutable Infrastructure. Этапы Core, Aligned и Agnostic, описанные на этой странице, по-прежнему применимы к кластерам на immutable OS; отличается только способ развертывания Kubernetes.

    MySQL-PXC удалён в Alauda Database Service for MySQL v4.3.0

    Обновление глобального кластера также обновит оператор MySQL. Если у вас есть экземпляры PXC, после обновления оператора они перейдут в неуправляемое состояние. См. Руководство по обновлению оператора MySQL для инструкций по миграции перед обновлением.

    состоит из глобального кластера и одного или нескольких кластеров рабочих нагрузок. Чтобы перевести платформу на новую версию ACP Distribution Version, сначала обновите глобальный уровень до целевой версии Distribution Version, а затем обновите кластеры рабочих нагрузок до той же версии Distribution Version.

    ACP 4.3 использует workflow на базе CVO для обновления кластера. Типичное обновление кластера global включает подготовку артефактов, предварительные проверки, запрос на обновление и наблюдение за статусом.

    Перед обновлением кластера global до ACP 4.3 убедитесь, что каждый кластер рабочих нагрузок работает на совместимой версии Kubernetes. Для ACP 4.3 совместимыми версиями являются 1.34, 1.33, 1.32 и 1.31. Это требование является отдельным от более широкого диапазона управления сторонними кластерами.

    Это требование к совместимым версиям применяется независимо от того, используется ли в среде global DR. Global DR изменяет процедуру, используемую для обновления глобального уровня, но не изменяет требование, согласно которому кластеры рабочих нагрузок должны оставаться в пределах диапазона совместимых версий Kubernetes до тех пор, пока глобальный уровень не будет обновлён до целевой версии Distribution Version.

    Обновления глобального кластера выполняются по проверенной процедуре на базе upgrade.sh, описанной на этой странице. Вы можете запросить обновление глобального кластера из Web Console, обновив ClusterVersionShadow.spec.desiredUpdate, или используя ACP CLI с --cluster=global. Полный workflow AC CLI и интерпретацию вывода см. в разделе Обновление кластеров. Полный синтаксис команд и флагов см. в Справочнике по административным командам AC CLI.

    Если в среде используется global DR, следуйте процедуре Global DR. В противном случае следуйте стандартному workflow ниже.

    Стандартный workflow

    Обновление глобального кластера выполняется по этапам в течение определённого временного окна. Большая часть работы выполняется до окна обслуживания, чтобы само окно оставалось коротким и предсказуемым:

    ЭтапКогдаЧто происходитВлияние на кластер
    1. Синхронизация артефактовВ любое время до окнаupgrade.sh --only-sync-image загружает образы и артефакты плагинов в registry; violet отправляет плагины Aligned и Agnostic.Нет — только registry, без простоя.
    2. PreflightЗа 1–2 недели до окнаupgrade.sh --preflight проверяет готовность к обновлению. Устраните все блокирующие элементы до открытия окна.Нет — проверка только для чтения.
    3. ОбновлениеВо время окна обслуживанияupgrade.sh --skip-sync-image разворачивает или обновляет cluster version operator (CVO); затем выполняется запрос на обновление и наблюдение.Кластер обновляется.

    Этапы 1 и 2 не изменяют состояние кластера — выполняйте их заранее, чтобы в окно обслуживания попал только этап 3. Для небольшой среды или лаборатории вместо этого можно выполнить одну команду bash upgrade.sh, которая одновременно выполняет синхронизацию и развёртывание CVO, но в производственных окнах обычно эти действия разделяют.

    Синхронизация артефактов обновления

    Когда: в любое время до окна обслуживания. Этот шаг загружает артефакты в registry и не изменяет состояние кластера.

    Из каталога с распакованным core package выполните upgrade.sh в режиме только синхронизации:

    bash upgrade.sh --only-sync-image

    --only-sync-image загружает образы и артефакты плагинов без развёртывания cluster version operator. CVO будет развёрнут позже, уже в окне обслуживания — см. Развёртывание cluster version operator.

    upgrade.sh синхронизирует артефакты, необходимые для workflow на базе CVO, включая:

    ТипСодержимоеНазначение
    Образы продуктаproduct-imageИспользуются для определения целевой версии и образа в ProductManifest и CVO.
    Образ CVOcluster-version-operatorИспользуется для развёртывания или обновления cluster version operator.
    Артефакты плагиновplugins/*.tgzИспользуются планом обновления, когда требуются артефакты плагинов.

    upgrade.sh охватывает Core . Плагины Aligned и Agnostic не отправляются upgrade.sh; отправьте их с помощью violet до запроса на обновление, используя пакеты, загруженные в Подготовке перед обновлением.

    Тип жизненного циклаИнструмент для отправкиПлагины кластераОператоры
    Плагины Alignedviolet pushОтправьте один раз на глобальный уровень. Отправленный плагин кластера станет доступным для установки и обновления на каждом кластере платформы.Отправьте на глобальный уровень, а также на каждый кластер рабочих нагрузок, на котором работает оператор. Рекомендуется отправлять операторы на каждый кластер в течение окна глобального обновления; это позволит окну обновления рабочих нагрузок пройти без дополнительного шага отправки.
    Плагины Agnosticviolet pushТо же, что и выше.То же, что и выше.
    # Push Aligned plugins (cluster plugins) — global only
    violet push <path/to/aligned-cluster-plugin-package> \
      --target-catalog-source "platform" \
      --platform-address "https://<your-platform-domain>" \
      --platform-token "<platform_token>"
    
    # Push Aligned or Agnostic operators — to global, and to each workload cluster that runs the operator
    violet push <path/to/operator-package> \
      --target-catalog-source "platform" \
      --platform-address "https://<your-platform-domain>" \
      --platform-token "<platform_token>" \
      --clusters "global,<workload-cluster-1>,<workload-cluster-2>"

    Рекомендуется отправлять каждый пакет оператора на каждый кластер из окна глобального обновления. Если окно глобального обновления уже прошло и вы обнаружили, что на кластере рабочих нагрузок отсутствует пакет оператора, вы всё ещё можете отправить его на этот кластер перед обновлением рабочих нагрузок — см. Обновление кластеров рабочих нагрузок.

    Поведение registry зависит от конфигурации среды:

    СценарийПоведение
    Указан --registryИспользовать указанный registry напрямую.
    --registry не указанСчитать адрес registry из ProductBase.spec.registry.address.
    Встроенный registry платформыПересобрать адрес доступа, используя global VIP.
    Внешний registryАвтоматически установить SKIP_SYNC_IMAGE=true и пропустить синхронизацию образов.
    Требуется загрузка образов, но учётные данные не указаныСчитать username и password из Secret cpaas-system/registry-admin.

    Когда целевой registry не является registry по умолчанию платформы, добавьте параметры registry:

    ПараметрНазначение
    --registryУказать адрес целевого registry.
    --username / --passwordУказать учётные данные registry.

    Чтобы обойти проверку артефактов, когда известно, что она избыточна, добавьте --skip-check-artifacts.

    WARNING

    Не открывайте окно обслуживания, пока синхронизация образов и плагинов не завершена.

    Выполнение предварительных проверок

    Когда: за 1–2 недели до окна обслуживания, чтобы успеть устранить все блокирующие элементы до его открытия.

    Запустите upgrade.sh в режиме preflight:

    bash upgrade.sh --preflight

    Preflight выполняется только для чтения — он проверяет готовность к обновлению и не изменяет состояние кластера.

    Preflight возвращает две части:

    ВыводНазначение
    SummaryПоказывает общий результат, текущую версию, целевую версию и целевой образ.
    ChecksПоказывает результат каждой отдельной проверки.

    Набор проверок по умолчанию включает:

    • ResourcePatchUpgradeable
    • ClusterVersionUpgradeable
    • VersionUpgradePath
    • KubernetesVersionSupported
    • DockerRuntimeUnsupported
    • ClusterRunning
    • ClusterModuleStable
    • ControlPlaneStaticPodsPresent
    • CustomEtcdBackupCronJobsAbsent
    • CRIUpgradePodsAbsent
    • ModuleInfoStable
    • PlatformLicense

    Обработка блокировок preflight при необходимости

    Когда: до окна обслуживания. Устраните все блокирующие элементы, обнаруженные preflight, чтобы не тратить окно на устранение неполадок.

    Если ResourcePatchUpgradeable завершается с reason=UnexemptResourcePatches, проверьте блокирующий ResourcePatch и добавьте требуемую аннотацию исключения:

    kubectl -n cpaas-system get cvsh global \
      -o jsonpath='{range .status.preflight.checks[?(@.name=="ResourcePatchUpgradeable")]}{.state}{"\t"}{.reason}{"\t"}{.message}{"\n"}{end}'
    
    kubectl get resourcepatches <rp-name> -o yaml

    Ключ аннотации по умолчанию — config.cpaas.io/exempt-for-ver.

    kubectl annotate resourcepatches <rp-name> \
      config.cpaas.io/exempt-for-ver=4.3.0 \
      --overwrite

    Если для временной диагностики необходимо отключить определённые проверки, настройте cpaas-system/cvo-config:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cvo-config
      namespace: cpaas-system
    data:
      preflight: |
        disabled:
          - ResourcePatchUpgradeable
          - VersionUpgradePath

    Развёртывание cluster version operator

    Когда: в начале окна обслуживания.

    Запустите upgrade.sh в режиме skip-sync. Синхронизация пропускается, поскольку артефакты уже были загружены на шаге Синхронизация артефактов обновления:

    bash upgrade.sh --skip-sync-image

    Это разворачивает или обновляет cluster version operator (CVO) и завершает оставшуюся подготовку. CVO управляет обновлением Core и плагинов Aligned после того, как обновление будет запрошено на следующем шаге.

    Запрос обновления

    После развёртывания cluster version operator запросите обновление через одну из следующих точек входа. Все три точки входа эквивалентны; выберите ту, которая соответствует вашей операционной модели.

    Web Console
    ACP CLI
    kubectl

    Используйте эту точку входа после того, как целевая версия станет доступна для кластера. Запрос выполняется в два шага:

    • На шаге 1 просмотрите список RPCH.
    • Нажмите Acknowledge, чтобы перейти к Step 2.
    • На шаге 2 проверьте Current Version и Target Version. На этом этапе страница не показывает список плагинов или панель предупреждения.
    • Целевая версия определяется подготовленными артефактами обновления и не может быть выбрана вручную в Web Console.
    • Нажмите Start Upgrade.
    • Подтвердите действие в диалоговом окне.
    • После подтверждения страница покажет, что запрос на обновление отправлен, а действие перейдёт в состояние выполнения.

    Наблюдение за выполнением

    Используйте следующую команду, чтобы проверить общий статус:

    kubectl get cvsh -n cpaas-system

    Важные поля статуса:

    ПолеНазначение
    status.conditionsОсновная точка входа в общий статус.
    status.preflight.observedAtВремя последнего запуска preflight.
    status.preflight.checksПодробный результат каждого элемента preflight.
    status.currentТекущая применённая версия и образ.
    status.desiredЦелевая версия и образ, для которых выполняется согласование.
    status.historyИстория обновлений, самые новые сверху.
    status.stagesЭтапы обновления и состояние выполнения по каждому этапу.

    Сначала обратите внимание на следующие условия:

    УсловиеИнтерпретация
    PreflightReadyTrue означает, что preflight пройден.
    ReadyTrue означает, что кластер достиг целевой версии.
    ReconcilingTrue означает, что обновление всё ещё выполняется.
    StalledTrue означает, что обновление заблокировано и требует вмешательства.

    Полезная диагностика:

    kubectl -n cpaas-system get cvsh global \
      -o jsonpath='{range .status.conditions[*]}{.type}{"\t"}{.status}{"\t"}{.reason}{"\t"}{.message}{"\n"}{end}'
    
    kubectl -n cpaas-system get cvsh global \
      -o jsonpath='{.status.preflight.observedAt}{"\n"}{range .status.preflight.checks[*]}{.name}{"\t"}{.policy}{"\t"}{.state}{"\t"}{.reason}{"\t"}{.message}{"\n"}{end}'
    
    kubectl -n cpaas-system get cvsh global \
      -o jsonpath='{range .status.history[*]}{.version}{"\t"}{.state}{"\t"}{.startedTime}{"\t"}{.completionTime}{"\n"}{end}'

    (Условно) Обновление Service Mesh Essentials

    Если установлен Service Mesh v1, перед обновлением кластеров рабочих нагрузок обратитесь к документации по Плагин кластера Alauda Service Mesh Essentials.

    Обновление Agnostic-плагинов из Marketplace

    CVO управляет Core и плагинами Aligned. Agnostic-плагины не входят в область действия CVO и должны обновляться по отдельности после того, как кластер достигнет целевой версии Distribution Version. Нужно ли обновлять каждый Agnostic-плагин, зависит от его собственной совместимости с Kubernetes — см. release notes плагина на предмет совместимости с целевой версией Kubernetes.

    Для каждого используемого на глобальном кластере Agnostic-плагина:

    1. В Web Console переключитесь в представление Administrator.
    2. Перейдите в Marketplace > Cluster Plugins для Agnostic-плагинов кластера либо в workflow оператора для Agnostic-операторов.
    3. Выберите целевой плагин или оператор и запустите обновление. Workflow обновления Marketplace использует пакет, ранее отправленный с помощью violet.

    Если вы пропустили отправку Agnostic-плагина во время предварительной подготовки и Marketplace не предлагает целевую версию, сначала выполните шаг violet push, а затем повторите обновление через Marketplace.

    После обновления

    • Обновить Alauda AI
    • Обновить Alauda DevOps
    • После того как все кластеры рабочих нагрузок также достигнут ACP 4.3, завершите усиление PKCE, следуя инструкции Отключение метода PKCE Plain.

    • ACP 4.3 исправляет проблему аутентификации API, при которой к некоторым API ранее можно было получить доступ без аутентификации. После того как глобальный кластер достигнет ACP 4.3, обновите следующие L5-плагины до версий, совместимых с ACP v4.3. В противном случае их страницы UI могут не открываться:

      • Alauda DevOps v3
      • Alauda AI Essentials
      • Alauda Hyperflux
      • Alauda Container Platform Data Services Essentials
    • После обновления плагинов убедитесь, что каждая указанная страница UI плагина успешно открывается.

    Процедура Global DR

    Используйте эту процедуру, если в среде есть основной глобальный кластер и резервный глобальный кластер. Нижеописанные шаги, специфичные для DR, выполняются дополнительно к стандартному workflow CVO.

    Проверьте среду DR перед обновлением

    Следуйте обычным процедурам проверки global DR, чтобы убедиться, что данные в резервном глобальном кластере согласованы с основным глобальным кластером. Дополнительную информацию о топологии DR и workflow синхронизации см. в разделе Аварийное восстановление глобального кластера.

    Если обнаружены несоответствия, не удаляйте плагин синхронизации etcd на следующем шаге и перед продолжением обратитесь в техническую поддержку. Удаление плагина, когда в резервном глобальном кластере отсутствуют данные, которые есть в основном, может привести к некорректному разрешению owner references, а объекты Machine узлов кластера рабочих нагрузок — включая кластеры на immutable OS, где это приведёт к уничтожению базовой виртуальной машины — могут быть удалены.

    На обоих глобальных кластерах выполните следующую команду, чтобы убедиться, что ни один узел Machine не находится в состоянии, отличном от running:

    kubectl get machines.platform.tkestack.io

    Если такие узлы существуют, устраните проблему до продолжения.

    Удалите плагин синхронизации etcd с резервного глобального кластера

    1. Откройте Web Console резервного глобального кластера через его IP или VIP.
    2. Переключитесь в представление Administrator.
    3. Перейдите в Marketplace > Cluster Plugins и выберите кластер global.
    4. Найдите etcd Synchronizer и удалите его.
    5. Дождитесь завершения удаления, прежде чем продолжать.

    Синхронизируйте артефакты обновления на обоих глобальных кластерах

    Выполните Синхронизацию артефактов обновления из стандартного workflow на обоих кластерах: и на резервном, и на основном.

    Используйте один и тот же режим синхронизации на обоих кластерах.

    Обновите резервный глобальный кластер

    Если вы будете использовать Web Console на резервном глобальном кластере, убедитесь, что ProductBase резервного кластера включает резервный VIP в spec.alternativeURLs:

    apiVersion: product.alauda.io/v1alpha2
    kind: ProductBase
    metadata:
      name: base
    spec:
      alternativeURLs:
        - https://<standby-cluster-vip>

    После завершения синхронизации выполните оставшиеся шаги из стандартного workflow на резервном глобальном кластере:

    1. Выполните предварительные проверки
    2. Разверните cluster version operator
    3. Запросите обновление
    4. Наблюдайте за выполнением до тех пор, пока резервный глобальный кластер не достигнет целевой версии

    Обновите основной глобальный кластер

    После того как резервный глобальный кластер достигнет целевой версии, выполните оставшиеся шаги из стандартного workflow на основном глобальном кластере:

    1. Выполните предварительные проверки
    2. Разверните cluster version operator
    3. Запросите обновление
    4. Наблюдайте за выполнением до тех пор, пока основной глобальный кластер не достигнет целевой версии

    Переустановите плагин синхронизации etcd и проверьте состояние синхронизации

    Перед переустановкой плагина убедитесь, что порт 2379 корректно проброшен с обоих VIP глобального кластера на их узлы control plane, если используется такой режим проброса. Проброс порта через load balancer не требуется, если резервный глобальный кластер может напрямую обращаться к активному глобальному кластеру.

    Чтобы переустановить плагин:

    4.3.1+
    4.3.0
    1. Создайте или обновите Secret etcd-sync-active-cluster-token в cpaas-system. Сначала получите bearer token для доступа к API server активного глобального кластера с активного глобального кластера. Затем скопируйте вывод команды и используйте его при создании Secret. Secret хранит токен в ключе данных token. Используйте этот Secret через Active Global Cluster Token Secret. Наследуемая конфигурация с обычным токеном остаётся только как резервный вариант для совместимости и не является рекомендуемым операционным путём.

      # Run this command on the active cluster.
      kubectl -n cpaas-system get secret k8sadmin -o jsonpath='{.data.token}' | base64 -d

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

      ACTIVE_CLUSTER_TOKEN='<paste-the-token-from-the-active-cluster>'
      kubectl -n cpaas-system create secret generic etcd-sync-active-cluster-token \
        --from-literal=token="${ACTIVE_CLUSTER_TOKEN}" \
        --dry-run=client -o yaml | kubectl apply -f -
    2. Откройте Web Console резервного глобального кластера через его VIP и переключитесь в представление Administrator.

    3. Перейдите в Marketplace > Cluster Plugins и выберите кластер global.

    4. Найдите etcd Synchronizer, нажмите Install и настройте требуемые параметры.

    При настройке плагина:

    • Установите Active Global Cluster VIP в значение VIP активного глобального кластера.
    • Когда порт 2379 не проброшен через load balancer, корректно укажите Active Global Cluster ETCD Endpoints.
    • Установите Standby Cluster ETCD Endpoints в адрес etcd резервного кластера. Используйте значение по умолчанию, если локальная служба etcd не опубликована через другой endpoint.
    • Установите Active Global Cluster Token Secret в etcd-sync-active-cluster-token.
    • Используйте значение по умолчанию для Data Check Interval.
    • Оставьте Print detail logs отключённым, если только вы не выполняете диагностику.

    Во время переустановки система запускает Job etcd-sync-bootstrap перед стартом Deployment etcd-sync. Релиз продолжится только после того, как Job подготовит remote-etcd-ca, remote-etcd-issuer и remote-etcd-client.

    Проверьте bootstrap Job и runtime-ресурсы:

    kubectl get job -n cpaas-system etcd-sync-bootstrap
    kubectl logs -n cpaas-system job/etcd-sync-bootstrap
    kubectl get secret -n cpaas-system remote-etcd-ca
    kubectl get issuer -n cpaas-system remote-etcd-issuer
    kubectl get certificate -n cpaas-system remote-etcd-client
    kubectl get secret -n cpaas-system remote-etcd-client

    Дождитесь, пока kubectl get lease -n cpaas-system etcd-sync-mirror -o jsonpath='{.spec.holderIdentity}' вернёт непустое значение, прежде чем продолжать.

    Проверьте, что sync Pods запущены на резервном глобальном кластере, и определите текущий leader:

    kubectl get po -n cpaas-system -l app=etcd-sync
    kubectl get lease -n cpaas-system etcd-sync-mirror
    leader_pod=$(kubectl get lease -n cpaas-system etcd-sync-mirror -o jsonpath='{.spec.holderIdentity}')
    kubectl logs -n cpaas-system "$leader_pod" | grep -E "Acquired leader lease|Start Sync update"

    Если ресурсы с зависимостями ownerReference нужно пересинхронизировать, пересоздайте текущий Pod leader после появления Start Sync update:

    leader_pod=$(kubectl get lease -n cpaas-system etcd-sync-mirror -o jsonpath='{.spec.holderIdentity}')
    kubectl delete po -n cpaas-system "$leader_pod"

    Проверьте состояние синхронизации:

    mirror_svc=$(kubectl get svc -n cpaas-system etcd-sync-monitor -o jsonpath='{.spec.clusterIP}')
    ipv6_regex="^[0-9a-fA-F:]+$"
    if [[ $mirror_svc =~ $ipv6_regex ]]; then
      mirror_host="[$mirror_svc]"
    else
      mirror_host="$mirror_svc"
    fi
    curl -g "http://${mirror_host}/check"

    Интерпретация вывода:

    • LOCAL ETCD missed keys: ключи существуют в основном глобальном кластере, но отсутствуют в резервном. Часто это устраняется после перезапуска текущего Pod leader etcd-sync.
    • LOCAL ETCD surplus keys: ключи существуют в резервном глобальном кластере, но отсутствуют в основном. Перед удалением обсудите их с вашей операционной командой.

    Связанная документация