Обновление кластера Kubernetes с помощью обработчика AKS в Azure Stack Hub

Обработчик AKS позволяет обновить кластер Kubernetes, который изначально был развернут с помощью средства в Azure Stack Hub. Вы можете обслуживать кластеры с помощью обработчика AKS. Задачи обслуживания выполняются так же, как для любой системы IaaS. Следует знать о доступности новых обновлений и применять их с помощью обработчика AKS.

Обновление кластера

Команда "Upgrade" (Обновление) обновляет версию Kubernetes и базовый образ ОС. При каждом выполнении команды обновления для каждого узла кластера обработчик AKS создает новую виртуальную машину с помощью базового образа AKS, связанного с используемой версией aks-engine .

Для обработчика AKS версии 0.73.0 и более поздних можно использовать aks-engine upgrade команду для поддержания валюты каждого узла master и агента в кластере.

Для обработчика AKS версии 0.75.3 и более поздних можно использовать aks-engine-azurestack upgrade команду для поддержания валюты каждого узла master и агента в кластере.

Корпорация Майкрософт не управляет вашим кластером. Но корпорация Майкрософт предоставляет средство и образ виртуальной машины, которые можно использовать для управления кластером.

Для развернутого кластера обновления охватывают:

  • Kubernetes
  • поставщик Kubernetes в Azure Stack Hub;
  • базовая операционная система.

При обновлении рабочего кластера учитывайте следующее:

  • Используете ли вы правильную спецификацию кластера (apimodel.json) и группу ресурсов для целевого кластера?
  • Вы используете надежный компьютер для клиентского компьютера для запуска обработчика AKS и с которого выполняются операции обновления?
  • Убедитесь, что у вас есть и нормально работает резервный кластер.
  • Если это возможно, выполняйте команду на виртуальной машине в среде Azure Stack Hub, чтобы снизить число сетевых прыжков и рисков сбоев подключения.
  • Убедитесь, что ваша подписка имеет достаточно пространства для завершения процесса. Этот процесс связан с выделением новых виртуальных машин.
  • Не запланировано обновлений системы или других задач.
  • Настройте промежуточное обновление в кластере, настройки которого точно совпадают с параметрами рабочего кластера, и проверьте в нем обновление перед тем, как запускать его в рабочем кластере.

Шаги для обновления к более новой версии Kubernetes

Примечание

Базовый образ AKS также обновляется, если вы используете более новую версию aks-engine и образ доступен в Marketplace.

В приведенных ниже инструкциях используются минимальные шаги для выполнения обновления. Дополнительные сведения см. в статье Обновление кластеров Kubernetes.

  1. Сначала вам нужно определить версии, которые можно выбрать для обновления. Возможная версия зависит от текущей версии. Используйте полученное значение версии для выполнения обновления. Версии Kubernetes, поддерживаемые обработчиком AKS, можно перечислить, выполнив следующую команду:

    Примечание

    Для AKSe версии 0.75.3 и выше команда для получения версий обработчика AKS имеет значение aks-engine-azurestack get-versions.

    aks-engine get-versions --azure-env AzureStackCloud
    

    Полное сопоставление подсистемы AKS, базового образа AKS и версий Kubernetes см. в разделе Поддерживаемые версии обработчика AKS.

  2. Соберите сведения, которые понадобятся для выполнения команды upgrade. Команда upgrade использует следующие параметры:

    Параметр Пример Описание
    azure-env AzureStackCloud Используйте AzureStackCloud, чтобы сообщить обработчику AKS, что целевой платформой является Azure Stack Hub.
    location local Название региона для Azure Stack Hub. Для ASDK параметр региона нужно настроить как local.
    resource-group kube-rg Введите имя новой группы ресурсов или выберите существующую. Имя ресурса должно содержать буквенно-цифровые символы. Оно вводится в нижнем регистре.
    subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Введите идентификатор подписки. Дополнительные сведения см. в разделе Подписка на предложение.
    api-model ./kubernetes-azurestack.json Путь к файлу конфигурации кластера или модели API.
    client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Введите GUID субъекта-службы. Идентификатор клиента определяется как идентификатор приложения, когда администратор Azure Stack Hub создает субъект-службу.
    client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Введите секрет субъекта-службы. Это секрет клиента, который вы настроили при создании службы.
    identity-system adfs Необязательный параметр. Укажите решение по управлению удостоверениями, если используются службы федерации Active Directory (AD FS).
  3. Указав все значения, выполните такую команду:

    Примечание

    Для AKSe версии 0.75.3 и выше команда обновления обработчика AKS имеет значение aks-engine-azurestack upgrade.

    aks-engine upgrade \
    --azure-env AzureStackCloud \
    --location <for an ASDK is local> \
    --resource-group kube-rg \
    --subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --api-model kube-rg/apimodel.json \
    --upgrade-version 1.18.15 \
    --client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --identity-system adfs # required if using AD FS
    
  4. Если по какой-либо причине операция обновления завершится сбоем, можно повторно выполнить upgrade команду после устранения проблемы. Обработчик AKS возобновит операцию там, где она завершилась сбоем в предыдущий раз.

