Questa pagina mostra come risolvere i problemi relativi a uno spazio dei nomi bloccato nello stato
Terminating
.
Gli spazi dei nomi utilizzano i finalizer di 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
finché Kubernetes non elimina le risorse dipendenti e non cancella tutti i finalizzatori. Il controller del ciclo di vita dello spazio dei nomi elenca innanzitutto tutte le risorse 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 problema relativo a uno spazio dei nomi bloccato nello stato Terminating
, identifica
e rimuovi tutti i componenti non integri che bloccano l'eliminazione. Prova queste soluzioni
in ordine:
- Trova e rimuovi i servizi API non disponibili.
- Trova e rimuovi le risorse rimanenti.
- Forza l'eliminazione dello spazio dei nomi.
Trovare e rimuovere i 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 in fase di terminazione:
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 tutte 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 finalizer che bloccano l'eliminazione dello spazio dei nomi per forzare la terminazione dello spazio dei nomi:
Salva il manifest dello spazio dei nomi come file YAML:
kubectl get ns NAMESPACE -o yaml > ns-terminating.yml
Apri il manifest in un editor di testo e rimuovi tutti i valori nel campo
spec.finalizers
: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 non riesci a trovare una soluzione al tuo problema nella documentazione, consulta la sezione Richiedere assistenza per ulteriore aiuto, inclusi consigli sui seguenti argomenti:
- Aprire una richiesta di assistenza contattando l'assistenza clienti cloud.
- Ricevere assistenza dalla community
ponendo domande su StackOverflow e utilizzando il tag
google-kubernetes-engine
per cercare problemi simili. Puoi anche unirti al canale Slack#kubernetes-engine
per ulteriore assistenza della community. - Apertura di bug o richieste di funzionalità utilizzando lo strumento di monitoraggio dei problemi pubblico.