[번역] 쿠버네티스의 PVC

황서희·2024년 2월 23일
0

해당 글 을 번역한 포스트입니다.

데이터 지속성(어플리케이션 데이터가 영구적으로 저장되어 프로세스나 서버의 재시작 후에도 유지되는 성질) 은 모든 애플리케이션의 핵심 구성 요소 중 하나이며, Kubernetes로 조정되는 컨테이너화된 어플리케이션의 경우, Persistent Volumes (PV) 와 Persistent Volume Claims (PVC) 를 이해하는 것은 필수적입니다. 이 글은 PVCs가 무엇인지 쉽게 이해할 수 있도록 하고, 어떻게 PVs와 다른지, 어째서 그들이 Kubernetes 환경에서 필수적인지에 대해 초점을 맞추고 있습니다. 당신이 DevOps Engineer인지, Kubernetes 초보자인지, 아니면 숙련된 개발자인지 여부에 관계없이 PVC에 대해 알아야 할 모든 정보를 제공하는 종합 가이드입니다.

Kubernetes에서 Persistent Volume Claims (PVC) 란 무엇일까요?

Kubernetes에서, Persistent Volume Claims (이하 PVC) 는 Persistent Volume (이하 PV) 이 처리할 수 있는 스토리지에 대한 사용자의 요청입니다. 특정한 스토리지 리소스에 액세스 하기 위한 “티켓” 이라고 생각하시면 됩니다. 사용자가 PVC를 생성할 때, Kubernetes는 이를 바인딩할 적절한 PV를 찾아서, PVC에 지정된 스토리지 요구사항이 충족되는지 확인합니다. 일치하는 PV를 찾는다면, PVC는 해당 PV에 바인딩되어, 애플리케이션이 스토리지에 액세스 할 수 있게 됩니다.

Persistent Volume (PV) vs Persistent Volume Claims (PVC)

Persistent Volume (PV)

  • 시스템 관리자에 의해 프로비저닝됨: 일반적으로 시스템 관리자가 프로비저닝합니다.
  • 클러스터 리소스: 클러스터 레벨 리소스이므로, 클러스터의 어느 노드에서나 액세스할 수 있습니다.
  • Storage Backend: NFS, iSCSI, local disk, 그 외가 될 수 있습니다.
  • 네임스페이스가 지정되지 않음: PVs 는 특정한 네임스페이스에 묶여 있지 않습니다.

Persistent Volume Claims (PVC)

  • 유저에 의해 요청됨: 유저에 의해 생성되거나, 경우에 따라, 쿠버네티스가 자동으로 생성합니다.
  • 네임스페이스 범위: PVCs 는 네임스페이스에 한정되므로, 같은 네임스페이스에 있는 파드에서만 액세스할 수 있습니다.
  • 요구 사항 정의: 스토리지 크기, 액세스 모드 등을 지정합니다.
  • 라이프사이클: 일반적으로 이 PVC를 사용하는 파드와 동일한 생명 주기를 갖습니다.

간단하게 비유하면: PV가 주차장이라면, PVC는 그 주차장에 한 자리를 차지할 수 있는 주차권입니다.

코드 예시: PV와 PVC 생성하기

PV를 생성한 다음 PVC를 생성하여 해당 볼륨에서 스토리지를 요청하는 예를 살펴 보겠습니다.

PV 만들기

다음은 로컬 스토리지를 사용하여 간단한 PV를 정의하는 YAML 파일입니다:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /mnt/data
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - my-node

PV를 만들기 위해, 해당 YAML 파일을 실행합니다:

kubectl apply -f my-pv.yaml

PVC 만들기

PVC를 정의하는 YAML 파일입니다:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: local-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

PVC를 만들기 위해, 해당 YAML 파일을 실행합니다:

kubectl apply -f my-pvc.yaml

PVC를 생성한 후, 쿠버네티스는 요구 사항을 충족하는 사용 가능한 PV에 자동으로 바인딩합니다. 스테이터스를 다음 명령어로 확인할 수 있습니다:

kubectl get pvc my-pvc

그리고 당신은 우리가 이미 만들어 놓은 PV에 PVC가 바인딩되었다는 것을 확인할 수 있을 것입니다.

왜 PVC가 중요한가요?

  • 추상화: PVC는 기본 스토리지 인프라를 추상화하여 개발자들이 스토리지 백엔드의 세부 사항을 알 필요 없이 스토리지를 요청할 수 있는 방법을 제공합니다.
  • 이식성: PVC는 네임스페이스 범위를 가지고 스토리지 요구 사항을 정의하기 때문에, 다른 쿠버네티스 클러스터 간에 애플리케이션을 이동하기가 더 쉬워집니다.
  • 확장성: PVC는 필요에 따라 쿠버네티스가 새로운 볼륨을 자동으로 프로비저닝할 수 있게 하여, 애플리케이션을 확장하기가 더 쉬워집니다.
  • 데이터 지속성: PVC를 사용하면 파드가 종료되어도 데이터가 손실되지 않으며, 장기 스토리지 솔루션을 제공합니다.

쿠버네티스를 사용할 때, 특히 데이터 지속성과 스토리지 효율성을 보장하기 위해서는 PV 와 PVC 를 이해하는 것이 중요합니다. PV는 실제 스토리지 인프라를 제공하는 반면, PVC는 사용자 애플리케이션과 이러한 스토리지 리소스 간의 다리 역할을 하여, 더욱 유연하고 효율적이며 확장 가능한 스토리지 솔루션을 가능하게 합니다.

profile
다 아는 건 아니어도 바라는 대로

0개의 댓글