Background


최근에 업무를 진행하면서, 쿠버네티스에서 CRD 객체를 삭제할 때에 정상적으로 진행되지 않는 경우가 있었는데요

k8s patch 명령을 통해서 직접 .metadata.finalizer를 먼저 제거해준 후에 삭제를 진행했더니 정상적으로 삭제됨을 확인할 수 있었습니다

동작은 확인을 했지만, 왜 이렇게 동작하는지는 잘 모르겠더라구요

이번 포스트는 쿠버네티스에서의 finalizer의 역할은 무엇인지 궁금증을 해소하기 위해서 적어보도록 하겠습니다


kubectl delete

Finalizer를 본격적으로 살펴보기 전에 kubectl delete의 매커니즘을 확인할 필요가 있습니다

쿠버네티스에는 객체를 create, get, patch, delete 할 수 있는 명령들이 존재합니다

configmap 객체에 대해서 명령들이 어떻게 동작하는지 확인해 보겠습니다

kubectl create configmap mymap
configmap/mymap created

create를 통해서 객체를 생성하게 되면 get 명령으로 아래와 같이 확인이 가능합니다

kubectl get configmap/mymap
NAME    DATA   AGE
mymap   0      12s

하지만 delete를 통해 객체를 삭제한 뒤에는 get 명령을 통해 객체의 정보를 얻을 수 없습니다

kubectl delete configmap/mymap
configmap "mymap" deleted
kubectl get configmap/mymap
Error from server (NotFound): configmaps "mymap" not found

image