Parar atualizações de cluster do Serviço de Kubernetes do Azure (AKS) automaticamente nas alterações interruptivas da API

Para ficar dentro de uma versão do Kubernetes com suporte, você geralmente precisa atualizar seu cluster pelo menos uma vez por ano e se preparar para todas as possíveis interrupções. Essas interrupções incluem aquelas causadas por alterações significativas na API, descontinuações e dependências, como Helm e Interface de Armazenamento de Contêiner (CSI). Pode ser difícil prever essas interrupções e migrar cargas de trabalho críticas sem passar por nenhum tempo de inatividade.

O AKS agora interrompe automaticamente as operações de atualização que consistem em uma alteração de versão secundária com APIs preteridas e envia uma mensagem de erro para alertá-lo sobre o problema.

Antes de começar

Antes de iniciar, verifique se você cumpre os seguintes pré-requisitos:

  • A operação de atualização é uma pequena alteração da versão do Kubernetes para o painel de controle de cluster.
  • A versão do Kubernetes para a qual você está atualizando deve ser 1.26 ou posterior.
  • O último uso visto de APIs preteridas para a versão de destino para a qual você está atualizando deve ocorrer dentro de 12 horas antes da operação de atualização. O AKS registra o uso a cada hora, portanto, qualquer uso de APIs preteridas dentro de uma hora não é garantido para aparecer na detecção.

A mitigação parou as operações de atualização

Se você atender aos pré-requisitos, tente uma atualização e receba uma mensagem de erro semelhante à seguinte mensagem de erro de exemplo:

Bad Request({
  "code": "ValidationError",
  "message": "Control Plane upgrade is blocked due to recent usage of a Kubernetes API deprecated in the specified version. Please refer to https://kubernetes.io/docs/reference/using-api/deprecation-guide to migrate the usage. To bypass this error, set enable-force-upgrade in upgradeSettings.overrideSettings. Bypassing this error without migrating usage will result in the deprecated Kubernetes API calls failing. Usage details: 1 error occurred:\n\t* usage has been detected on API flowcontrol.apiserver.k8s.io.prioritylevelconfigurations.v1beta1, and was recently seen at: 2023-03-23 20:57:18 +0000 UTC, which will be removed in 1.26\n\n",
  "subcode": "UpgradeBlockedOnDeprecatedAPIUsage"
})

Você tem duas opções para atenuar o problema. Você pode remover o uso de APIs preteridas (recomendado) ou ignorar a validação para ignorar as alterações da API.

  1. No portal do Azure, navegue até a página de visão geral do seu cluster e selecione Diagnosticar e resolver problemas.

  2. Navegue até a categoria Criar, Atualizar, Excluir e Escalar e selecione Preterimentos da API do Kubernetes.

    A screenshot of the Azure portal showing the 'Selected Kubernetes API deprecations' section.

  3. Aguarde 12 horas a partir do momento em que o último uso da API preterida foi visto. Verifique o verbo no uso da API preterida para saber se é uma inspeção.

  4. Tentar novamente a atualização do cluster.

Você também pode verificar o uso anterior da API habilitando os Insights de Contêiner e explorando os logs de auditoria do kube. Verifique o verbo no uso da API preterida para entender se esse é um caso de uso de inspeção.

Dispensar a validação para ignorar as alterações de API.

Observação

Esse método exige que você use a CLI do Azure versão 2.53 ou posterior. Caso tenha a extensão da CLI de aks-preview instalada, será necessário atualizar para a versão 0.5.154 ou posterior. Este método não é recomendado, pois as APIs preteridas na versão do Kubernetes de destino podem não funcionar a longo prazo. Recomendamos removê-las o mais rápido possível após a conclusão da atualização.

  • Ignorar a validação para ignorar alterações interruptivas da API usando o comando az aks update. Especifique o sinalizador enable-force-upgrade e defina a propriedade upgrade-override-until para definir o final da janela durante a qual a validação é ignorada. Se nenhum valor for definido, a janela será padronizada de três dias a partir da hora atual. A data e a hora que você especificar devem ser no futuro.

    az aks update --name myAKSCluster --resource-group myResourceGroup --enable-force-upgrade --upgrade-override-until 2023-10-01T13:00:00Z
    

    Observação

    Z é o designador de zona para o deslocamento UTC/GMT zero, também conhecido como horário 'Zulu'. Este exemplo define o fim da janela para 13:00:00 GMT. Para mais informações, ver Representações combinadas de data e hora.

  • Depois que o comando anterior tiver sido bem-sucedido, você poderá repetir a operação de atualização.

    az aks upgrade --name myAKSCluster --resource-group myResourceGroup --kubernetes-version <KUBERNETES_VERSION>
    

Próximas etapas

Esse artigo mostrou como parar atualizações de cluster do AKS automaticamente em alterações de falha de API. Para saber mais sobre mais opções de atualização para clusters do AKS, consulte opções de atualização para clusters do Serviço de Kubernetes do Azure (AKS).