본문 바로가기
MLOps/Doker & Kubernetes

Udemy CKA 강의 정리 187: Persistent Volume Claims

by 공부하는 무니 2023. 1. 22.
반응형

해당 내용은 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의를 공부한 내용입니다. 내용을 그대로 번역하기보다는, 제가 이해하기 쉬운 대로 수정한 부분들이 있습니다.

⚠️ 영어 독해가 많이 부족합니다. 틀린 내용이 있으면 알려주시면 감사하겠습니다.


이전 강의에서 persistent volume을 만들었습니다. 이제 노드에서 스토리지를 사용할 수 있도록 persistent volume claims을 생성하려고 합니다. persistent volume 및 persistent volume claims은 Kubernetes 네임스페이스에서 두 개의 개별 오브젝트입니다. 관리자는 persistent volume 세트를 생성하고 사용자는 스토리지를 사용하기 위해 persistent volume claims을 생성합니다. persistent volume claims이 생성되면 Kubernetes는 request와 volume에 설정된 속성을 기반으로 persistent volume을 claims에 바인딩합니다.

모든 persistent volume claims은 단일 persistent volume에 바인딩됩니다. 바인딩 프로세스 중에 Kubernetes는 claims에서 요청한 대로 용량이 충분한 persistent volume을 찾으려고 합니다. 여기에는 액세스 모드, volume 모드, 스토리지 클래스 등과 같은 기타 모든 요청 속성도 반영이 됩니다. 그러나 단일 claims에 대해 가능한 볼륨이 여러 개 있고 특히 특정 volume을 사용하려는 경우엔 레이블과 selector를 사용하여 올바른 volume에 바인딩할 수 있습니다. 마지막으로, 다른 모든 기준이 일치하고 더 나은 옵션이 없는 경우 더 작은 claims이 더 큰 volume에 바인딩될 수 있습니다.

claims과 volume 사이에는 일대일 관계가 있으므로 다른 claims은 volume의 나머지 용량을 사용할 수 없습니다. 사용 가능한 volume이 없는 경우 persistent volume claims은 클러스터에서 새 volume을 사용할 수 있을 때까지 보류 상태로 유지됩니다. 최신 volume을 사용할 수 있게 되면 claims은 자동으로 새로 사용 가능한 volume에 바인딩됩니다.

이제 persistent volume claims을 생성하겠습니다. 빈 템플릿으로 시작합니다.

pvc-definition.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  accessModes: [ "ReadWriteOnce" ]
  resources:
   requests:
     storage: 500Mi

API 버전을 v1로 설정하고 kind를 PersistentVolumeClaims으로 설정합니다.

metadata>name에는 "myclaim"이라고 이름을 지정합니다.

아래 spec을 작성하겠습니다. accessModes를 "ReadWriteOnce"로 설정합니다. 그리고 500MB의 저장소를 요청하도록 리소스를 설정합니다.

kubectl create 커맨드를 사용하여 claims을 만듭니다. 생성된 claims을 보려면 kubectl get persistent volume claims 커맨드를 실행합니다. claim이 pending상태인 것을 확인할 수 있습니다. claims이 생성되면 Kubernetes는 이전에 생성된 volume을 확인합니다.

pv-definition.yaml

kind: PersistentVolume
apiVersion: v1
metadata:
    name: pv-vol1
spec:
    accessModes: [ "ReadWriteOnce" ]
    capacity:
     storage: 1Gi
    hostPath:
     path: /tmp/data

액세스 모드가 일치하고, 요청된 용량은 500MB이지만 volume은 1GB의 스토리지로 구성됩니다. 사용할 수 있는 다른 volume이 없으므로 persistent volume claims은 persistent volume에 바인딩됩니다. 

$ kubectl create -f pvc-definition.yaml
persistentvolumeclaim/myclaim created

$ kubectl get pvc
NAME      STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
myclaim   Pending                                                     35s

$ kubectl get pvc
NAME      STATUS   VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
myclaim   Bound    pv-vol1   1Gi        RWO                           1min

kubectl get persistent volume claims 커맨드를 실행하면 claims이 우리가 생성한 persistent volume에 바인딩된 것을 다시 볼 수 있습니다.  pvc를 삭제하려면 kubectl delete pvc 커맨드를 실행하십시오. 하지만 claims이 삭제되면 default persistent volume은 어떻게 되나요? 이 때 volume에 일어날 일을 선택할 수 있습니다. default로는 볼륨을 유지하도록 설정되어 있습니다. persistentVolumeReclaimPolicy: Retain은 관리자가 수동으로 삭제할 때까지 남아 있음을 의미합니다. 다른 claims에서 재사용할 수 없습니다. 또는 persistentVolumeReclaimPolicy: Delete 로 설정하면 claims이 삭제되는 즉시 volume도 삭제됩니다. 따라서 최종 저장 장치의 저장 공간을 확보합니다. 세 번째 옵션은 재활용하는 것입니다. persistentVolumeReclaimPolicy: Recycle로 설정하면, 데이터 volume의 데이터는 다른 claims에서 사용하기 전에 삭제됩니다.(?)

 

반응형

댓글