본문 바로가기

Kubenetes/Volumes

볼륨: PersistentVolume과 PersistentVolumeClaim

ㅁ 기본 스토리지 기술에서 포드 분리

 

[PersistentVolume] 과 [PersistentVolumeClaim]

 

클러스터 관리자가 볼륨을 프로비저닝하고 PersistentVolumeClaim을 통해 Pod가 사용

 

[PersistentVolume 생성]

 

mongodb-pv-gcepd.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
    name: mongodb-pv
spec:
    capacity:                  #PersistentVolume 크기 정의
      storage: 1Gi
    accessModes:          #단일 클라이언트가 읽기 및 쓰기 용으로 마운트하거나 여러 클라이언트가 읽기 전용으로 마운트할 수 있다.
    - ReadWriteOnce
    - ReadOnlyMany
    persistentVolumeReclaimPolicy: Retail       # 클레임이 해제된 후에는 PersistentVolume을 삭제하거나 삭제된 상태로 유지해야 함
    gcePErsistentDisk:
      pdName: mongodb
      fsType: ext4

 

 

PersistentVolume을 생성할 때 관리자는 쿠버네티스에

 

 - 용량이 얼마나 되는지,

 - 단일 노드 또는 여러 노드에서 동시에 읽거나 쓸수 있는지 여부

 - PersistentVolume이 릴리스되면 어떻게 할지 알려줘야 함

 - 이 PersistentVolume이 지원되는 실제 스토리지의 유형, 위치, 그 밖의 속성을 지정해야 함

 

를 알려야 함.

 

PersistentVolume과 클러스터 노드는 Pod, PersistentVolumeClaim과 달리 특정 Namespace에 속하지 않는다.

 

ㅁ PersistentVolumeClaim을 생성해 PersistentVolume 할당

 

[PersistentVolumeClaim 생성]

 

PersistentVolumeClaim: mongodb-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
     name: mongodb-pvc.        # 클레임의 이름-나중에 클레임을 Pod의 볼륨으로 사용할 때 필요
spec:
    resources:
        requests:
           storage: 1Gi                  # 스토리지의 1Gib 요청
    accessModes:                     # 스토리지가 단일 클라이언트를 지원하도록 하려는 경우(읽기 및 쓰기 모두 수행)
    - ReadWriteOnce
storageClassName: ""

 

[PersistentVolumeClaim 나열하기]

 

PVC(PersistentVolumeClaim)  상태를 확인하려면

$ kubectl get pvc

 

AccessModes에 사용되는 약어

- RWO-ReadWriteOnce: 단일노드만 읽기/쓰기를 위해 볼륨을 마운트 할 수 있다.

- ROX-ReadOnlyMany: 여러 노드가 읽기 위해 볼륨을 마운트 할 수 있다.

- RWX-ReadWriteMany: 여러 노드가 읽기 및 쓰기를 위해 볼륨을 마운트 할 수 있다.

 

[PersistenVolume 나열하기]

 

$ kubectl get pv

 

ㅁ Pod에서 PersistentVolumeClaim 사용

 

[PersistentVolumeClaim 볼륨을 사용하는 Pod: mongodb-pod-pvc.yaml]

apiVersion: v1
kind: Pod
metadata:
    name: mongodb
spec:
    containers:
    - image: mongo
      name: mongodb
      volumeMounts:
      - name: mongodb-data
         mountPath: /data/db
     ports:
     - containerPort: 27017
       protocol: TCP
volumes:
- name: mongodb-data
   persistentVolumeClaim:
        claimName: mongodb-pvc

 

 

[PersistentVolume과 PersistentVolumeClaim] 사용의 장점

직접 또는 PVC 및 PV를 통해 GCE 영구 디스크 사용하기

 

[PV, PVC 수명 주기]

PersistentVoluem, PersistentVolumeClaim과 이를 사용하는 Pod의 수명

 

ㅁ PersistentVolume의 동적 프로비저닝

 

쿠버네티스 클러스터 관리자는 PersistentVolume 공급자를 배포하고 사용자가 원하는 PersistentVolume 유형을 선택할 수 있도록 하나 이상의 StorageClassObject를 정의 할 수 있다.

 

[StorageClass 리소스를 통해 사용 가능한 스토리지 유형 정의]

 

storageclass-fast-gcepd.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
    name: fast
provisioner: kubernetes.io/gce-pd  # PersistentVolume 프로비저닝에 사용할 볼륨 플러그인
parameters:                                     # 제공자에게 전달된 매개 변수
    type: pd-ssd
    zone: europe-west1-b

 

 

StorageClass 리소스는 PersistentVolumeClaim이 이 StorageClass를 요청할 때 PersistentVolume을 프로비저닝하는데 사용해야 함.

 

[PersistentVolumeClaim의 스토리지 클래스 요청]

 

mongodb-pvc-dp.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: mongodb-pvc
spec:
    storageClassName: fast
    resources:
        requests:
           storage: 100Mi
    accessModes:
        - ReadWriteOnce

 

 

[동적 PersistentVolume 프로비저닝의 전체적인 그림 이해]

 

'Kubenetes > Volumes' 카테고리의 다른 글

볼륨: 컨테이너에 디스크 스토리지 연결  (0) 2021.02.06