DevOps/K8S

[k8s] Volume

kyoulho 2024. 9. 2. 20:55

쿠버네티스(Kubernetes)는 애플리케이션이 실행되는 동안 데이터를 저장하고 관리할 수 있는 다양한 스토리지 옵션을 제공한다. Persistent Volume (PV)와 Persistent Volume Claim (PVC)은 상태 저장 애플리케이션을 위한 스토리지를 제공하는 개념으로, 이 두 가지를 통해 쿠버네티스는 다양한 스토리지 백엔드와 독립적으로 상태 저장 애플리케이션을 지원할 수 있다.

Persistent Volume (PV)

Persistent Volume(PV)은 쿠버네티스 클러스터 내에서 스토리지 리소스를 추상화한 객체이다. PV는 클러스터 관리자가 직접 프로비저닝 하거나 쿠버네티스가 동적으로 생성할 수 있으며, 클러스터의 다른 리소스와 독립적으로 존재한다. PV는 특정 사용자를 위한 것이 아니며, 사용자는 PVC를 통해 PV에 접근할 수 있다.

  • 스토리지 유형: PV는 NFS, iSCSI, 클라우드 스토리지 등 다양한 스토리지 유형을 지원하며, 이러한 유형에 따라 PV가 구성될 수 있다.
  • 스토리지 클래스: PV는 특정 스토리지 클래스를 통해 정의될 수 있으며, 이는 PVC가 해당 PV를 요청할 때 사용된다.
  • 접근 모드: PV는 ReadWriteOnce, ReadOnlyMany, ReadWriteMany와 같은 접근 모드를 설정할 수 있으며, 이는 PV가 어떤 방식으로 접근될 수 있는지를 결정한다.
  • 용량: PV는 특정한 스토리지 용량을 가지며, 이를 통해 PVC가 요청하는 크기와 일치하는지 여부를 판단한다.

 

Persistent Volume Claim (PVC)

Persistent Volume Claim(PVC)은 사용자가 스토리지를 요청할 때 사용하는 객체이다. 사용자는 필요한 스토리지의 크기와 접근 모드 등을 정의하여 PVC를 생성하며, 쿠버네티스는 이 PVC에 맞는 PV를 찾아 바인딩한다. PVC를 통해 사용자는 PV에 접근할 수 있으며, 이를 통해 데이터를 읽고 쓸 수 있다.

  • 스토리지 클래스 요청: PVC는 특정 스토리지 클래스를 요청할 수 있으며, 해당 클래스의 PV에 바인딩된다.
  • 접근 모드: PVC는 사용자가 요청하는 스토리지 접근 모드를 정의하며, 이는 PV의 접근 모드와 일치해야 한다.
  • 스토리지 크기: PVC는 필요한 스토리지 용량을 정의하며, 이 요청에 따라 적절한 PV가 바인딩된다.

 

PVC와 PV 설정 방법

1. Persistent Volume (PV) 설정

PV를 정의할 때는 스토리지의 크기, 접근 모드, 스토리지 클래스 등을 지정한다.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-example
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
  • storageClassName: PV가 속하는 스토리지 클래스의 이름으로, PVC가 요청할 때 사용된다.
  • capacity: PV의 스토리지 용량을 지정한다.
  • accessModes: PV에 접근할 수 있는 모드를 지정하며, ReadWriteOnce는 단일 노드에서 읽기 및 쓰기가 가능함을 의미한다.
  • hostPath: 로컬 노드 파일 시스템의 경로를 지정한다 (예시로 /mnt/data).

2. Persistent Volume Claim (PVC) 설정

PVC는 사용자가 필요로 하는 스토리지의 크기와 접근 모드를 정의한다.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-example
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  • storageClassName: PVC가 요청할 스토리지 클래스의 이름으로, 이 필드가 PV의 storageClassName과 일치해야 한다.
  • accessModes: 사용자가 요청하는 스토리지 접근 모드를 정의한다.
  • resources: 요청하는 스토리지의 크기를 정의한다.

동작 원리

  1. 사용자가 PVC를 생성하면, 이 PVC는 특정한 스토리지 크기와 접근 모드를 요구한다.
  2. 쿠버네티스는 PVC의 요구사항에 맞는 PV를 찾아 바인딩한다.
  3. PVC와 PV가 바인딩되면, 애플리케이션은 PVC를 참조하여 PV에 접근할 수 있게 된다.

 

Volume Claim의 자동 프로비저닝

쿠버네티스는 동적 프로비저닝(dynamic provisioning)을 통해 사용자가 PVC를 요청할 때 자동으로 PV를 생성할 수 있다. 이를 위해서는 스토리지 클래스(StorageClass)가 필요하다. 사용자는 특정 스토리지 클래스를 PVC에 지정하여, 해당 클래스에 정의된 방식으로 PV가 동적으로 생성되도록 할 수 있다.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2

위와 같은 스토리지 클래스가 설정되어 있으면, 사용자는 standard 스토리지 클래스를 요청할 수 있으며, PVC가 생성될 때 해당 클래스에 따라 PV가 동적으로 생성된다.

 

 

'DevOps > K8S' 카테고리의 다른 글

[k8s] DNS  (1) 2024.09.02
[k8s] 클러스터의 주요 구성 요소와 문제 발생 시 영향  (2) 2024.08.29
[k8s] Deployment  (0) 2024.08.29
[k8s] Pod  (0) 2024.08.29
[k8s] NodePort  (0) 2024.08.29