Salta al contenuto

Perché non riesco a eliminare risorse dal mio cluster Amazon EKS?

8 minuti di lettura
0

Non riesco a eliminare una risorsa dal mio cluster Amazon Elastic Kubernetes Service (Amazon EKS).

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Intraprendi le seguenti azioni di risoluzione dei problemi in base alla risorsa Amazon EKS bloccata nello stato Arresto in corso. I finalizer segnalano ai controller di eliminare le risorse evitando l'eliminazione accidentale. Se la risorsa è bloccata nello stato Arresto in corso, devi rimuovere i finalizer prima di eliminarla. Per ulteriori informazioni sui finalizer, consulta Finalizers (Finalizer) sul sito web Kubernetes.

Risolvi i problemi di eliminazione di un namespace

Per verificare se nel namespace sono presenti risorse bloccate nello stato Arresto in corso, esegui questo comando:

kubectl get all -n namespace-name | grep Terminating

Nota: sostituisci namespace-name con il namespace.

Per eliminare manualmente la risorsa, esegui questo comando:

kubectl delete resource resource-name -n namespace-name

Nota: sostituisci resource con il tipo di risorsa, resource-name con il nome della risorsa e namespace-name con il namespace.

Per verificare la presenza di errori nel finalizer o nel servizio API, esegui questo comando:

kubectl get ns namespace-name -o json

Nota: sostituisci namespace-name con il namespace.

Se ricevi errori nell'output del comando, consulta In che modo posso risolvere i problemi relativi ai namespace nello stato arrestato nel cluster Amazon EKS?

Risolvi i problemi di eliminazione di una risorsa in ingresso

Elimina i bllanciatori di carico o i gruppi di destinazione associati alla risorsa in ingresso.

Per rimuovere i finalizer da una risorsa in ingresso, esegui questo comando:

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

Nota: sostituisci ingress-name con il nome della risorsa in ingresso e namespace-name con il namespace.

Quindi esegui questo comando per eliminare la risorsa in ingresso:

kubectl delete ingress ingress-name -n namespace-name

Nota: sostituisci ingress-name con il nome della risorsa in ingresso e namespace-name con il namespace.

Risolvi i problemi di eliminazione di un servizio

Per rimuovere i finalizer dalla risorsa del servizio, esegui questo comando:

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

Nota: sostituisci service-name con il nome del tuo servizio e namespace-name con il namespace.

Utilizza la console Amazon EC2 per disattivare la protezione da eliminazione sul bilanciatore del carico associato al servizio. Oppure utilizza l'annotazione service.beta.kubernetes.io/aws-load-balancer-attributes per disattivare Protezione da eliminazione. Per ulteriori informazioni, consulta Resource attributes (Attributi delle risorse) sul sito web Kubernetes.

Quindi esegui questo comando per eliminare il servizio:

kubectl delete svc service-name -n namespace-name

Nota: sostituisci service-name con il nome del tuo servizio e namespace-name con il namespace.

Risolvi i problemi di eliminazione di un volume persistente (PV) o di una richiesta di volume persistente (PVC)

Se non riesci a eliminare un volume persistente (PV) o una richiesta di volume persistente (PVC), controlla quanto segue:

  • Verifica se hai eliminato il PV prima di rimuovere la PVC associata
  • Controlla se hai rimosso la PVC quando un pod era ancora in esecuzione e collegato

Hai eliminato il PV

Per risolvere il problema, elimina la PVC associata al PV.

Per identificare la PVC associata al PV bloccato nello stato Arresto in corso, descrivi il PV eseguendo questo comando:

kubectl get pv pv-name

Nota: sostituisci pv-name con il nome del PV. Il comando mostra il nome e il namespace della PVC nel formato NAMESPACE/PVC_NAME.

Esempio di output:

default/ebs-claim

Per eliminare la PVC, esegui questo comando:

kubectl delete pvc -n namespace-name pvc-name

Nota: sostituisci namespace-name con il namespace della PVC e pvc-name con il nome della PVC.

Se non riesci ancora a eliminare il PV, esegui questo comando per rimuovere i relativi finalizer:

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

Nota: sostituisci pv-name con il nome del PV.

Hai rimosso la PVC

Per risolvere il problema, elimina il pod associato alla PVC.

Per identificare i pod associati alla PVC, descrivi la PVC eseguendo questo comando:

kubectl describe pvc -n namespace-name pvc-name

Nota: sostituisci namespace-name con il namespace della PVC e pvc-name con il nome della PVC. Nell'output, seleziona l'attributo Used by (Usato da).

Esempio di output:

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>

Nell'esempio precedente, la PVC è utilizzata dal pod ebs-app-59c74d8d45-z65kj.

Per eliminare il pod, esegui questo comando:

kubectl delete pod -n namespace-name pod-name

