Практическое руководство по обновлению кластера Службы Azure Kubernetes (AKS)

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

Обновления версий Kubernetes

При обновлении поддерживаемого кластера AKS нельзя пропустить дополнительные версии Kubernetes. Необходимо выполнить все обновления последовательно по основному номеру версии. Например, разрешены обновления между 1.14.x ->1.15.x или 1.15.x ->1.16.x. 1.14.x ->1.16.x не разрешено. При обновлении с неподдерживаемой версии можно пропустить только несколько версий. Например, можно выполнить обновление с неподдерживаемой версии 1.10.x до поддерживаемой версии 1.12.x при наличии.

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

Подготовка к работе

  • Если вы используете Azure CLI, для этой статьи требуется Azure CLI версии 2.34.1 или более поздней. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
  • Если вы используете Azure PowerShell, для этой статьи требуется Azure PowerShell версии 5.9.0 или более поздней. Чтобы узнать версию, выполните команду Get-InstalledModule -Name Az. Если вам необходимо выполнить установку или обновление, см. статью об установке Azure PowerShell.
  • Для выполнения операций обновления требуется Microsoft.ContainerService/managedClusters/agentPools/write роль RBAC. Дополнительные сведения о ролях Azure RBAC см. в операциях поставщика ресурсов Azure.
  • Начиная с версии 1.30 kubernetes и версии 1.27 LTS бета-api будут отключены по умолчанию при обновлении до них.

Предупреждение

Обновление кластера AKS активирует блокировку и остановку узлов. Если у вас есть низкая квота вычислений, обновление может завершиться ошибкой. Дополнительные сведения см. в разделе Запросы на увеличение квоты.

Проверка доступных обновлений кластера AKS

Примечание.

Чтобы оставаться в курсе исправлений, выпусков и обновлений AKS, см . средство отслеживания выпусков AKS.

  • Проверьте, какие выпуски Kubernetes доступны для кластера с помощью az aks get-upgrades команды.

    az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster --output table
    

    В следующем примере выходных данных показана текущая версия как 1.26.6 и перечислены доступные версии в разделе upgrades:

    {
      "agentPoolProfiles": null,
      "controlPlaneProfile": {
        "kubernetesVersion": "1.26.6",
        ...
        "upgrades": [
          {
            "isPreview": null,
            "kubernetesVersion": "1.27.1"
          },
          {
            "isPreview": null,
            "kubernetesVersion": "1.27.3"
          }
        ]
      },
      ...
    }
    

Устранение неполадок при обновлении кластера AKS

В следующем примере выходных данных appservice-kube расширение несовместимо с версией Azure CLI (требуется не менее версии 2.34.1):

The 'appservice-kube' extension is not compatible with this version of the CLI.
You have CLI core version 2.0.81 and this extension requires a min of 2.34.1.
Table output unavailable. Use the --query option to specify an appropriate query. Use --debug for more info.

Если вы получите эти выходные данные, необходимо обновить версию Azure CLI. Команда az upgrade добавлена в версии 2.11.0 и не работает с предыдущими версиями. Вы можете обновить старые версии, переустановив Azure CLI, как описано в разделе "Установка Azure CLI". Если azure CLI версии 2.11.0 или более поздней, выполните az upgrade обновление Azure CLI до последней версии.

Если Azure CLI обновлен и вы получите следующий пример выходных данных, это означает, что обновления недоступны:

ERROR: Table output unavailable. Use the --query option to specify an appropriate query. Use --debug for more info.

Если обновления недоступны, создайте кластер с поддерживаемой версией Kubernetes и перенесите рабочие нагрузки из существующего кластера в новый. AKS не поддерживает обновление кластера до новой версии Kubernetes, если az aks get-upgrades показывает, что обновления недоступны.

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

