Поделиться через


Обновление кластера 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 команду для поддержания валюты каждого главного узла и узла агента в кластере.

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

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

В развернутом кластере рассматриваются обновления:

  • 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-engine-azurestack get-versionsкоманда для получения версий ядра AKS.

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

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

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

    Параметр Пример Description
    azure-env AzureStackCloud Используйте AzureStackCloud, чтобы сообщить обработчику AKS, что целевой платформой является Azure Stack Hub.
    расположение Локальная среда Название региона для 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-engine-azurestack upgradeкоманда для обновления ядра AKS.

    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 версии 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.useCloudControllerManager true в модели 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, ресурс и ресурсы ПВХ (при необходимости) и, наконец, развертывание или набор с отслеживанием состояния.

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

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

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

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

Примечание.

Для AKSe версии 0.75.3 и более поздних версий используется aks-engine-azurestack upgradeкоманда для обновления ядра AKS.

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

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

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