Этапы только для обновления образа ОС

  1. Просмотрите таблицу "supported-kubernetes-versions" (поддерживаемых версий kubernetes) и определите, есть ли у вас версия aks-engine и базовый образ AKS, которые нужно обновить. Если вы используете обработчик AKS версии 0.73.0 или ниже, чтобы просмотреть версию aks-engine, выполните следующую команду: aks-engine version. Если вы используете aks Engine версии 0.75.3 или более поздней, для просмотра версии aks-engine выполните следующую команду: aks-engine-azurestack version.
  2. Обновите обработчик AKS соответствующим образом. На компьютере с установленным aks-engine запустите ./get-akse.sh --version vx.xx.x, заменив x.xx.x целевой версией.
  3. Попросите вашего оператора Azure Stack Hub добавить необходимую версию базового изображения AKS в Marketplace Azure Stack Hub, который планируете использовать.
  4. Выполните команду aks-engine upgrade, используя ту же используемую версию Kubernetes, но добавьте --force. Пример можно увидеть в статье Принудительное выполнение обновления.

Действия по обновлению кластера до версии ОС Ubuntu 20.04

С помощью обработчика AKS версии 0.75.3 и выше можно обновить виртуальные машины кластера с Ubuntu 18.04 до версии 20.04. Выполните следующие действия.

  1. Найдите и измените api-model.json файл, созданный во время развертывания. Это должен быть тот же файл, который используется для любой операции обновления или масштабирования с aks-engineпомощью . В обработчике AKS версии 0.75.3 и выше используйте aks-engine-azurestack.
  2. Найдите разделы для masterProfile и agentPoolProfiles, в этих разделах измените значение distro на aks-ubuntu-20.04.
  3. Сохраните api-model.json файл и используйте api-model.json его в aks-engin upgrade команде, как описано в разделе Действия по обновлению до более новой версии Kubernetes.

Действия по обновлению кластера, если вы используете тома хранилища с обработчиком AKS версии 0.70.0 и более поздних версий

Проект "Поставщик облачных служб для Azure " (также известный как cloud-controller-managerпоставщик облачных служб вне дерева или внешний поставщик облачных служб) реализует интерфейс поставщика облачных служб Kubernetes для облаков Azure. Внеуровневая реализация заменяет нерекомендуемую реализацию в дереве.

В Azure Stack Hub, начиная с Kubernetes версии 1.21, кластеры на основе обработчика AKS будут использовать cloud-controller-managerисключительно . Следовательно, чтобы развернуть кластер Kubernetes версии 1.21 и более поздних версий, необходимо задать для значение orchestratorProfile.kubernetesConfig.useCloudControllerManagertrue в модели API (пример). Процесс обновления обработчика AKS автоматически обновит useCloudControllerManager флаг.

Примечание

Рекомендации по обновлению. Процесс обновления кластера Kubernetes с версии 1.20 (или более ранней версии) до версии 1.21 (или более поздней версии) приведет к простою рабочих нагрузок, зависящих от kubernetes.io/azure-disk средства подготовки томов в дереве. Перед обновлением до Kubernetes версии 1.21 и более поздней настоятельно рекомендуется выполнить полное резервное копирование данных приложения и проверить в подготовительной среде , что ресурсы хранилища кластера (PV и PVC) можно перенести в новый модуль подготовки томов. Узнайте, как выполнить миграцию на драйвер CSI диска Azure.

Средства подготовки томов

