Hapus Paksa Namespace di Kubernetes
Apakah Anda memiliki namespace di cluster Kubernetes Anda yang macet dalam status “Terminating”? Ketika sebuah namespace macet dalam status ini, biasanya berarti Kubernetes tidak berhasil membersihkan sumber daya di namespace tersebut. Alasan utamanya adalah finalizer atau sumber daya tidak dibersihkan dengan benar atau macet. Lihat contohnya di bawah ini:
$ kubectl get ns
NAME STATUS AGE
calico-apiserver Active 4d13h
calico-system Active 4d13h
default Active 4d13h
kube-node-lease Active 4d13h
kube-public Active 4d13h
kube-system Active 4d13h
longhorn-system Terminating 18m
tigera-operator Active 4d13hSaya dapat mengonfirmasi bahwa pod dan sumber daya lainnya telah dihapus, tetapi status tetap "Terminating". Mari kita pertimbangkan beberapa cara untuk memaksa menghapus namespace ini di Kubernetes.
Atur nama namespace yang macet di variabel NS.
NS=longhorn-systemSebelum memaksa penghapusan namespace, periksa apakah ada sumber daya yang tertunda yang mungkin menyebabkan masalah:
kubectl get all --namespace=$NS1. Batalkan finalizer secara manual
Jika sebuah namespace memiliki finalizer yang tidak dihapus dengan benar, namespace tersebut bisa terjebak dalam status “terminating”. Anda dapat mengedit file yaml objek namespace:
kubectl edit namespace $NSDi editor, temukan field finalizers dan hapus dengan cara mengaturnya seperti berikut:
finalizers: []2. Paksa Hapus Menggunakan kubectl
Jika opsi pertama tidak berhasil, Anda dapat memaksa penghapusan namespace dengan melakukan patch.
Paksa penghapusan namespace yang macet di Kubernetes.
kubectl get $NS -o json | jq '.spec.finalizers=[]' | kubectl replace --raw "/api/v1/ $NS/longhorn-system/finalize" -f -Catatan: jq harus diinstal agar Anda dapat memodifikasi output JSON. Harap diketahui bahwa metode ini melewati finalizer.
3. Paksa hapus namespace
Flag --grace-period=0 dan --force dapat digunakan untuk memaksa penghapusan namespace di Kubernetes. Namun, metode ini mungkin meninggalkan sumber daya yatim dan sebaiknya digunakan dengan hati-hati:
kubectl delete namespace $NS --grace-period=0 --forceAnda dapat memastikan apakah namespace telah dihapus dengan menjalankan perintah berikut:
kubectl get $NSOutput di bawah menunjukkan bahwa itu tidak ada:
error: the server doesn't have a resource type "longhorn-system"