Partilhar via


Solucionar problemas de erros de falha de atualização devido a falhas de despejo causadas por PDBs

Este artigo discute como identificar e resolve Erros de falha de atualização devido a falhas de despejo causadas por PDBs (Orçamentos de Interrupção do 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 uma versão 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 AKS" no cluster do AKS (Atualizar um 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: Falha na atualização
Mensagem: falha no nome do nó <de drenagem ao despejar o pod-name> do pod<.> Falha no despejo com erro de muitas solicitações. Isso geralmente é causado por uma política restritiva de PDB (Orçamento de Interrupção do Pod). Consulte http://aka.ms/aks/debugdrainfailures. Erro original: falha na chamada da API para o Servidor de API do Kubernetes.

Motivo

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

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

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

Para resolve esse problema, use uma das soluções a seguir.

Solução 1: habilitar pods para drenar

  1. Ajuste o PDB para habilitar a drenagem do pod. Geralmente, a interrupção permitida é controlada pelo Min Available / Max unavailable parâmetro ou 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 aumentar o valor de Running pods / Replicas interrupção permitido para 1 ou maior.
  2. Tente novamente atualizar o cluster do AKS para a mesma versão para a qual você tentou atualizar anteriormente. Esse processo desencadeará 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>. Depois que a atualização for concluída, você poderá reimplantar o PDB kubectl apply -f pdb_backup.yaml.
  2. Tente novamente atualizar o cluster do AKS para a mesma versão para a qual você tentou atualizar anteriormente. Esse processo desencadeará uma reconciliação.

Solução 3: excluir 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 fazer um backup: kubectl get <kubernetes-object> <name> -n <namespace> -o yaml > backup.yaml.

  2. Tente novamente atualizar o cluster do AKS para a mesma versão para a qual você tentou atualizar anteriormente. Esse processo desencadeará 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.