Auf dieser Seite wird beschrieben, wie Sie Probleme mit einem Namespace beheben, der im Status Terminating festhängt.
Namespaces verwenden Kubernetes-Finalizer
um das Löschen zu verhindern, wenn noch eine oder mehrere Ressourcen in einem Namespace vorhanden sind.
Wenn Sie einen Namespace mit dem kubectl delete-Befehl löschen, ändert sich sein Status in Terminating.
Der Namespace bleibt im Status Terminating, bis Kubernetes die abhängigen Ressourcen löscht und alle Finalizer entfernt hat. Der Namespace-Lebenszykluscontroller listet zuerst alle Ressourcen im Namespace auf, die von GKE gelöscht werden müssen.
Wenn GKE eine abhängige Ressource nicht löschen kann oder der Namespace-Lebenszykluscontroller nicht prüfen kann, ob der Namespace leer ist, bleibt der Namespace im Status Terminating, bis Sie das Problem behoben haben.
Wenn Sie das Problem eines im Status Terminating festhängenden Namespace beheben möchten, identifizieren und entfernen Sie alle fehlerhaften Komponenten, die das Löschen blockieren. Probieren Sie diese Lösungen in der folgenden Reihenfolge aus:
- Nicht verfügbare API-Dienste finden und entfernen.
- Übriggebliebene Ressourcen finden und entfernen.
- Löschen eines Namespace erzwingen.
Nicht verfügbare API-Dienste finden und entfernen
Nicht verfügbare API-Dienste auflisten:
kubectl get apiservice | grep FalseFehlerbehebung bei nicht reagierenden Diensten:
kubectl describe apiservice API_SERVICEErsetzen Sie
API_SERVICEdurch den Namen des nicht reagierenden Dienstes.Prüfen Sie, ob der Status des Namespaces weiterhin
Terminatingist:kubectl get ns | grep Terminating
Übriggebliebene Ressourcen suchen und entfernen.
Listen Sie alle Ressourcen auf, die im zu schließenden Namespace übriggeblieben sind:
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n NAMESPACEErsetzen Sie
NAMESPACEdurch den Namen des Namespace, den Sie löschen möchten.Entfernen Sie alle in der Ausgabe angezeigten Ressourcen.
Prüfen Sie, ob der Status des Namespaces weiterhin
Terminatingist:kubectl get ns | grep Terminating
Löschen eines Namespace erzwingen
Entfernen Sie die Finalizer, die das Löschen des Namespace blockieren, um das Beenden des Namespace zu erzwingen:
Speichern Sie das folgende Manifest als YAML-Datei:
kubectl get ns NAMESPACE -o yaml > ns-terminating.ymlÖffnen Sie das Manifest in einem Texteditor und entfernen Sie alle Werte aus dem
spec.finalizers-Feld:vi ns-terminating.ymlPrüfen Sie, ob das Feld „Finalizers“ leer ist:
cat ns-terminating.ymlDie Ausgabe sollte in etwa so aussehen:
apiVersion: v1 kind: Namespace metadata: annotations: name: NAMESPACE spec: finalizers: status: phase: TerminatingStarten Sie einen HTTP-Proxy, um auf die Kubernetes API zuzugreifen:
kubectl proxyErsetzen Sie das Namespace-Manifest durch
curl:curl -H "Content-Type: application/yaml" -X PUT --data-binary @ns-terminating.yml http://127.0.0.1:8001/api/v1/namespaces/NAMESPACE/finalizePrüfen Sie, ob der Status des Namespaces weiterhin
Terminatingist:kubectl get ns | grep Terminating
Nächste Schritte
Wenn Sie in der Dokumentation keine Lösung für Ihr Problem finden, lesen Sie den Hilfeartikel Support erhalten. Dort finden Sie unter anderem Informationen zu folgenden Themen:
- Supportanfrage erstellen, indem Sie sich an Cloud Customer Care wenden.
- Support von der Community erhalten, indem Sie
Fragen auf Stack Overflow stellen
und mit dem
google-kubernetes-engineTag nach ähnlichen Problemen suchen. Sie können auch dem#kubernetes-engineSlack-Kanal beitreten, um mehr Community-Support zu erhalten. - Probleme melden oder Featureanfragen stellen, indem Sie die öffentliche Problemverfolgung verwenden.