[CKA] PersistentVolume과 PVC 실습
PV와 PVC의 바인딩 조건, Pod 마운트, StorageClass 기반 확장을 정리합니다.
PVC가 Pending이면 요청 용량, access mode, StorageClass와 PV 상태를 비교합니다.
kubectl get pv
kubectl get pvc -A
kubectl describe pvc <claim> -n <namespace>
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes: [ReadWriteOnce]
volumeMode: Filesystem
resources:
requests:
storage: 10Mi
Pod에서는 volume이 PVC를 참조하고, 컨테이너가 같은 volume 이름을 마운트합니다.
spec:
containers:
- name: app
image: nginx
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
persistentVolumeClaim:
claimName: my-pvc
기존 PV를 특정 PVC에 연결해야 한다면 용량과 access mode뿐 아니라 storageClassName과 필요 시 volumeName을 확인합니다.
다음은 StorageClass가 없는 기존 PV를 명시적으로 선택하는 PVC입니다. 빈 문자열을 명시하지 않으면 클러스터의 기본 StorageClass가 적용되어 동적 프로비저닝이 시작될 수 있습니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
storageClassName: ""
volumeName: <pv-name>
accessModes: [ReadWriteOnce]
resources:
requests:
storage: 10Mi
기존 PV에 storageClassName이 있다면 빈 문자열 대신 정확히 같은 class를 PVC에 지정합니다. control plane은 volumeName을 지정해도 storage class, access mode와 요청 용량이 유효한지 확인합니다. 자세한 조건은 PersistentVolume 예약 공식 문서에서 확인할 수 있습니다.
PVC 확장
StorageClass에서 확장을 허용해야 PVC 요청 용량을 늘릴 수 있습니다.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
provisioner: <csi-provisioner>
allowVolumeExpansion: true
그다음 PVC의 resources.requests.storage를 더 큰 값으로 수정하고 상태를 확인합니다. provisioner는 클러스터 환경에 맞는 값을 사용해야 합니다.
kubectl edit pvc my-pvc
kubectl get pvc my-pvc -w