Kubernetes의 PersistentVolume 와 PersistentVolumeClaim 연동에 관해 (+ srorageClass)
PVC와 PV가 연결되려면 무조껀 같은 storageClass에 존재하여야 한다.
PVC는 같은 storageClass에 속한 PV를 찾고, storageClass 오브젝트가 존재할시에는, 동적으로 PV를 생성하여 PVC에 할당하고, storageClass오브젝트가 존재하지 않을시에는 Pending 상태로 머무르게 된다.
PVC는 spec.storageClassName의 default값이 현재 kubernetes환경의 default StorageClass로 정의되므로, ''로 재정의 해줘야한다.
여기서 ''는 storageclass를 설정하지 않는다 라는 뜻으로 이해하면 된다.
그리고 PV는 spec.storageClassName의 default값이 '' 이다.
# PVC에서 이렇게 설정해줘야한다.
spec:
storageClassName: ''
만약 PVC의 storageClass가 default로 정의되는것이 싫다면, 현재 default로 설정되어있는 storageclass의 값 중
metadata.annotations.storageclass.kubernetes.io/is-default-class 값을 "true"에서 "false"로 변경시켜 주면 이후의 PVC 생성시 stroageClass는 자동 설정되지 않는다.
이후로는 PV와 PVC의 storageClass가 동일하므로, 우리는 리소스가 엑세스 모드, selector만 신경쓰면 된다.
PVC는 리소스와 엑세스 모드에 대한걸 PV가 수용할수 있다면, 좀 더 요구사항에 맞는 볼륨에게 느슨하게 연동이 되는듯 하다.
수용할수 있다는것은, PV의 리소스의 크기와, 엑세스 모드의 종류가 PVC가 요구하는 리소스의 크키과, 엑세스 모드의 종류를 포함할수 있다는 의미이다.
Bound가 되고나서는, PVC는 PV의 리소스 크기와 엑세스 모드가 동일해진다.
만약 PVC=1G,RWO PV=5G,RWO,RWX 라면, PVC도 5G,RWO,RWX 가 된다.
PVC의 SPEC은 그대로지만, STATUS가 PV에 맞춰 늘어난다.
그리고, PVC의 selector가 존재한다면, selector에 맞는 PV로 연동된다.
존재 하지 않는다면, Pending상태로 머무르게 된다.
결론: PV와 PVC가 같은 스토리지 클래스이고, 요구사항을 수용할수 있고, selector가 있다면, PVC는 그것에 맞는 PV로 연동된다.