Risoluzione dei problemi dello spazio dei nomi bloccato nello stato di chiusura


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:

  1. Trovare e rimuovere i servizi API non disponibili.
  2. Individua e rimuovi le risorse rimanenti.
  3. Forza l'eliminazione dello spazio dei nomi.

Trovare e rimuovere servizi API non disponibili

  1. Elenca i servizi API non disponibili:

    kubectl get apiservice | grep False
    
  2. 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.

  3. Controlla se lo stato dello spazio dei nomi è ancora Terminating:

    kubectl get ns | grep Terminating
    

Trovare e rimuovere le risorse rimanenti

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

  2. Rimuovi le risorse visualizzate nell'output.

  3. 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:

  1. Salva il manifest dello spazio dei nomi come file YAML:

    kubectl get ns NAMESPACE -o yaml > ns-terminating.yml
    
  2. Apri il file manifest in un editor di testo e rimuovi tutti i valori nel spec.finalizers campo:

    vi ns-terminating.yml
    
  3. 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
    
  4. Avvia un proxy HTTP per accedere all'API Kubernetes:

    kubectl proxy
    
  5. 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
    
  6. 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.