Во время процесса обновления кластера AKS выполняет следующие операции:

  • Добавит новый узел буфера (или столько узлов, сколько указано в параметре max_surge) в кластер, на котором запущена указанная версия Kubernetes.
  • Блокирует и останавливает один из старых узлов, чтобы свести к минимуму время простоя работающих приложений. Если вы используете максимальный всплеск, он кордонирует и очищает столько узлов одновременно, сколько указанных буферных узлов.
  • Для длительных модулей pod можно настроить время ожидания очистки узлов, которое позволяет настроить пользовательское время ожидания при вытеснение модулей pod и корректное завершение на каждом узле. Если значение не указано, значение по умолчанию — 30 минут.
  • Когда старый узел полностью осушен, он переимыслится для получения новой версии и становится буферным узлом для обновления следующего узла.
  • При необходимости можно задать длительность ожидания между очисткой узла и продолжением его повторного создания и перехода к следующему узлу. Короткий интервал позволяет выполнять другие задачи, например проверка работоспособности приложений с панели мониторинга Grafana во время процесса обновления. Мы рекомендуем короткий интервал времени для процесса обновления, как можно ближе к 0 минутам. В противном случае более высокое время замачивания узла влияет на то, как долго перед обнаружением проблемы. Минимальное значение времени ожидания — 0 минут, не более 30 минут. Если значение не указано, значение по умолчанию — 0 минут.
  • Этот процесс повторяется до обновления всех узлов в кластере.
  • В конце процесса удаляется последний буферный узел, поддерживая существующее число узлов агента и баланс зоны.

Примечание.

Если исправление не указано, кластер автоматически обновляется до последней версии последней общедоступной версии. Например, параметр --kubernetes-version для 1.21 получения результатов обновления 1.21.9кластера до .

Дополнительные сведения см. в статье Поддерживаемые обновления дополнительных версий Kubernetes в AKS.

  1. Обновите кластер с помощью az aks upgrade команды.

    az aks upgrade \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --kubernetes-version <KUBERNETES_VERSION>
    
  2. Убедитесь, что обновление выполнено успешно с помощью az aks show команды.

    az aks show --resource-group myResourceGroup --name myAKSCluster --output table
    

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

    Name          Location    ResourceGroup    KubernetesVersion    ProvisioningState    Fqdn
    ------------  ----------  ---------------  -------------------  -------------------  ----------------------------------------------
    myAKSCluster  eastus      myResourceGroup  1.27.3               Succeeded            myakscluster-dns-379cbbb9.hcp.eastus.azmk8s.io
    

Настройка канала автоматического обновления

Канал автоматического обновления можно задать в кластере. Дополнительные сведения см. в статье Автоматическое обновление кластера службы AKS.

Настройка обновления со всплеском активности узлов

Внимание

  • При всплеске активности узлов для каждой операции обновления требуется квота подписки, соответствующая запрошенному максимальному числу всплесков. Например, кластер с пятью пулами узлов, каждый из которых имеет количество четырех узлов, имеет в общей сложности 20 узлов. Если для каждого пула узлов задано максимальное значение всплеска активности в 50 %, то для завершения обновления потребуется дополнительная квота вычислений и IP-адресов, равная 10 узлам (2 узла * 5 пулов).

  • Параметр максимального всплеска активности для пула узлов является постоянным. Этот параметр будет использоваться для последующих обновлений Kubernetes или обновлений версии узлов. Максимальное значение всплеска для пулов узлов можно изменить в любое время. Для рабочих пулов узлов рекомендуется использовать значение max_surge, равное 33 %.

  • Если вы используете Azure CNI, проверьте наличие доступных IP-адресов в подсети для удовлетворения требований к IP-адресам Azure CNI.

AKS настраивает обновления для всплеска с одним дополнительным узлом по умолчанию. Значение по умолчанию для параметра максимального всплеска позволяет AKS свести к минимуму прерывание рабочей нагрузки путем создания дополнительного узла до кордона или очистки существующих приложений для замены старого узла версии. Можно настроить максимальное значение всплеска для каждого пула узлов. При увеличении максимального значения всплеска процесс обновления завершается быстрее, и во время процесса обновления могут возникнуть сбои.

Например, максимальное значение всплеска 100 % обеспечивает самый быстрый процесс обновления, но также приводит к тому, что все узлы в пуле узлов будут стекаться одновременно. Может потребоваться использовать более высокое значение, например для сред тестирования. Для пулов рабочих узлов рекомендуется max_surge задать значение 33%.

