Questa pagina mostra come risolvere i problemi relativi a uno spazio dei nomi bloccato nello stato Terminating
.
Gli spazi dei nomi utilizzano i finalizzatori Kubernetes
per impedire l'eliminazione se esistono ancora una o più risorse all'interno di uno spazio dei nomi.
Quando elimini uno spazio dei nomi utilizzando il comando kubectl delete
, lo spazio dei nomi
entra nello stato Terminating
.
Lo spazio dei nomi rimane nello stato Terminating
fino a quando Kubernetes non elimina le risorse dipendenti
e cancella tutti i finalizzatori. Il controller del ciclo di vita dello spazio dei nomi elenca innanzitutto
nello spazio dei nomi che GKE deve eliminare.
Se GKE non riesce a eliminare una risorsa dipendente o se il controller del ciclo di vita dello spazio dei nomi non riesce a verificare che lo spazio dei nomi sia vuoto, lo spazio dei nomi rimane nello stato Terminating
finché non risolvi il problema.
Per risolvere un ambito bloccato nello stato Terminating
, identifica
e rimuovi eventuali componenti non validi che bloccano l'eliminazione. Prova queste soluzioni
nell'ordine:
- Trovare e rimuovere i servizi API non disponibili.
- Individua e rimuovi le risorse rimanenti.
- Forza l'eliminazione dello spazio dei nomi.
Trovare e rimuovere servizi API non disponibili
Elenca i servizi API non disponibili:
kubectl get apiservice | grep False
Risolvi i problemi relativi ai servizi che non rispondono:
kubectl describe apiservice API_SERVICE
Sostituisci
API_SERVICE
con il nome del servizio che non risponde.Controlla se lo stato dello spazio dei nomi è ancora
Terminating
:kubectl get ns | grep Terminating
Trovare e rimuovere le risorse rimanenti
Elenca tutte le risorse rimanenti nello spazio dei nomi di destinazione:
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n NAMESPACE
Sostituisci
NAMESPACE
con il nome dello spazio dei nomi che vuoi eliminare.Rimuovi le risorse visualizzate nell'output.
Controlla se lo stato dello spazio dei nomi è ancora
Terminating
:kubectl get ns | grep Terminating
Forza l'eliminazione dello spazio dei nomi
Rimuovi i finalizzatori che bloccano l'eliminazione dello spazio dei nomi per forzare lo spazio dei nomi per terminare:
Salva il manifest dello spazio dei nomi come file YAML:
kubectl get ns NAMESPACE -o yaml > ns-terminating.yml
Apri il file manifest in un editor di testo e rimuovi tutti i valori nel
spec.finalizers
campo:vi ns-terminating.yml
Verifica che il campo finalizers sia vuoto:
cat ns-terminating.yml
L'output dovrebbe essere simile al seguente:
apiVersion: v1 kind: Namespace metadata: annotations: name: NAMESPACE spec: finalizers: status: phase: Terminating
Avvia un proxy HTTP per accedere all'API Kubernetes:
kubectl proxy
Sostituisci il manifest dello spazio dei nomi utilizzando
curl
:curl -H "Content-Type: application/yaml" -X PUT --data-binary @ns-terminating.yml http://127.0.0.1:8001/api/v1/namespaces/NAMESPACE/finalize
Controlla se lo stato dello spazio dei nomi è ancora
Terminating
:kubectl get ns | grep Terminating
Passaggi successivi
Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud.