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 terlebih dahulu 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:
- Menemukan dan menghapus layanan API yang tidak tersedia.
- Temukan dan hapus resource yang tersisa.
- Hapus namespace secara paksa.
Menemukan dan menghapus layanan API yang tidak tersedia
Mencantumkan layanan API yang tidak tersedia:
kubectl get apiservice | grep FalsePemecahan masalah layanan yang tidak responsif:
kubectl describe apiservice API_SERVICEMengganti
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 semua resource 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 penghentian namespace:
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 Cloud Customer Care.
- Mendapatkan dukungan dari komunitas dengan
mengajukan pertanyaan di StackOverflow
dan menggunakan tag
google-kubernetes-engineuntuk menelusuri masalah serupa. Anda juga dapat bergabung ke channel Slack#kubernetes-engineuntuk mendapatkan dukungan komunitas lainnya. - Membuka laporan masalah atau permintaan fitur menggunakan issue tracker publik.