Interromper automaticamente as atualizações do cluster do Azure Kubernetes Service (AKS) quando houver alterações incompatíveis na API

Aplica-se a: ✔️ AKS Automatic ✔️ AKS Standard

Este artigo mostra como o Azure Kubernetes Service (AKS) pode bloquear automaticamente atualizações de cluster quando deteta o uso obsoleto da API Kubernetes.

Para a maioria das cargas de trabalho de produção, o AKS Automatic é a experiência predefinida recomendada e pronta para produção do AKS. A deteção de quebras de alteração da API Kubernetes está pré-configurada tanto nos clusters AKS Automatic como AKS Standard.

Comportamento no AKS Automatic e no AKS Standard

Ambos os modos cluster incluem esta salvaguarda:

  • AKS Automatic: Incluído por predefinição como parte das salvaguardas da plataforma AKS Automatic preparada para produção.
  • AKS Standard: Incluído por defeito nos clusters AKS Standard.

Em ambos os modos, o AKS pode bloquear operações de atualização de versões menores quando detetar o uso recente de APIs obsoletas ou removidas na versão alvo do Kubernetes.

Overview

Para se manter dentro de uma versão Kubernetes suportada, deve atualizar o seu cluster pelo menos uma vez por ano e preparar-se para possíveis interrupções. Estas disrupções podem incluir alterações incompatíveis na API, descontinuações e dependências de componentes como o Helm e a Container Storage Interface (CSI). Pode ser difícil antecipar estas perturbações e migrar cargas de trabalho críticas sem tempo de inatividade.

Quando o AKS detetar o uso obsoleto da API para a versão alvo, pode bloquear automaticamente as operações de atualização de versões menores e alertá-lo para o problema. Este comportamento ajuda-o a evitar interrupções inesperadas e dá-lhe tempo para corrigir o uso obsoleto da API antes de continuar a atualização.

Prerequisites

Certifique-se de cumprir os seguintes pré-requisitos:

  • A operação de atualização é uma alteração menor de versão do Kubernetes para o plano de controlo do cluster.
  • A versão alvo do Kubernetes é 1.26 ou posterior.
  • A última utilização vista de APIs obsoletas para a versão alvo ocorreu dentro de 12 horas antes da operação de atualização. O AKS regista a utilização de hora a hora, pelo que a utilização na última hora pode não aparecer na deteção.

Nota

Não precisas de ativar manualmente esta funcionalidade de deteção. Os clusters do AKS Automatic e do AKS Standard vêm pré-configurados com ele.

Mitigar as operações de atualização interrompidas

Se cumprir os pré-requisitos, tentar uma atualização e receber um erro semelhante à seguinte mensagem de erro:

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"
})

Use uma das seguintes opções:

  1. No portal Azure, navegue até ao recurso do seu cluster e selecione Diagnosticar e resolver problemas

  2. Selecione Criar, Atualizar, Eliminar e Escalar>as desvalorizações da API Kubernetes.

    Uma captura de ecrã do portal do Azure que mostra a secção 'Descontinuações selecionadas da API do Kubernetes'.

  3. Aguarde 12 horas desde o momento em que foi detetada a última utilização de uma API descontinuada. Os verbos só de leitura são excluídos da utilização da API obsoleta, ou seja, Get/List/Watch. Também pode verificar o uso passado da API ativando o Container insights e explorando os registos de auditoria do kube.

  4. Tenta novamente a atualização do teu cluster.

Ignorar a validação para ignorar alterações à API

Nota

Este método requer CLI do Azure versão 2.57 ou posterior. Se tiver a extensão da CLI de pré-visualização instalada, atualize para a versão 3.0.0b10 ou posterior. Este método não é recomendado para operações normais de produção porque APIs obsoletas na versão alvo do Kubernetes podem falhar a longo prazo. Remova o uso obsoleto da API o mais rapidamente possível após a atualização.

Execute a atualização ignorando a validação, utilizando o comando az aks upgrade com --enable-force-upgrade, e defina --upgrade-override-until para indicar quando termina o período durante o qual a validação é ignorada. Se não definires um valor, a janela assume, por predefinição, três dias a partir da hora atual. A data e hora indicadas devem ser no futuro.

# Set environment variables
RESOURCE_GROUP_NAME=<your-resource-group-name>
CLUSTER_NAME=<your-cluster-name>
KUBERNETES_VERSION=<target-kubernetes-version>

# Run the upgrade command with validation bypass
az aks upgrade --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --kubernetes-version $KUBERNETES_VERSION --enable-force-upgrade --upgrade-override-until 2023-10-01T13:00:00Z

Nota

Z é o designador da zona para o desfasamento zero em relação a UTC/GMT, também conhecido como hora 'Zulu'. Este exemplo define o fim da janela para 13:00:00 a GMT. Para mais informações, consulte Representações combinadas de data e hora.

Considerações sobre a produção

Para cargas de trabalho em produção, siga estas práticas:

  • Trate o bloqueio de upgrade como um mecanismo de segurança, não como um estado de falha.
  • Prefiro migração de API a forçar o bypass.
  • Use períodos de manutenção planeados e verificações pré-atualização.
  • Monitorizar continuamente o uso obsoleto da API para evitar bloqueios de atualização de última hora.

Este artigo mostrou-lhe como impedir automaticamente atualizações de clusters AKS após alterações que quebram a API. Para saber mais sobre mais opções de atualização para clusters AKS, consulte Opções de atualização para clusters Azure Kubernetes Service (AKS).

Para saber mais sobre o AKS Automatic, consulte os seguintes artigos: