[root@master1 storage]# kubectl apply -f nfs-pv.yaml persistentvolume/test-pv created
접근모드
RWO ( ReadWriteOnce ) : 단일 노드만이 읽기/쓰기용으로 보륨을 마운트 할 수 있다.
ROX ( ReadOnlyMany ) : 다수 노드가 읽기용으로 볼륨을 마운트할 수 있다.
RWX ( ReadWriteMany ): 다수 노드가 읽기/쓰기용으로 볼륨을 마운트할 수 있다.
생성한 PV 확인
1)persistentVolumeReclaimPolicy: Retain 기본 정책으로 설정됨 확인 , 클레임이 해제된 후 PV은 유지돼야 한다. (삭제되면 안 됨)
3) 아직 PVC를 생성하지 않았으므로 PV는 Available로 표시된다.
4) PV는 특정 네임스페이스에 속하지 않는다. PV는 노드와 같은 클러스터 수준 리소스이다.
PVC(Persistent Volume Claim) 생성
PVC 생성하기
GKE, EKS 등을 사용하면 밴더(클라우드 공급자)의 default storage class가 자동으로 제공된다. 이를 고려하여 실행 파일을 만들어준다.
$cat nfs-pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-pvc ##PVC의 이름으로 나중에 pod의 볼륨을 요청할 때 사용한다 spec: storageClassName: "" accessModes: - ReadWriteMany #ReadWriteMany(RWX) : 여러 개의 노드가 마운트 가능 resources: requests: storage: 1Gi #1 GiB의 스토리지를 요청한다.
$ kubectl apply -f nfs-pvc.yaml persistentvolumeclaim/test-pvc created
$kubectl get pv
-status가 bound로 변경된 것을 확인 -claim이 test-pvc로 변경되었다.
$kubectl get pvc
-bound 된 pvc확인 가능 -volume으로 test-pv를 사용하고 있다.
PVC(Persistent Volume Claim)를 사용하는 pod 생성
pvc를 사용하는 pod를 여러 개 생성한 후 워커 노드에서 서로 데이터를 공유하는지 확인한다.
여러 개의 pod가 서로 pvc를 참조하여 같은 볼륨을 사용하고 있다.
$ cat nfs-pvc-pod.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: test 1 spec: replicas: 12 selector: matchLabels: app: test 1 template: metadata: name: test 1 labels: app: test 1 spec: containers: - image: hewon16/image1:1 #실습에 사용하는 실습용 컨테이너 이미지 실제로는 본인이 사용할 이미지 사용 name: test 1 volumeMounts: - name: testpath mountPath: /mnt #컨테이너의 마운트 디렉터리 volumes: - name : testpath persistentVolumeClaim: #pod 볼륨에서 이름으로 PVC을 참조한다. claimName: test-pvc
$kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE test-pv 1Gi RWX Retain Releaseddefault/test-pvc 29m
=> pvc를 삭제했지만 pv 상태는 release와 claim에는 test-pvc에 대한 정보가 남아있다. => 중요: PV는 PVC와 이미 한번 바인딩된 정보가 있기 때문에 정보가 남아 있는것이다. 클러스터 관리자가 PV를 완전히 비우지 않으면 새로운 클레임에 바인딩 할 수 없다!
그럼 PV를 재사용할 수 있는 방법은 없는 것일까?
우리는 이러한 경우를 대비해서 Reclaimpolicy = "Retain"으로 설정해놓았다!
1.Recycle 정책: 볼륨의 콘텐츠를 삭제하고 볼륨이 다시 클레임될 수 있도록 볼륨을 사용 가능하게 만든다. PV는 여러 다른 PVC와 다른 POD에서 재사용할 수 있다. Recycle 반환 정책은 더 이상 사용하지 않는다.
2.Delete 정책 :기반 스토리지를 삭제한다. Delete 반환 정책을 지원하는 볼륨 플러그인의 경우 AWS EBS, GCE PD, Azure Disk 또는 Cinder 볼륨 관련 스토리지 자산을 모두 삭제한다. 동적으로 프로비저닝된 볼륨은 스토리지클래스의 반환 정책을 상속하며 기본값은 Delete이다.
3.Retain(보존): 퍼시스턴트볼륨클레임이 삭제되면 퍼시스턴트볼륨은 여전히 존재하며 볼륨은 "릴리스”된다.
댓글