일반적으로 디스크 볼륨을 설정하려면 물리적 디스크를 생성해야하고,
이러한 물리적 디스크에 대한 설정도 자세하게 이해해야 함.
쿠버네티스는 개발자들이 손쉽게 필요한 인프라(컨테이너, 디스크, 네트워크 등)을 설정할 수 있도록 하기 위해서, 개발자가 인프라에 대한 깊은 이해 없이 간단하게 사용할 수 있도록 디스크 볼륨 부분에서 PersistentVolumeClaim(이하 PVC)와 PersistentVolume(이하 PV) 개념을 도입했다.
시스템 관리자 : 실제 물리 디스크를 생성한 후에, 이 디스크를 PersistentVolume라는 이름으로 쿠버네티스에 등록한다.
개발자 : Pod를 생성할 때 볼륨을 정의한다. 이 볼륨 정의 부분에 물리적 디스크에 대해 정의하는 것이 아니라 PVC를 지정해서, 관리자가 생성한 PV와 연결한다.
(PVC : PV Claim, PV 생성 요청)
PVC 정의 YAML 파일 예시
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mydisk
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
accessMode : Pod에서 PV에 접근할 수 있는 정책으로, 다음과 같이 여러 개의 모드가 있다. 모든 디스크에 사용이 가능한 것은 아니고 디스크의 특성에 따라서 선택적으로 지원된다.
- ReadWriteOnce : 해당 PV는 하나의 Pod에만 마운트되고 하나의 Pod에서만 읽고 쓰기가 가능하다.
- ReadOnlyMany : 여러 개의 Pod에 마운트가 가능하며, 여러 개의 Pod에서 동시에 읽기가 가능하다. 쓰기는 불가능함.
- ReadWriteMany : 여러 개의 Pod에 마운트가 가능하고, 동시에 여러 개의 Pod에서 읽기와 쓰기가 가능하다.
resources : 필요한 볼륨의 사이즈 정의.
시스템 관리자가 별도로 생성하고 PV를 생성할 필요 없이,
PVC만 정의하면 이에 맞는 물리 디스크와 PV를 생성해주는 기능이다. (자동화)
PVC를 정의하면, PVC의 내용에 따라 쿠버네티스 클러스터가 물리 디스크를 생성하고, 이에 연결된 PV를 생성한다.
PVC에서 storage class를 지정하면 이에 맞는 디스크가 생성된다.
storage class를 지정하지 않으면 디폴트로 설정된 storage class 값을 사용하게 된다.
동적 생성 방법 : PVC에 필요한 디스크 용량을 지정해놓으면, 자동으로 이에 해당하는 물리 디스크 및 PV가 생성된다.
1) PVC YAML 파일 작성 - accessMode(Pod 접근 설정), resources(디스크 용량) 등 설정
2) Pod 생성 (Pod YAML 파일 작성) - Pod spec 부분에서persistentVolumeClaim 정의 (PVC YAML에서 정의한 PVC 이용해 연결)
Pod를 생성한 후, kubectl get pvc 명령어를 사용해 생성된 PVC와 PV를 확인할 수 있다.