Open engal1991 opened 2 years ago
기존에 NFS 를 고정명시를 했기에 반드시 NFS 를 사용해야만하며, 기존 데이터를 보관하기위해 다른 네트워크 볼륨을 쓰고싶다면 YAML 를 여러 개 만들어 배포해한다. 즉 너무 밀접해서 뗄레야 뗄 수 없게되버리는 불편한 상황이 벌어진다.
이를 해소하기위해 PV PVC 를 제공한다.
핵심은 YAML 입장에서는 네트워크 볼륨이 NFS이든, EBS이든 모른채 상관없이 볼륨을 사용하도록 하는 것이다.
kubectl get pv,pvc
명령어로 리소스 목록 출력 가능
AWS의EBS 를 예로들어보면.
kind : PersistentVolume
meatdata:
name: ebs-pv
spec :
capacity :
storgae: 5Gi
accessModes :
- ReadWriteOnce
awsElasticBlockStore :
fsType : ext4
volumeID : <VOLUME_ID>
이후 PV 생성 그후 get pv
명령어 실행하면 STATUS 가 Available ( 사용 가능 ) 으로 나오게 된다.
kind: PersistentVolumeClaim
metadata :
name : my-ebs-pvc
spec:
storageClassName: ""
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
PVC 는 특정조건을 만족하는 볼륨만을 사용해야한다는것을 쿠버네티스에 알려줄 필요가 있다. AccessMode 나 볼륨 크기 등이 조건이 해당된다. 두 속성이 부합해야만 쿠버네이트는 두 리소스를 매칭해 바인드한다. (accessMode 나 볼륨 크기는 볼륨의 메타데이터일뿐 정말 그런 속성을 가지도록 강제하진 않는다.)
예컨데 5Gi 인 PV, 3Gi 인 PV 2개가 있을시 5Gi가 필요한 PVC 는 전자의 PV 랑 마운트된다. PVC 입장에선 조건이 중요하지 어떤 것과 연결하는지는 보진 않는다.
accessMode 의 종류
그 외에도 스토리지 클래스나 라벨 셀렉터를 이용해 볼륨 매칭을 더 세분화 할 수 있음.
storageClassName: my-ebs-volume
labels:
region: ap-northest-2a
PV 생성 후 kubectl get pv
명령어를 보면 STATUS 항목에 PV가 사용가능한지 연결되었는지 볼 수 있음.
available 상태가 되었을때 어떻게 처리할지를 정의가 가능한데 이를 ReclaimPolicy 라고 한다. 이를 따로 정의해야하는 이유는 애초에 볼륨의 역할이 데이터의 영구저장이라서다.
ReclaimPolicy 에는 3가지 방식이 있다. (아무런 설정을 하지 않았을경우 Retain 방식)
이 설정은 yaml 에서
spec : persistentVolumeReclaimPolicy : { 방식 이름}
으로 설정하며 get pv 실행시 RECLAIM POLICY 항목에 나오게된다.
다이나믹 프로비저닝은 PVC 가 요구하는 조건과 일치하는 PV 가 존재하지 않는다면 자동으로 PV 와 외부 스토리지를 함께 프로비저닝 하는 기능이다. 다이나믹 프로비저닝을 사용하면 EBS 와 같은 외부스토리지를 미리 생성할 필요가 없어진다.
특정 PV 를 선택하지 위해 스토리지 클래스를 사용했었는데 사실 스토리지 클래스는 다이나믹 프로비저닝에도 사용할 수 있는데, 스토리지 클래스의 정보를 참고해 외부 스토리지를 생성하기 때문이다.
9.3.1 퍼시스턴트 볼륨과 퍼시스턴트 볼륨 클레임을 사용하는 이유
9.3.2 퍼시스턴트 볼륨과 퍼시스턴트 볼륨 클레임 사용하기
9.3.3 퍼시스턴트 볼륨을 선택하기 위한 조건 명시
9.3.4 퍼시스턴트 볼륨의 라이프사이클과 Reclaim Policy
9.3.5 StorageClass와 Dynamic Provisioning