Compartilhar via


Solucionar problemas de erros UpgradeFailed devido a falhas de remoção causadas por PDBs

Este artigo discute como identificar e resolver erros UpgradeFailed devido a falhas de remoção causadas por PDBs (Orçamentos de Interrupção de Pod) que ocorrem quando você tenta atualizar um cluster do AKS (Serviço de Kubernetes do Azure).

Pré-requisitos

Este artigo requer a CLI do Azure versão 2.0.65 ou posterior. Para localizar o número da versão, execute az --version. Se você precisar instalar ou atualizar a CLI do Azure, consulte Como instalar a CLI do Azure.

Para obter informações mais detalhadas sobre o processo de atualização, consulte a seção "Atualizar um cluster do AKS" em Atualizar um cluster do AKS (Serviço de Kubernetes do Azure).

Sintomas

Uma operação de atualização de cluster do AKS falha com a seguinte mensagem de erro:

Código: UpgradeFailed
Mensagem: Falha no nome do nó> de drenagem ao remover o <nome do <pod do pod>. Falha na remoção com o erro Muitas solicitações. Isso geralmente é causado por uma política restritiva de Orçamento de Interrupção de Pod (PDB). Consulte http://aka.ms/aks/debugdrainfailures. Erro original: Falha na chamada de API para o Kubernetes API Server.

Motivo

Esse erro poderá ocorrer se um pod estiver protegido pela política de Orçamento de Interrupção do Pod (PDB). Nessa situação, a cápsula resiste a ser drenada.

Para testar essa situação, execute kubectl get pdb -Ae verifique o valor de Interrupção Permitida. O valor deve ser 1 ou maior. Para obter mais informações, consulte Planejar a disponibilidade usando orçamentos de interrupção de pod.

Se o valor de Interrupção Permitida for 0, o dreno do nó falhará durante o processo de atualização.

Para resolver o problema, use uma das soluções a seguir.

Solução 1: Habilitar a drenagem de pods

  1. Ajuste o PDB para habilitar a drenagem do pod. Geralmente, a interrupção permitida é controlada pelo Min Available / Max unavailable parâmetro or Running pods / Replicas . Você pode modificar o Min Available / Max unavailable parâmetro no nível do PDB ou aumentar o número de para enviar o valor de Running pods / Replicas Interrupção permitida para 1 ou mais.
  2. Tente atualizar novamente o cluster do AKS para a mesma versão para a qual você tentou atualizar anteriormente. Esse processo acionará uma reconciliação.

Solução 2: Fazer backup, excluir e reimplantar o PDB

  1. Faça um backup do PDB kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yamle exclua o PDB kubectl delete pdb <pdb-name> -n /<pdb-namespace>. Após a conclusão da atualização, você pode reimplantar o PDB kubectl apply -f pdb_backup.yaml.
  2. Tente atualizar novamente o cluster do AKS para a mesma versão para a qual você tentou atualizar anteriormente. Esse processo acionará uma reconciliação.

Solução 3: Exclua os pods que não podem ser drenados

  1. Exclua os pods que não podem ser drenados.

    Observação

    Se os pods foram criados por uma implantação ou StatefulSet, eles serão controlados por um ReplicaSet. Se esse for o caso, talvez seja necessário excluir a implantação ou StatefulSet. Antes de fazer isso, recomendamos que você faça um backup: kubectl get <kubernetes-object> <name> -n <namespace> -o yaml > backup.yaml.

  2. Tente atualizar novamente o cluster do AKS para a mesma versão para a qual você tentou atualizar anteriormente. Esse processo acionará uma reconciliação.

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.