Skip to main content

PV가 삭제되지 않을 때 조치 방법

문제 상황

특정 PV를 제거하였으나 Terminating 상태로 13분간 지속되어 콘솔에서 블록 스토리지를 강제로 삭제했으나 여전히 Terminating 상태로 지속

원인

finalizers로 삭제가 지연

파이널라이저

파이널라이저는 쿠버네티스가 오브젝트를 완전히 삭제하기 이전, 삭제 표시를 위해 특정 조건이 충족될 때까지 대기하도록 알려주기 위한 네임스페이스에 속한 키이다. 파이널라이저는 삭제 완료된 오브젝트가 소유한 리소스를 정리하기 위해 컨트롤러에게 알린다.

파이널라이저를 가진 특정한 오브젝트를 쿠버네티스가 삭제하도록 지시할 때, 쿠버네티스 API는 .metadata.delationTimestamp를 덧붙여 삭제하도록 오브젝트에 표시하며, 202 상태코드(HTTP "Accepted")을 리턴한다. 대상 오브젝트가 Terminating 상태를 유지하는 동안 컨트롤 플레인 또는 다른 컴포넌트는 하나의 파이널 라이저에서 정의한 작업을 수행한다. 정의된 작업이 완료된 후에 컨트롤러는 대상 오브젝트로부터 연관된 파이널라이저를 삭제한다. metadata.finalizers 필드가 비어있을 때, 쿠버네티스는 삭제가 완료된 것으로 간주하고 오브젝트를 삭제한다.


파이널라이저의 일반적인 예로는 퍼시스턴트 볼륨(Persistent Volume) 오브젝트가 실수로 삭제되는 것을 방지 하는 kubernetes.io/pv-protection가 있다. 파드가 퍼시스턴트 볼륨 오브젝트를 사용 중일 때 쿠버네티스는 pv-protection 파이널라이저를 추가한다. 퍼시스턴트 볼륨을 삭제하려 하면 Terminating 상태가 되지만 파이널라이저가 존재하기 때문에 컨트롤러가 삭제할 수 없다. 파드가 퍼시스턴트 볼륨의 사용을 중지하면 쿠버네티스가 pv-protection 파이널라이저를 해제하고 컨트롤러는 볼륨을 삭제한다.

조치 방법

  • edit 명령을 통해 직접 yaml 파일 내 finalizer를 제거하여 PV를 삭제하였다.
  • yaml로 가져온 뒤 수정하고 나서 apply 명령이 잘 적용되지 않으면 replace를 사용하여 finalizer를 제거해줄 수도 있다.
  • 추가로 PV의 상태가 10분 이상 Terminating 상태일 때 상태를 전달하는 프로메테우스 알람을 추가하였다.
$ k describe pv pvc-07cf4ec3e96f4ac7b571dc8097
Name: pvc-07cf4ec3e96f4ac7b571dc8097
Labels: <none>
Annotations: pv.kubernetes.io/provisioned-by: blk.csi.ncloud.com
# Finalizers 설정
Finalizers: [kubernetes.io/pv-protection]
StorageClass: nks-block-storage
Status: Terminating (lasts 13m)
Claim: monitoring/storage-loki-0
Reclaim Policy: Delete
Access Modes: RWO
VolumeMode: Filesystem
Capacity: 10Gi
Node Affinity:
Required Terms:
Term 0: regionNo in [8]
zoneNo in [84]
Message:
Source:
Type: CSI (a Container Storage Interface (CSI) volume source)
Driver: blk.csi.ncloud.com
FSType: ext4
VolumeHandle: 22782310
ReadOnly: false
VolumeAttributes: blockStorageDiskType=SSD
storage.kubernetes.io/csiProvisionerIdentity=1712826752393-8081-blk.csi.ncloud.com
storageType=blockStorage
volumeName=pvc-07cf4ec3e96f4ac7b571dc8097

$ k edit pv pvc-07cf4ec3e96f4ac7b571dc8097
persistentvolume/pvc-07cf4ec3e96f4ac7b571dc8097 edited
# 제거
finalizers:
- kubernetes.io/pv-protection