Ir para o conteúdo

Por que não consigo excluir meus recursos de cluster do Amazon EKS?

8 minuto de leitura
0

Não consigo excluir um recurso do meu cluster Amazon Elastic Kubernetes Service (Amazon EKS).

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Execute as seguintes ações de solução de problemas com base no recurso Amazon EKS que está preso no estado de encerramento. Os finalizadores alertam os controladores para que excluam recursos e evitem a exclusão acidental. Se seu recurso estiver travado em Encerramento, você deverá remover os finalizadores dele antes de excluí-lo. Para obter mais informações sobre finalizadores, consulte Finalizadores no site do Kubernetes.

Solucionar problemas de exclusão de namespaces

Para verificar se há recursos no namespace presos no estado Encerramento, execute o seguinte comando:

kubectl get all -n namespace-name | grep Terminating

Observação: substitua namespace-name pelo namespace.

Para excluir manualmente o recurso, execute o seguinte comando:

kubectl delete resource resource-name -n namespace-name

Observação: substitua resource pelo tipo de recurso, resource-name pelo nome do recurso e namespace-name pelo namespace.

Para verificar se há erros no finalizador ou no serviço da API, execute o seguinte comando:

kubectl get ns namespace-name -o json

Observação: substitua namespace-name pelo namespace.

Se você receber erros na saída do comando, consulte Como soluciono problemas de namespaces em um estado encerrado no meu cluster Amazon EKS?

Solucionar problemas de exclusão de entrada

Exclua balanceadores de carga ou grupos-alvo associados ao recurso de entrada.

Para remover os finalizadores de um recurso de entrada, execute o seguinte comando:

kubectl patch ingress ingress-name -n namespace-name -p '{"metadata":{"finalizers":[]}}' --type=merge

Observação: substitua ingress-name pelo nome de entrada e namespace-name pelo namespace.

Em seguida, execute o seguinte comando para excluir o recurso de entrada:

kubectl delete ingress ingress-name -n namespace-name

Observação: substitua ingress-name pelo nome de entrada e namespace-name pelo namespace.

Solucionar problemas de exclusão de serviços

Para remover os finalizadores do recurso de serviço, execute o seguinte comando:

kubectl patch svc service-name -n namespace-name -p '{"metadata":{"finalizers":[]}}' --type=merge

Observação: substitua service-name pelo nome do serviço e namespace-name pelo namespace.

Use o console do Amazon EC2 para desativar a proteção Excluir no balanceador de carga associado ao serviço. Ou use a anotação service.beta.kubernetes.io/aws-load-balancer-attributes para desativar a proteção Excluir. Para obter mais informações, consulte Atributos de recursos no site do Kubernetes.

Em seguida, execute o seguinte comando para excluir o serviço:

kubectl delete svc service-name -n namespace-name

Observação: substitua service-name pelo nome do serviço e namespace-name pelo namespace.

Solucionar problemas de exclusão de PV e PVC

Se você não conseguir excluir o PersistentVolume (PV) ou o PersistentVolumeClaim (PVC), verifique os seguintes problemas:

  • Verifique se você excluiu o PV antes de remover o PVC vinculado
  • Verifique se você removeu o PVC quando um pod ainda estava funcionando e se conectou a ele

Você excluiu o PV

Para solucionar esse problema, exclua o PVC vinculado ao PV.

Para identificar o PVC associado ao PV preso no estado de terminação, execute o seguinte comando para descrever o PV:

kubectl get pv pv-name

Observação: substitua pv-name pelo nome PV. O comando mostra o nome e o namespace do PVC no formato NAMESPACE/PVC_NAME.

Exemplo de saída:

default/ebs-claim

Para excluir o PVC, execute o seguinte comando:

kubectl delete pvc -n namespace-name pvc-name

Observação: substitua namespace-name pelo namespace PVC e pvc-name pelo nome PVC.

Se você ainda não conseguir excluir o PV, execute o seguinte comando para remover seus finalizadores:

kubectl patch pv -p '{"metadata":{"finalizers":null}}' pv-name

Observação: substitua pv-name pelo nome PV.

Você removeu o PVC

Para resolver esse problema, exclua o pod conectado ao PVC.

Para identificar os pods associados ao PVC, execute o seguinte comando para descrever o PVC:

kubectl describe pvc -n namespace-name pvc-name

Observação: substitua namespace-name pelo namespace PVC e pvc-name pelo nome PVC. Na saída, marque o atributo Usado por.

Exemplo de saída:

Name:          ebs-claim
Namespace:     default
StorageClass:  ebs-sc
Status:        Bound
Volume:        pvc-3402cc47-c4d7-42c3-8965-f9e1e08f8b95
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
               volume.beta.kubernetes.io/storage-provisioner: ebs.csi.aws.com
               volume.kubernetes.io/selected-node: ip-192-168-33-43.ec2.internal
               volume.kubernetes.io/storage-provisioner: ebs.csi.aws.com
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      4Gi
Access Modes:  RWO
VolumeMode:    Filesystem
Used By:       ebs-app-59c74d8d45-z65kj
Events:        <none>

No exemplo anterior, o pod ebs-app-59c74d8d45-z65kj usa o PVC.

Para excluir o pod, execute o seguinte comando:

kubectl delete pod -n namespace-name pod-name