Nota: sostituisci namespace-name con il namespace della PVC e pod-name con il nome del pod.

Se non riesci ancora a eliminare la PVC, esegui questo comando per rimuovere i relativi finalizer:

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

Nota: sostituisci namespace-name con il namespace della PVC e pvc-name con il nome della PVC.

Risolvi i problemi di eliminazione di un pod

Se non riesci a eliminare un pod, controlla quanto segue:

  • Verifica se il pod non risponde ai segnali di arresto
  • Controlla se al pod è associato un finalizer che non è stato completato

Il pod non risponde ai segnali di arresto

Importante: la seguente risoluzione elimina immediatamente il pod senza verificare se il pod in esecuzione è stato arrestato. Assicurati che il pod non sia in esecuzione. In caso contrario, il pod potrebbe essere eseguito a tempo indeterminato sul cluster.

I pod vengono generalmente eliminati dopo il periodo di tolleranza predefinito di 30 secondi. Se il pod non viene eliminato dopo 30 secondi, esegui questo comando per forzare l'eliminazione del pod:

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

Nota: sostituisci namespace-name con il namespace del pod e pod-name con il nome del pod. Devi impostare il flag --grace-period su 0 per rimuovere immediatamente il pod.

Al pod è associato un finalizer che non è stato completato

Per verificare se il pod ha finalizer, esegui questo comando:

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

Nota: sostituisci namespace-name con il namespace del pod e pod-name con il nome del pod. Nell'output, controlla metadata.finalizers per identificare i finalizer.

Esempio di output:

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

Per rimuovere i finalizer, esegui questo comando:

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

Nota: sostituisci namespace-name con il namespace del pod e pod-name con il nome del pod.

Risolvi i problemi di eliminazione di un cluster

I problemi di eliminazione di un cluster si verificano perché vi sono gruppi di nodi gestiti collegati al cluster. Per risolvere il problema, rimuovi i gruppi di nodi gestiti. Per ulteriori informazioni, consulta Why can't I delete my Amazon EKS cluster? (Perché non riesco a eliminare il mio cluster Amazon EKS?)

Potresti riscontrare problemi di eliminazione anche se a un cluster è associato uno scraper gestito. In uno scenario del genere, non puoi rimuovere la rete privata virtuale (VPC) o l'interfaccia di rete elastica utilizzata dallo scraper.

Per identificare l'ID dello scraper, esegui questo comando AWS CLI list-scrapers:

aws amp list-scrapers

Quindi esegui questo comando delete-scraper per eliminarlo:

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

Nota: sostituisci scraper-example con l'ID dello scraper.

Risolvi i problemi di eliminazione di un gruppo di nodi gestiti in Amazon EKS

Se non riesci a eliminare un gruppo di nodi gestiti, controlla quanto segue:

  • Verifica se la risorsa ha un oggetto dipendente
  • Controlla se il processo Arresta del gruppo Amazon EC2 Auto Scaling è sospeso
  • Controlla se il gruppo di nodi presenta errori di integrità
  • Verifica se i pod sono bloccati nei nodi

La risorsa ha un oggetto dipendente

Il problema di dipendenza si verifica quando una risorsa creata dal gruppo di nodi gestiti è associata a un'altra risorsa nell'account AWS. La risorsa è generalmente un gruppo di sicurezza. Per risolvere il problema, identifica gli oggetti associati al gruppo di sicurezza. Quindi dissociare il gruppo di sicurezza dalla risorsa. Se riscontri problemi, consulta Perché non riesco a eliminare un gruppo di sicurezza collegato al mio Amazon VPC?

Il processo di arresto del gruppo EC2 Auto Scaling è sospeso

Per risolvere il problema, riavvia il processo di arresto.

Il gruppo di nodi presenta errori di integrità

Per informazioni sui tipi di errori di integrità che possono verificarsi in un gruppo di nodi gestiti, consulta Issue (Problema).

Per risolvere i problemi di integrità, consulta Come posso risolvere gli errori dei gruppi di nodi gestiti in un cluster Amazon EKS?

I pod sono bloccati nei nodi

Quando elimini il gruppo di nodi gestiti, potresti ricevere il seguente messaggio di errore:

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

Il problema può verificarsi se un pod nel cluster è bloccato nello stato Arresto in corso. Per risolvere il problema, ottieni l'accesso kubectl al cluster, quindi esegui questo comando:

kubectl get pod -A

L'errore pods are unevictable potrebbe verificarsi perché hai configurato in maniera non corretta il podDisruptionBudget o perché non hai abbastanza interruzioni disponibili per consentire l'espulsione del pod. Per risolvere il problema, consulta How can I troubleshoot managed node group update issues for Amazon EKS? (Come posso risolvere i problemi di aggiornamento dei gruppi di nodi gestiti in Amazon EKS?)

AWS UFFICIALEAggiornata 7 mesi fa