Средство подготовки томов в дереве совместимо только с поставщиком облачных служб в дереве. Поэтому кластер версии 1.21 и более поздних версий должен включать драйвер интерфейса хранилища контейнеров (CSI), если рабочие нагрузки пользователей зависят от постоянного хранилища. Здесь перечислены некоторые решения, доступные в Azure Stack Hub.

Обработчик AKS не включает драйвер CSI по умолчанию в Azure Stack Hub. Для рабочих нагрузок, для которых требуется драйвер CSI, можно либо явно включить надстройкуazuredisk-csi-driver (кластеры только для Linux), либо использовать для Helmустановки azuredisk-csi-driver диаграммы (кластеры Linux и(или) Windows).

Перенос постоянного хранилища в драйвер CSI диска Azure

Процесс обновления кластера на основе обработчика AKS с версии 1.20 (или более ранней версии) до версии 1.21 (или более поздней версии) приведет к простою рабочих нагрузок, зависящих от kubernetes.io/azure-disk средства подготовки тома в дереве, так как этот модуль подготовки не является частью поставщика облачных служб для Azure.

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

  1. Установка драйвера CSI для дисков Azure
  2. Удаление устаревших классов хранения в дереве
  3. Повторное создание постоянных томов и утверждений

1. Установка драйвера CSI для дисков Azure вручную

Следующий скрипт использует Helm для установки драйвера CSI для дисков Azure:

DRIVER_VERSION=v1.10.0
helm repo add azuredisk-csi-driver https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/charts
helm install azuredisk-csi-driver azuredisk-csi-driver/azuredisk-csi-driver \
  --namespace kube-system \
  --set cloud=AzureStackCloud \
  --set controller.runOnMaster=true \
  --version ${DRIVER_VERSION}

2. Замена классов хранения

будет kube-addon-manager автоматически создавать классы хранения драйвера CSI диска Azure (disk.csi.azure.com) после удаления классов хранения в дереве (kubernetes.io/azure-disk).

IN_TREE_SC="default managed-premium managed-standard"

# Delete deprecated "kubernetes.io/azure-disk" storage classes
kubectl delete storageclasses ${IN_TREE_SC}

# Wait for addon manager to create the "disk.csi.azure.com" storage class resources
kubectl get --watch storageclasses

3. Повторное создание постоянных томов

После установки драйвера CSI для дисков Azure и замены классов хранения следующим шагом является повторное создание утверждений постоянных томов (PV) и постоянных томов (PVC) с помощью драйвера CSI для дисков Azure (или альтернативного решения CSI).

Это многоэтапный процесс, который может отличаться в зависимости от того, как эти ресурсы были изначально развернуты. В общем виде процедура выглядит так.

  • Удалите развертывание или набор с отслеживанием состояния, который ссылается на переносимые пары PV+PVC (при необходимости определение ресурса резервного копирования).
  • Убедитесь, что свойство PVs имеет persistentVolumeReclaimPolicy значение Retain (пример).
  • Удалите пары PV+PVC для миграции (при необходимости резервные определения ресурсов).
  • Чтобы выполнить миграцию, обновите определение ресурса PVs, удалив azureDisk объект и добавив объект со ссылкой csi на исходный AzureDisk (пример).
  • Повторно создайте в следующем порядке ресурс pv/s, ресурс PVC в секунду (при необходимости) и, наконец, развертывание или набор с отслеживанием состояния.

Следующий скрипт миграции предоставляется в качестве шаблона.

Если после выполнения сценария миграции модуль pod зависает с ошибкой "Не удается подключить или подключить тома", убедитесь, что драйвер CSI для диска Azure установлен и классы хранения созданы повторно.

Принудительное выполнение обновления

В некоторых случаях может потребоваться принудительно обновить кластер. Например, в первый день вы развертываете кластер в отключенной среде, используя последнюю версию Kubernetes. На следующий день Ubuntu выпускает исправление уязвимости, для которой корпорация Майкрософт создает новый базовый образ AKS. Вы можете установить новый образ, выполнив обновление до той же версии Kubernetes, которая уже развернута.

Примечание

Для AKSe версии 0.75.3 и выше команда обновления обработчика AKS имеет значение aks-engine-azurestack upgrade.

aks-engine upgrade \
--azure-env AzureStackCloud   
--location <for an ASDK is local> \
--resource-group kube-rg \
--subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--api-model kube-rg/apimodel.json \
--upgrade-version 1.18.15 \
--client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--force

Инструкции см. в статье о принудительном обновлении.

Дальнейшие действия