mariadb instance 생성 시 StatefulSet 내의 volumeClaimTemplates 가 pvc 이므로 그 때 PV와 Bound될 것이다. 여기서는 pv,pvc 바운드 과정을 확인하기 위해 사용자 정의 pvc를 적용해 본다.
mdb-pvc.ymlapiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
storageClassName: local-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
vagrant@master:~$ k apply -f mdb-pvc.yml
persistentvolumeclaim/mypvc created
vagrant@master:~$ k get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mypvc Bound mypv3 500Mi RWO local-storage 2s
vagrant@master:~$ k get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mypv1 500Mi RWO Delete Available local-storage 8m30s
mypv2 500Mi RWO Delete Available local-storage 8m30s
mypv3 500Mi RWO Delete Bound default/mypvc local-storage 8m30s
사전의 만들어 두었던 3개의 PV 중 하나의 상태가 Bound 로 변했다.
pvc를 삭제하면 Reclaim Policy 가 Delete 이므로 Bound 된 PV가 함께 삭제될 것이라 예상할 수 있다. 하지만...
vagrant@master:~$ k delete pvc mypvc
persistentvolumeclaim "mypvc" deleted
vagrant@master:~$ k get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/mypv1 500Mi RWO Delete Available local-storage
11m
persistentvolume/mypv2 500Mi RWO Delete Available local-storage
11m
persistentvolume/mypv3 500Mi RWO Delete Failed default/mypvc local-storage
11m
로컬 마운트 지점이 /mnt 가 아닐 경우 자동 삭제가 안된다.
vagrant@master:~$ k describe pv mypv3
Name: mypv3
Labels: type=local
Annotations: pv.kubernetes.io/bound-by-controller: yes
Finalizers: [kubernetes.io/pv-protection]
StorageClass: local-storage
Status: Failed
Claim: default/mypvc
Reclaim Policy: Delete
Access Modes: RWO
VolumeMode: Filesystem
Capacity: 500Mi
Node Affinity: <none>
Message: host_path deleter only supports /tmp/.+ but received provided /mnt/data3
Source:
Type: HostPath (bare host directory volume)
Path: /mnt/data3
HostPathType:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning VolumeFailedDelete 45s persistentvolume-controller host_path deleter only supports /tmp/.+ but received provided /mnt/data3
직접 문제의 pv를 삭제하고 다시 생성한다.
vagrant@master:~$ k delete pv mypv3
persistentvolume "mypv3" deleted
vagrant@master:~$ k apply -f mdb-pv.yml
persistentvolume/mypv1 unchanged
persistentvolume/mypv2 unchanged
persistentvolume/mypv3 created
vagrant@master:~$ k get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mypv1 500Mi RWO Delete Available local-storage 13m
mypv2 500Mi RWO Delete Available local-storage 13m
mypv3 500Mi RWO Delete Available local-storage 8s