Memecahkan masalah namespace yang macet dalam status Dihentikan


Halaman ini menunjukkan cara menyelesaikan masalah terkait namespace yang macet dalam status Terminating.

Namespace menggunakan finalizer Kubernetes untuk mencegah penghapusan jika satu atau beberapa resource dalam namespace masih ada. Saat Anda menghapus namespace menggunakan perintah kubectl delete, namespace akan memasuki status Terminating. Namespace tetap dalam status Terminating hingga Kubernetes menghapus resource dependennya dan menghapus semua finalizer. Pengontrol siklus proses namespace pertama-tama mencantumkan semua resource di namespace yang perlu dihapus oleh GKE.

Jika GKE tidak dapat menghapus resource dependen, atau jika pengontrol siklus proses namespace tidak dapat memastikan bahwa namespace kosong, namespace akan tetap dalam status Terminating hingga Anda menyelesaikan masalah ini.

Untuk menyelesaikan namespace yang terjebak dalam status Terminating, identifikasi dan hapus komponen tidak responsif yang memblokir penghapusan. Coba solusi berikut secara berurutan:

  1. Menemukan dan menghapus layanan API yang tidak tersedia.
  2. Menemukan dan menghapus resource yang tersisa.
  3. Memaksa penghapusan namespace.

Menemukan dan menghapus layanan API yang tidak tersedia

  1. Cantumkan layanan API yang tidak tersedia:

    kubectl get apiservice | grep False
    
  2. Pemecahan masalah layanan yang tidak responsif:

    kubectl describe apiservice API_SERVICE
    

    Mengganti API_SERVICE dengan nama layanan yang tidak responsif.

  3. Periksa apakah status namespace masih Terminating:

    kubectl get ns | grep Terminating
    

Menemukan dan menghapus resource yang tersisa

  1. Menampilkan daftar semua resource yang tersisa dalam namespace yang terhenti:

    kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n NAMESPACE
    

    Ganti NAMESPACE dengan nama namespace yang ingin Anda hapus.

  2. Hapus resource apa pun yang ditampilkan dalam output.

  3. Periksa apakah status namespace masih Terminating:

    kubectl get ns | grep Terminating
    

Memaksa penghapusan namespace

Hapus finalizer yang memblokir penghapusan namespace untuk memaksa penghentian namespace:

  1. Simpan manifes namespace sebagai file YAML:

    kubectl get ns NAMESPACE -o yaml > ns-terminating.yml
    
  2. Buka manifes di editor teks dan hapus semua nilai di kolom spec.finalizers:

    vi ns-terminating.yml
    
  3. Pastikan bahwa kolom finalizer kosong:

    cat ns-terminating.yml
    

    Output-nya akan terlihat seperti berikut:

    apiVersion: v1
    kind: Namespace
    metadata:
      annotations:
      name: NAMESPACE
    spec:
      finalizers:
    status:
      phase: Terminating
    
  4. Mulai proxy HTTP untuk mengakses Kubernetes API:

    kubectl proxy
    
  5. Ganti manifes namespace menggunakan 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. Periksa apakah status namespace masih Terminating:

    kubectl get ns | grep Terminating
    

Langkah selanjutnya

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.