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:
- Menemukan dan menghapus layanan API yang tidak tersedia.
- Menemukan dan menghapus resource yang tersisa.
- Memaksa penghapusan namespace.
Menemukan dan menghapus layanan API yang tidak tersedia
Cantumkan layanan API yang tidak tersedia:
kubectl get apiservice | grep False
Pemecahan masalah layanan yang tidak responsif:
kubectl describe apiservice API_SERVICE
Mengganti
API_SERVICE
dengan 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 NAMESPACE
Ganti
NAMESPACE
dengan nama namespace yang ingin Anda hapus.Hapus 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.yml
Buka manifes di editor teks dan hapus semua nilai di kolom
spec.finalizers
:vi ns-terminating.yml
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
Mulai proxy HTTP untuk mengakses Kubernetes API:
kubectl proxy
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
Periksa apakah status namespace masih
Terminating
:kubectl get ns | grep Terminating
Langkah selanjutnya
Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.