Halaman ini menunjukkan cara mengatasi masalah namespace yang stuck 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 akan tetap dalam status Terminating hingga Kubernetes menghapus resource dependennya dan menghapus semua finalizer. Pengontrol siklus proses namespace pertama-tama akan mencantumkan semua resource dalam 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 stuck dalam status Terminating, identifikasi dan hapus komponen tidak responsif yang memblokir penghapusan. Coba solusi berikut secara berurutan:
- Temukan dan hapus layanan API yang tidak tersedia.
- Temukan dan hapus resource yang tersisa.
- Paksa penghapusan namespace.
Menemukan dan menghapus layanan API yang tidak tersedia
Cantumkan layanan API yang tidak tersedia:
kubectl get apiservice | grep FalsePemecahan masalah layanan yang tidak responsif:
kubectl describe apiservice API_SERVICEGanti
API_SERVICEdengan nama layanan yang tidak responsif.Periksa apakah status namespace masih
Terminating:kubectl get ns | grep Terminating
Menemukan dan menghapus resource yang tersisa
Menampilkan daftar semua resource yang tersisa dalam namespace yang terhenti:
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n NAMESPACEGanti
NAMESPACEdengan nama namespace yang ingin Anda hapus.Hapus resource apa pun yang ditampilkan dalam output.
Periksa apakah status namespace masih
Terminating:kubectl get ns | grep Terminating
Memaksa penghapusan namespace
Hapus finalizer yang memblokir penghapusan namespace untuk memaksa namespace dihentikan:
Simpan manifes namespace sebagai file YAML:
kubectl get ns NAMESPACE -o yaml > ns-terminating.ymlBuka manifes di editor teks dan hapus semua nilai di kolom
spec.finalizers:vi ns-terminating.ymlPastikan bahwa kolom finalizer kosong:
cat ns-terminating.ymlOutput-nya akan terlihat seperti berikut:
apiVersion: v1 kind: Namespace metadata: annotations: name: NAMESPACE spec: finalizers: status: phase: TerminatingMulai proxy HTTP untuk mengakses Kubernetes API:
kubectl proxyGanti 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/finalizePeriksa apakah status namespace masih
Terminating:kubectl get ns | grep Terminating
Langkah berikutnya
Jika Anda tidak dapat menemukan solusi untuk masalah Anda dalam dokumentasi, lihat Mendapatkan dukungan untuk mendapatkan bantuan lebih lanjut, termasuk saran tentang topik berikut:
- Membuka kasus dukungan dengan menghubungi Dukungan Pelanggan Cloud.
- Mendapatkan dukungan dari komunitas dengan
mengajukan pertanyaan di StackOverflow
dan menggunakan tag
google-kubernetes-engineuntuk menelusuri masalah serupa. Anda juga dapat bergabung ke saluran Slack untuk mendapatkan dukungan komunitas lainnya.#kubernetes-engine - Membuka masalah atau permintaan fitur dengan menggunakan issue tracker publik.