Direkt zum Inhalt

Warum kann ich meine Amazon EKS-Cluster-Ressourcen nicht löschen?

Lesedauer: 8 Minute
0

Ich kann keine Ressource aus meinem Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster löschen.

Behebung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI-Version verwendest.

Ergreife die folgenden Maßnahmen zur Fehlerbehebung auf der Grundlage der Amazon EKS-Ressource, die sich im Status Wird beendet befindet. Finalizer warnen die Controller davor, Ressourcen zu löschen und verhindern ein versehentliches Löschen. Wenn deine Ressource in Wird beendet hängen bleibt, musst du Finalizer aus ihr entfernen, bevor du sie löschst. Weitere Informationen zu Finalizern findest du unter Finalizers auf der Kubernetes-Website.

Probleme beim Löschen von Namespace beheben

Führe den folgenden Befehl aus, um zu überprüfen, ob Ressourcen im Namespace im Status Wird beendet hängen bleiben:

kubectl get all -n namespace-name | grep Terminating

Hinweis: Ersetze namespace-name durch den Namespace.

Führe den folgenden Befehl aus, um die Ressource manuell zu löschen:

kubectl delete resource resource-name -n namespace-name

Hinweis: Ersetze resource durch den Ressourcentyp, resource-name durch den Ressourcennamen und namespace-name durch den Namespace.

Führe den folgenden Befehl aus, um nach Finalizer- oder API-Servicefehlern zu suchen:

kubectl get ns namespace-name -o json

Hinweis: Ersetze namespace-name durch den Namespace.

Wenn du Fehler in der Befehlsausgabe erhältst, findest du weitere Informationen unter Wie behebe ich Probleme mit Namespaces in einem beendeten Zustand in meinem Amazon EKS-Cluster?

Probleme mit dem Ingress-Löschen beheben

Lösche Load Balancer oder Zielgruppen, die der Ingress-Ressource zugeordnet sind.

Führe den folgenden Befehl aus, um die Finalizer aus einer Ingress-Ressource zu entfernen:

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

Hinweis: Ersetze ingress-name durch den Ingress-Namen und namespace-name durch den Namespace.

Führe dann den folgenden Befehl aus, um die Ingress-Ressource zu löschen:

kubectl delete ingress ingress-name -n namespace-name

Hinweis: Ersetze ingress-name durch den Ingress-Namen und namespace-name durch den Namespace.

Probleme beim Löschen von Services beheben

Führe den folgenden Befehl aus, um die Finalizer aus der Serviceressource zu entfernen:

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

Hinweis: Ersetze service-name durch deinen Servicenamen und namespace-name durch den Namespace.

Verwende die Amazon EC2-Konsole, um den Löschschutz auf dem Load Balancer zu deaktivieren, der dem Service zugeordnet ist. Oder verwende die Anmerkung service.beta.kubernetes.io/aws-load-balancer-attributes, um den Löschschutz zu deaktivieren. Weitere Informationen findest du unter Resource attributes (Ressourcenattribute) auf der Kubernetes-Website.

Führe dann den folgenden Befehl aus, um den Service zu löschen:

kubectl delete svc service-name -n namespace-name

Hinweis: Ersetze service-name durch deinen Servicenamen und namespace-name durch den Namespace.

Beheben von Problemen beim Löschen von PV und PVC

Wenn du das PersistentVolume (PV) oder den PersistentVolumeClaim (PVC) nicht löschen kannst, überprüfe, ob die folgenden Probleme vorliegen:

  • Überprüfen, ob du das PV gelöscht hast, bevor du den gebundenen PVC entfernt hast
  • Prüfen, ob du den PVC entfernt hast, als noch ein Pod ausgeführt wurde, und ob du ihn daran angefügt hast

Du hast das PV gelöscht

Um dieses Problem zu beheben, lösche den an das PV gebundenen PVC.

Führe den folgenden Befehl aus, um den PVC zu identifizieren, der sich im Status Wird beendet befindet, um das PV zu beschreiben:

kubectl get pv pv-name

Hinweis: Ersetze pv-name durch den PV-Namen. Der Befehl zeigt den PVC-Namen und den Namespace im Format NAMESPACE/PVC_NAME.

Beispielausgabe:

default/ebs-claim

Führe den folgenden Befehl aus, um den PVC zu löschen:

kubectl delete pvc -n namespace-name pvc-name

Hinweis: Ersetze namespace-name durch den PVC-Namespace und pvc-name durch den PVC-Namen.

Wenn du das PV immer noch nicht löschen kannst, führe den folgenden Befehl aus, um seine Finalizer zu entfernen:

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

Hinweis: Ersetze pv-name durch den PV-Namen.

Du hast den PVC entfernt

Um dieses Problem zu beheben, lösche den Pod, der an den PVC angefügt ist.

Um die Pods zu identifizieren, die dem PVC zugeordnet sind, führe den folgenden Befehl aus, um den PVC zu beschreiben:

kubectl describe pvc -n namespace-name pvc-name

Hinweis: Ersetze namespace-name durch den PVC-Namespace und pvc-name durch den PVC-Namen. Überprüfe in der Ausgabe das Attribut Used by (Wird verwendet von).

Beispielausgabe:

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>

Im vorherigen Beispiel verwendet der Pod ebs-app-59c74d8d45-z65kj den PVC.

Führe den folgenden Befehl aus, um den Pod zu löschen:

kubectl delete pod -n namespace-name pod-name

Hinweis: Ersetze namespace-name durch den PVC-Namespace und pod-name durch den Pod-Namen.

Wenn du den PVC immer noch nicht löschen kannst, führe den folgenden Befehl aus, um seine Finalizer zu entfernen:

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

