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 con 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.