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 FalseRisolvi i problemi relativi ai servizi che non rispondono:
kubectl describe apiservice API_SERVICESostituisci
API_SERVICEcon 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 NAMESPACESostituisci
NAMESPACEcon 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.ymlApri il manifest in un editor di testo e rimuovi tutti i valori nel campo
spec.finalizers:vi ns-terminating.ymlVerifica che il campo finalizers sia vuoto:
cat ns-terminating.ymlL'output dovrebbe essere simile al seguente:
apiVersion: v1 kind: Namespace metadata: annotations: name: NAMESPACE spec: finalizers: status: phase: TerminatingAvvia un proxy HTTP per accedere all'API Kubernetes:
kubectl proxySostituisci 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/finalizeControlla 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-engineper cercare problemi simili. Puoi anche unirti al canale Slack#kubernetes-engineper ulteriore assistenza della community. - Apertura di bug o richieste di funzionalità utilizzando lo strumento di monitoraggio dei problemi pubblico.