반응형
퍼시스턴트 볼륨 (Persistent Volume, PV) 이란?
쿠버네티스에서 저장소를 추상화하여 제공하는 리소스 입니다.
클러스터 관리자가 직접 구성을 하며 NFS, 클라우드 스토리지, 로컬 스토리지와 같은 다양한 저장소와 연결합니다.
퍼시스턴트 볼륨 클레임 (Persistent Volume Claim) 이란?
사용자가 필요로 하는 저장소를 요청할 때 사용하는 리소스 입니다.
필요한 용량과 접근 방식(ReadWriteOnece, ReadWriteMany 등)을 지정할 수 있습니다.
그림으로 더 알아보면,

- 관리자가 PV의 사이즈, 접근 방식, 스토리지 형태(NFS, Ceph, hostPath)등을 지정하여 생성을 해줍니다.
- 사용자가 PVC를 생성하면, 사용자가 정의한 PVC에 맞는 PV가 자동으로 바인딩 됩니다.
- 사용자가 POD를 생성할 때, spec.volumes 에 PVC를 정의해서 사용하면 됩니다.
- PV는 전역 리소스 이고, PVC는 네임스페이스 안에 생성되는 리소스 입니다.
위와 같은 방식으로 볼륨을 사용하면 스토리지 관리의 복잡성도 줄이고,
다양한 스토리지를 k8s 환경에서 유연하게 사용할 수 있습니다.
실습을 통해 좀 더 자세하게 알아보겠습니다.
퍼시스턴트 볼륨 (PV)
apiVersion: v1 kind: PersistentVolume metadata: name: mongodb-pv spec: capacity: # 1번 storage: 1Gi accessModes: # 2번 - ReadWriteOnce - ReadOnlyMany persistentVolumeReclaimPolicy: Retain # 3번 hostPath: # 4번 path: /tmp/mongodb
해당 yaml 파일의 내용을 보면
- 1번: PV 용량 지정
- 2번: PV 접근 방식 설정
- 3번: 해당 PV에 바운딩 된 PVC가 사라져도 PV는 유지되도록 설정
- 4번: 실제로 사용되는 볼륨 방식, 위 yaml 에서는 hostPath 방식으로 사용하도록 설정
위 yaml로 PV를 생성하면 다음과 같이 나옵니다.
# kubectl get pv

퍼시스턴트 볼륨 클레임 (PVC)
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mongodb-pvc spec: resources: requests: storage: 1Gi # 1번 accessModes: - ReadWriteOnce # 2번 storageClassName: "" # 3번
해당 yaml 파일의 내용을 보면
- 1번: 사용 요청 할 용량 지정
- 2번: PV에 접근할 방식 지정
- 3번: 스토리지 클래스 이름 지정.
다만 현재 처럼 storageClassName 값이 비어있으면 이미 정의된 PV 중 조건에 맞는 것을 사용하겠다는 의미 입니다.
위 yaml 파일의 내용대로 PVC를 생성하면 아래와 같은 결과가 나옵니다.
# kubectl get pvc

앞서 생성한 PV에 자동으로 Bound 된 것을 확인 할 수 있습니다.
이제 POD에 PVC 설정을 해보겠습니다.
POD
piVersion: 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 # 앞서 생성한 PVC의 이름을 넣어주면 됩니다.
위 yaml 파일로 POD를 생성하면 정상적으로 생성이 됩니다.

그리고 node4번 서버에 들어가서 PV에서 정의 해준 hostPath가 정상적으로 생성되었는지 확인해봅니다.

이번 실습에서는 hostPath 방식으로 사용을 해보았지만, NFS, Ceph 등
다양한 스토리지와 연결하여 사용할 수 있습니다.
이상 입니다.
반응형
'쿠버네티스 > 이론' 카테고리의 다른 글
쿠버네티스 Downward API 란? (2) | 2024.11.28 |
---|---|
쿠버네티스 ConfigMap, Secret 이란 ? (0) | 2024.11.26 |
쿠버네티스 Volume 이란? (0) | 2024.11.11 |
쿠버네티스 Ingress 란? (0) | 2024.11.04 |
쿠버네티스 Service 란? (0) | 2024.11.01 |