쿠버네티스에서 리소스를 삭제하려고 할 때, 특정 조건을 충족시킬때 까지 삭제를 방지하는 역할을한다.
일반적으로는 코드가 아닌 특정 키가 기술된다.
동작 과정
- 처음 메타데이터 파일(ex) yaml)에 metadata.finalizers 필드에 조건을 기술하여 생성한다.
- 쿠버네티스 리소스 삭제 명령을 내릴 시 쿠버네티스 API는 해당 리소스에 .metadata.deletionTimestamp를 추가한 후 202 코드를 리턴한다.
- 해당 오브젝트(리소스)는 컨트롤러가 finalizer에 정의된 조건을 충족시킬때까지 Terminating 상태에서 대기한다.
- 조건이 충족될때마다 컨트롤러는 finalizer내의 충족된 키를 제거한다.
- metadata.finalizers 필드가 empty 상태가 되면, 해당 오브젝트는 삭제된다.
예시
- PersistentVolume 객체의 삭제를 방지하는 kubernetes.io/pv-protection이 있다.
- pod에서 해당 볼륨을 사용중이라면 pv 삭제를 시도하더라고 pod가 정리되기 전까지는 삭제되지 않는다.