Observação: substitua namespace-name pelo namespace PVC e pod-name pelo nome do pod.

Se você ainda não conseguir excluir o PVC, execute o seguinte comando para remover seus finalizadores:

kubectl patch pvc -p '{"metadata":{"finalizers":null}}' -n namespace-name pvc-name

Observação: substitua namespace-name pelo namespace PVC e pvc-name pelo nome PVC.

Solucionar problemas de exclusão de pod

Se você não conseguir excluir o pod, verifique os seguintes problemas:

  • Verifique se o pod não responde aos sinais de terminação
  • Verifique se o pod tem um finalizador associado que não foi concluído

O pod não responde aos sinais de terminação

Importante: a resolução a seguir exclui imediatamente o pod sem confirmar que você encerrou o pod em execução. Certifique-se de que o pod não esteja funcionando. Caso contrário, o pod poderá ser executado indefinidamente no cluster.

Normalmente, os pods são excluídos após o período de carência padrão de 30 segundos. Se o pod não for excluído após 30 segundos, execute o seguinte comando para forçar a exclusão do pod:

kubectl delete pod --force --grace-period=0 -n namespace-name pod-name

Observação: substitua namespace-name pelo namespace do pod e pod-name pelo nome do pod. Você deve definir a sinalização --grace-period como 0 para remover imediatamente o pod.

O pod tem um finalizador associado que não foi concluído

Para verificar se o pod tem finalizadores, execute o seguinte comando:

kubectl get pod -o yaml -n namespace-name pod-name

Observação: substitua namespace-name pelo namespace do pod e pod-name pelo nome do pod. Na saída, verifique metadata.finalizers para identificar os finalizadores.

Exemplo de saída:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2024-09-16T19:32:01Z"
  finalizers:
  - kubernetes
  labels:
    app: nginx
    pod-template-hash: 7c79c4bf97
  namespace: default
spec:
  containers:
  - image: nginx:latest
    imagePullPolicy: Always
    name: nginx
    ports:
    - containerPort: 80
      protocol: TCP

Para remover os finalizadores, execute o seguinte comando:

kubectl patch pod -p '{"metadata":{"finalizers":null}}' -n namespace-name pod-name

Observação: substitua namespace-name pelo namespace do pod e pod-name pelo nome do pod.

Solucionar problemas de exclusão de clusters

Normalmente, os problemas de exclusão do cluster ocorrem porque há grupos de nós gerenciados conectados ao cluster. Para solucionar esse problema, remova os grupos de nós gerenciados. Para obter mais informações, consulte Por que não consigo excluir meu cluster Amazon EKS?

Se um cluster tiver um scraper gerenciado associado, você também poderá encontrar problemas de exclusão. Nesse cenário, não é possível remover a rede privada virtual (VPC) ou a interface de rede elástica que o scraper usa.

Para identificar o ID do scraper, execute o seguinte comando list-scrapers da AWS CLI:

aws amp list-scrapers

Em seguida, execute o seguinte comando delete-scraper para excluir o scraper:

aws amp delete-scraper --scraper-id scraper-example

Observação: substitua o scraper-example pelo ID do scraper.

Solucionar problemas de exclusão de grupos de nós gerenciados do Amazon EKS

Se você não conseguir excluir o grupo de nós gerenciados, analise os seguintes problemas:

  • Verifique se o recurso tem um objeto dependente
  • Verifique se o processo de Encerramento do grupo do Amazon EC2 Auto Scaling está suspenso
  • Verifique se seu grupo de nós tem erros de integridade
  • Verifique se os pods estão presos nos nós

O recurso tem um objeto dependente

O problema de dependência ocorre quando um recurso criado pelo grupo de nós gerenciados está associado a outro recurso na conta da AWS. Normalmente, o recurso é um grupo de segurança. Para resolver esse problema, identifique os objetos associados ao grupo de segurança. Em seguida, desassocie o grupo de segurança do recurso. Se você encontrar problemas, consulte Por que não consigo excluir um grupo de segurança anexado ao meu Amazon VPC?

O processo de encerramento do grupo do EC2 Auto Scaling está suspenso

Para solucionar esse problema, reinicie o processo de Encerramento.

Seu grupo de nós tem erros de integridade

Para obter informações sobre os tipos de erros de integridade que podem ocorrer em seu grupo de nós gerenciados, consulte Problema.

Para solucionar problemas de integridade, consulte Como resolvo erros de grupos de nós gerenciados em um cluster do Amazon EKS?

Os pods estão presos nos nós

Ao excluir o grupo de nós gerenciados, você pode receber a seguinte mensagem de erro:

“1 pods are unevictable from node ip-192-168-29-140.ec2.internal”

Esse problema pode ocorrer se um pod no cluster estiver preso no estado de Encerramento. Para solucionar esse problema, obtenha acesso ao cluster com o kubectl e, em seguida, execute o seguinte comando:

kubectl get pod -A

O erro The pods are unevictable pode ocorrer devido a uma configuração incorreta do PodDisruptionBudget ou por não haver interrupções disponíveis suficientes para permitir a remoção do pod. Para solucionar esse problema, consulte Como posso solucionar problemas de atualização de grupos de nós gerenciados para o Amazon EKS?

AWS OFICIALAtualizada há um ano