콤퓨우터/필기: KodeKloud CKA 강의

189-191. Persistent Volumes, Persistent Volume Claims and Using PVCs in Pods

파란화면 2024. 5. 17. 00:44
반응형

Persistent Volumes (PV)

Persistent Volume은 Storage Volume들의 클러스터 단위 pool이다. 클러스터의 사용자는 이 풀에서 스토리지를 선택하여 사용할 수 있다.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-vol1
spec:
  accessModes:
  - ReadWriteOnce # ReadOnlyMany | ReadWriteOnce | ReadWriteMany
  capacity:
    storage: 1Gi
  hostPath: # 이 옵션을 Production에서 실제로 사용해서는 안됨
    path: /tmp/data
  awsElasticBlockStore: # 혹은 외부 Storage Provider 사용 시
    volumeID: 
    fsType: ext4

주의: spec.persistentVolumeReclaimPolicy라는 옵션을 외워둘것 - 쿠버 도큐멘테이션에서도 잘 안나온다

Persistent Volume Claim (PVC)

Persistent Volume Claim(PVC)는 PV를 사용하기 위한 object이다.

  • 모든 PVC는 하나의 Persistent Volume에 매핑된다.
  • 매핑 과정에서 쿠버는 PVC의 요청에 맞는 스토리지를 찾는다.
    • 용량, Access Mode, Volume Mode, 스토리지 등급 등등...
      • PVC의 요청을 만족하는 여러 개의 PV가 존재하는 경우, PVC에 label옵션을 넣어서 수동 선택하는 것도 가능하다.
    • 만약 PVC의 조건에 정확히 맞는 PV가 없다면, PVC에서 요청한 용량보다 큰 PV가 매핑될 수도 있다.
    • 사용 가능한 PV가 없다면, PVC는 쓸 수 있는 PV가 나올 때까지 pending 상태로 대기하게 된다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata;
  name: myclaim
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi

PVC의 생성은 kubectl create -f, 삭제는 kubectl delete persistentvolumeclaim 하면 된다.

PVC가 삭제되면

PVC가 삭제되면, 기본값 perrsistentVolumeReclaimPolicy는 Retain이다.

  • PV가 그대로 남아 있고, 다른 PVC가 들어와도 해당 PV를 할당하지 않는다!

perrsistentVolumeReclaimPolicy를,

  • Delete (볼륨을 자동 삭제)나
  • Recycle (데이터 볼륨의 데이터를 scrub한 뒤 타 PVC에 제공)으로 설정할 수 있다.

Pod에서 PVC 사용하기

Pod이나 ReplicaSets, Deployments의 definition에서는, spec.volumes.persistentVolumeClaim을 지정하여, PVC를(그리고 이것에 따라오는 PV를) 사용할 수 있다.

spec:
  containers:
    - image: nginx
      name: nginx
      volumeMounts:
      - mountPath: "/var/www/html"
        name: mypd
  volumes:
  - name: mypd
    persistentVolumeClaim:
      claimName: myClaim 

We discussed how to configure an application to use a volume in the "Volumes" lecture using volumeMounts. This along with the practice test should be sufficient for the exam.

Additional topics such as StatefulSets are out of scope for the exam. However, if you wish to learn them, they are covered in the Certified Kubernetes Application Developer (CKAD) course.

Storage Class

지금까지의 방식에서는 -

  • 예를 들어, GCP의 PersistentDisk CSI를 이용해 PV를 생성하려면, 일일이 GCP에서 디스크를 생성한 뒤에, PV Definition을 만들어주어야 한다.
  • 이러한 방식을 Static Provisioning Volume이라고 한다.

이 과정을 수동으로 하지 않을 수 있을까? - 가능하다!

Dynamic Provisioning of Volumes

Storage Class를 이용하면, 알아서 스토리지를 프로비저닝하고 PV를 만들고 PVC에 붙여주는 가제트만능뭐시기인 Provisioner를 정의할 수 있다.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: google-storage
provisioner: kubernets.io/gce-pd 

이제 PV를 수동으로 만들 필요가 없다.

  • PVC를 만들 때에는, spec.storageClassName을 지정해준다.
    spec:
    accessModes:
    - ReadWriteOnce
    storageClassName: google-storage
    resources:
      ...

이제 해당 PVC가 요청되면, GCP 프로비저너가 알아서 구글클라우드에 디스크를 만들고, 해당 디스크를 이용해 PV를 생성해서 Pod에 갖다 준다.

스토리지 제공업체에 따라 Provisoner에 다양한 파라미터를 받아 설정을 하기도 한다. 예를 들어 underlying 스토리지를 SSD로 할 것인지 HDD로 할 것인지를 설정한다든가...

  • 이렇게 할당할 볼륨의 스토리지 "클래스"를 나눌 수 있기 때문에 이것을 "Storage Class"라고 부르는 것이다.
  • 상세 옵션은 해당 제공업체의 도큐멘테이션을 보십시요
반응형