Hinweis: Ersetze namespace-name durch den PVC-Namespace und pvc-name durch den PVC-Namen.

Probleme beim Löschen von Pods beheben

Wenn du den Pod nicht löschen kannst, überprüfe, ob die folgenden Probleme vorliegen:

  • Prüfen, ob der Pod nicht auf die Beendigungssignale reagiert
  • Überprüfen, ob dem Pod ein Finalizer zugeordnet ist, der noch nicht abgeschlossen wurde

Pod reagiert nicht auf Beendigungssignale

Wichtig: Mit der folgenden Lösung wird der Pod sofort gelöscht, ohne dass bestätigt wird, dass du den Pod, der ausgeführt wird, beendet hast. Vergewissere dich, dass der Pod nicht ausgeführt wird. Wenn du dies nicht tust, wird der Pod möglicherweise auf unbestimmte Zeit auf dem Cluster ausgeführt.

Pods werden in der Regel nach Ablauf der standardmäßigen Nachfrist von 30 Sekunden gelöscht. Wenn dein Pod nach 30 Sekunden nicht gelöscht wird, führe den folgenden Befehl aus, um das Löschen des Pods zu erzwingen:

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

Hinweis: Ersetze namespace-name durch den Pod-Namespace und pod-name durch den Pod-Namen. Du musst das Flag --grace-period auf 0 setzen, um den Pod sofort zu entfernen.

Dem Pod ist ein Finalizer zugeordnet, der noch nicht abgeschlossen wurde

Führe den folgenden Befehl aus, um zu überprüfen, ob der Pod Finalizer hat:

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

Hinweis: Ersetze namespace-name durch den Pod-Namespace und pod-name durch den Pod-Namen. Überprüfe in der Ausgabe metadata.finalizers, um Finalizer zu identifizieren.

Beispielausgabe:

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

Führe den folgenden Befehl aus, um Finalizer zu entfernen:

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

Hinweis: Ersetze namespace-name durch den Pod-Namespace und pod-name durch den Pod-Namen.

Probleme beim Löschen von Clustern beheben

In der Regel treten Probleme beim Löschen von Clustern auf, weil dem Cluster verwaltete Knotengruppen angefügt sind. Entferne die verwalteten Knotengruppen, um dieses Problem zu beheben. Weitere Informationen findest du unter Warum kann ich meinen Amazon EKS-Cluster nicht löschen?

Wenn einem Cluster ein verwalteter Scraper zugeordnet ist, können auch Probleme beim Löschen auftreten. In diesem Szenario kannst du das Virtual Private Network (VPC) oder die Elastic-Network-Schnittstelle, die der Scraper verwendet, nicht entfernen.

Führe den folgenden AWS-CLI-Befehl list-scrapers aus, um die Scraper-ID zu ermitteln:

aws amp list-scrapers

Führe dann den folgenden Befehl delete-scraper aus, um den Scraper zu löschen:

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

Hinweis: Ersetze scraper-example durch die Scraper-ID.

Probleme beim Löschen von Amazon EKS-verwalteten Knotengruppen beheben

Wenn du die verwaltete Knotengruppe nicht löschen kannst, überprüfe, ob die folgenden Probleme vorliegen:

  • Überprüfen, ob die Ressource ein abhängiges Objekt hat
  • Prüfen, ob der Vorgang zum Terminate (Beenden) der Amazon EC2 Auto Scaling-Gruppe unterbrochen ist
  • Prüfen, ob die Knotengruppe Integritätsfehler aufweist
  • Überprüfen, ob die Pods in den Knoten hängen bleiben

Die Ressource hat ein abhängiges Objekt

Das Abhängigkeitsproblem tritt auf, wenn eine Ressource, die von der verwalteten Knotengruppe erstellt wurde, einer anderen Ressource im AWS-Konto zugeordnet ist. In der Regel handelt es sich bei der Ressource um eine Sicherheitsgruppe. Identifiziere die Objekte, die der Sicherheitsgruppe zugeordnet sind, um dieses Problem zu beheben. Trenne dann die Sicherheitsgruppe von der Ressource. Wenn du auf Probleme stößt, findest du weitere Informationen unter Warum kann ich eine an meine Amazon VPC angefügte Sicherheitsgruppe nicht löschen?

Der Prozess zum Beenden der EC2 Auto Scaling-Gruppe ist unterbrochen

Um dieses Problem zu beheben, starte den Prozess zum Beenden neu.

Deine Knotengruppe weist Integritätsfehler auf

Informationen zu den Arten von Integritätsfehlern, die in der verwalteten Knotengruppe auftreten können, findest du unter Issue (Problem).

Informationen zur Behebung von Integritätsproblemen findest du unter Wie behebe ich Fehler bei verwalteten Knotengruppen in einem Amazon EKS-Cluster?

Die Pods sind in den Knoten hängen geblieben

Wenn du die verwaltete Knotengruppe löschst, wird möglicherweise die folgende Fehlermeldung angezeigt:

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

Dieses Problem kann auftreten, wenn ein Pod im Cluster im Status Wird beendet hängen bleibt. Um dieses Problem zu beheben, sorge für den kubectl-Zugriff auf den Cluster und führe dann den folgenden Befehl aus:

kubectl get pod -A

Der Fehler pods are unevictable kann auftreten, weil du das PodDisruptionBudget falsch konfiguriert hast oder nicht genügend Unterbrechungen verfügbar sind, um den Pod zu entfernen. Informationen zur Behebung dieses Problems findest du unter Wie kann ich Probleme bei der Aktualisierung verwalteter Knotengruppen bei Amazon EKS beheben?

AWS OFFICIALAktualisiert vor einem Jahr