Published on

Xử lý khi xóa Resource mà bị treo ở Terminating

Trong quá trình làm việc với Kubernetes chắc chắn có lúc chúng ta sẽ gặp phải tình trạng xóa resource mà nó cứ bị treo mãi ở bước Terminating. Thì dưới dây là một số cách xử lý khá đơn giản

Namespace

Thông thường khi deploy test thì chúng ta sẽ tạo 1 namespace riếng, khi cần xóa thì thông thường là chạy lệnh kubectl delete ns <test-namespace>

Nếu nó cứ treo miết thì khả năng cao là đang bị dừng lại ở bước Terminating thì chúng ta có thể thử chạy đoạn này xem:

kubectl get namespace <test-namespace> -o json \
  | tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" \
  | kubectl replace --raw /api/v1/namespaces/<test-namespace>/finalize -f -

Resource bất kỳ

kubectl patch <loai-resource>/<ten-resource> --type json --patch='[ { "op": "remove", "path": "/metadata/finalizers" } ]'

Ví dụ: bạn delete configmap có tên mymap mà đang bị Terminating thì có thể chạy

kubectl patch configmap/mymap \
    --type json \
    --patch='[ { "op": "remove", "path": "/metadata/finalizers" } ]'

ArgoCD

Một số lúc mình deploy app sử dụng ArgoCD, khi xóa cũng bị xoay miết thì chúng ta cần:

  • Xóa cái namespace mà bạn deploy cái app: kubectl delete ns <test-namespace>, nếu chẳng may nó vẫn bị treo ở bước Terminating thì có thể xử lý như ở trên.
  • Cuổi cùng thử đoạn mã dưới đây.
kubectl patch application/<ypur-app-name> --type json --patch='[ { "op": "remove", "path": "/metadata/finalizers" } ]' -n argocd

Nếu deploy ArgoCD ở namespace khác thì phải sửa lại cho đúng namespace khi chạy lệnh ở trên

Chúc thành công,

ANH NGUYỄN