AKS принимает целочисленные значения и процентное значение для параметра максимального всплеска активности. Целое число, например 5 , указывает на всплеск пяти дополнительных узлов. Значение 50 % указывает на увеличение числа текущих узлов в пуле. Максимальное значение процента всплеска может быть не менее 1% и максимум 100%. Процентное значение округляется до ближайшего числа узлов. Если максимальное значение всплеска превышает требуемое количество узлов, которое необходимо обновить, количество узлов, которые необходимо обновить, используется для максимального значения всплеска. Во время обновления максимальное значение всплеска может быть не менее 1 , а максимальное значение равно количеству узлов в пуле узлов. Можно задать более крупные значения, но вы не можете задать максимальное количество узлов, используемых для максимального увеличения, чем число узлов в пуле во время обновления.

Установка максимального значения всплеска

  • Задайте максимальные значения всплеска для новых или существующих пулов узлов с помощью az aks nodepool add команды или az aks nodepool update команды.

    # Set max surge for a new node pool
    az aks nodepool add -n mynodepool -g MyResourceGroup --cluster-name MyManagedCluster --max-surge 33%
    
    # Update max surge for an existing node pool 
    az aks nodepool update -n mynodepool -g MyResourceGroup --cluster-name MyManagedCluster --max-surge 5
    

Установка значения времени ожидания очистки узлов

Иногда у вас может быть длинная рабочая нагрузка на определенном модуле pod, и она не может быть перепланирована на другой узел во время выполнения, например, рабочая нагрузка с интенсивным отслеживанием состояния памяти, которая должна завершиться. В этих случаях можно настроить время ожидания очистки узлов, которое AKS будет учитывать в рабочем процессе обновления. Если значение времени ожидания очистки узлов не указано, значение по умолчанию — 30 минут. Если время ожидания очистки истекает, и модули pod по-прежнему выполняются, операция обновления останавливается. Любая последующая операция PUT возобновляет остановленное обновление.

  • Задайте время ожидания очистки узлов для новых или существующих пулов узлов с помощью az aks nodepool add команды или az aks nodepool update команды.

    # Set drain timeout for a new node pool
    az aks nodepool add -n mynodepool -g MyResourceGroup --cluster-name MyManagedCluster  --drain-timeout 100
    
    # Update drain timeout for an existing node pool
    az aks nodepool update -n mynodepool -g MyResourceGroup --cluster-name MyManagedCluster --drain-timeout 45
    

Установка значения времени ожидания узла

Чтобы разрешить время ожидания между очисткой узла и продолжением его повторного создания и перехода к следующему узлу, можно задать время ожидания в диапазоне от 0 до 30 минут. Если значение времени ожидания узла не указано, значение по умолчанию — 0 минут.

  • Задайте время замачивания узла для новых или существующих пулов узлов с помощью az aks nodepool addкоманды или az aks nodepool upgrade командыaz aks nodepool update.

    # Set node soak time for a new node pool
    az aks nodepool add -n MyNodePool -g MyResourceGroup --cluster-name MyManagedCluster --node-soak-duration 10
    
    # Update node soak time for an existing node pool
    az aks nodepool update -n MyNodePool -g MyResourceGroup --cluster-name MyManagedCluster --max-surge 33% --node-soak-duration 5
    
    # Set node soak time when upgrading an existing node pool
    az aks nodepool upgrade -n MyNodePool -g MyResourceGroup --cluster-name MyManagedCluster --max-surge 33% --node-soak-duration 20
    

Просмотр событий обновления

  • Просмотр событий обновления с помощью kubectl get events команды.

    kubectl get events 
    

    В следующем примере выходных данных показаны некоторые из перечисленных выше событий во время обновления:

    ...
    default 2m1s Normal Drain node/aks-nodepool1-96663640-vmss000001 Draining node: [aks-nodepool1-96663640-vmss000001]
    ...
    default 1m45s Normal Upgrade node/aks-nodepool1-96663640-vmss000001   Soak duration 5m0s after draining node: aks-nodepool1-96663640-vmss000001
    ...
    default 9m22s Normal Surge node/aks-nodepool1-96663640-vmss000002 Created a surge node [aks-nodepool1-96663640-vmss000002 nodepool1] for agentpool nodepool1
    ...
    

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

Сведения о настройке автоматического обновления см. в статье "Настройка автоматических обновлений" для кластера AKS.

Подробное обсуждение рекомендаций по обновлению и других рекомендаций см . в руководстве по исправлению и обновлению AKS.