Interromper automaticamente as atualizações de cluster do Serviço de Kubernetes do Azure (AKS) em caso de alterações significativas na API

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

Este artigo mostra como AKS (Serviço de Kubernetes do Azure) pode bloquear automaticamente as atualizações de cluster quando detecta o uso preterido da API do Kubernetes.

Para a maioria das cargas de trabalho de produção, o AKS Automático é a experiência padrão recomendada para o AKS em ambientes de produção. A detecção de alterações disruptivas na API do Kubernetes é pré-configurada nos clusters do AKS Automático e AKS Padrão.

Comportamento no AKS Automatic e no AKS Standard

Ambos os modos de cluster incluem esta proteção:

  • AKS Automatic: Incluído por padrão como parte das proteções da plataforma AKS Automatic prontas para produção.
  • Padrão do AKS: incluído por padrão em clusters do AKS Standard.

Em ambos os modos, o AKS pode bloquear operações de atualização de versão secundária quando detecta o uso recente de APIs preteridas ou removidas na versão do Kubernetes de destino.

Visão geral

Para ficar dentro de uma versão do Kubernetes com suporte, você deve atualizar seu cluster pelo menos uma vez por ano e se preparar para possíveis interrupções. Essas disrupturas podem incluir alterações incompatíveis na API, desativaçõ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 tempo de inatividade.

Quando o AKS detecta o uso preterido da API para a versão de destino, ele pode bloquear automaticamente as operações de atualização de versão secundária e alertá-lo sobre o problema. Esse comportamento ajuda você a evitar interrupções inesperadas e oferece tempo para corrigir o uso preterido da API antes de continuar a atualização.

Prerequisites

Certifique-se de que 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 de destino do Kubernetes é 1.26 ou posterior.
  • O uso visto pela última vez de APIs preteridas para a versão de destino ocorreu dentro de 12 horas antes da operação de atualização. O AKS registra o uso por hora; portanto, não há garantia de que o uso na hora mais recente aparecerá na detecção.

Observação

Você não precisa habilitar manualmente esse recurso de detecção. Os clusters AKS Automatic e AKS Standard o preconfiguram.

Mitigar operações de atualização interrompidas

Se você atender aos pré-requisitos, tente uma atualização e receba 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 do Azure, navegue até a página de visão geral do seu cluster e selecione Diagnosticar e resolver problemas

  2. Selecione Criar, Atualizar, Excluir e Escalar>Desativações de API do Kubernetes.

    Uma captura de tela do portal do Azure mostrando a seção 'Descontinuações selecionadas da API do Kubernetes'.

  3. Aguarde 12 horas desde o momento em que o último uso da API descontinuada foi detectado. Os verbos de apenas leitura são excluídos do uso de API desativada, a saber, Obter/Listar/Assistir. Você também pode verificar o uso anterior da API habilitando Container insights e explorando os logs de auditoria do kube.

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

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

Observação

Esse método requer CLI do Azure versão 2.57 ou posterior. Se você tiver a extensão da CLI de visualização instalada, atualize para a versão 3.0.0b10 ou posterior. Esse método não é recomendado para operações de produção normais porque APIs preteridas na versão de destino do Kubernetes podem falhar a longo prazo. Remova o uso preterido da API assim que possível após a atualização.

Execute a atualização ignorando a validação usando o comando az aks upgrade com --enable-force-upgrade e defina --upgrade-override-until para determinar quando a janela de ignorar a validação termina. Se você não definir um valor, o padrão da janela será de três dias a partir do momento atual. A data e a hora fornecidas devem estar 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

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.

Considerações sobre produção

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

  • Trate o bloqueio de atualização como um mecanismo de segurança, não um estado de falha.
  • Prefira a migração de API em vez do bypass de força.
  • Utilize janelas de manutenção planejadas e verificações antes da atualização.
  • Monitore continuamente o uso de APIs obsoletas para evitar impedimentos de atualização de última hora.

Este artigo mostrou a você como interromper automaticamente as atualizações do cluster do AKS em caso de alterações incompatíveis na 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).

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