Skip to Content

Kubernetes의 영구 볼륨이란?

스테이트풀 애플리케이션을 위한 스토리지 관리는 컨테이너 오케스트레이션의 중요한 측면입니다. Kubernetes 지속 볼륨(PV)은 개별 포드의 수명 주기와 독립적으로 스토리지 리소스를 관리하는 메커니즘을 제공하여 이러한 요구를 해결하는 기본 기능입니다. 이 문서에서는 Kubernetes 영구 볼륨의 개념, 기능 및 Kubernetes 클러스터에서 효과적으로 사용하기 위한 모범 사례에 대해 알아보겠습니다.

Kubernetes 영구 볼륨이란?

Kubernetes 영구 볼륨(PV)은 Kubernetes 클러스터의 스토리지 리소스로, 기본 스토리지 기술을 추상화합니다. 포드의 수명주기와 연결되어 있고 포드가 종료되면 사라지는 임시 스토리지와 달리, PV는 영구 스토리지를 관리하고 애플리케이션에 할당하는 방법을 제공합니다. 이렇게 하면 데이터에 액세스하는 포드가 종료되거나 일정이 변경되더라도 데이터가 그대로 유지됩니다.

지속적인 볼륨 사용은 다음과 같은 이점을 제공합니다.

  • 스토리지 추상화: PV는 포드에서 물리적 스토리지(예: 로컬 디스크, SAN, 클라우드 스토리지)의 세부 사항을 숨깁니다. 사용자는 구체적인 구현 세부 정보를 알 필요 없이 스토리지를 요청할 수 있습니다.
  • 지속성: PV는 포드 재시작 또는 일정 변경 시에도 데이터 지속성을 보장합니다. 임시 로그를 저장하기 위해 임시 스토리지를 사용하는 웹 서버 포드를 상상해 보세요. 포드가 다시 시작되면 로그가 손실됩니다. 반면, 지속적인 스토리지는 데이터베이스 포드에 의해 유지되는 애플리케이션 데이터와 같은 데이터를 그대로 유지합니다.
  • 포드에서 스토리지 분리: 이러한 분리를 통해 스토리지 리소스에 대한 유연성과 제어력을 높일 수 있습니다. 기본 스토리지에 영향을 주지 않고 쉽게 확장 또는 축소할 수 있습니다.

Kubernetes 영구 볼륨의 주요 특징

Kubernetes 영구 볼륨은 다양한 스토리지 요구사항에 강력하고 적응할 수 있는 몇 가지 주요 기능을 제공합니다.

스토리지 클래스

스토리지 클래스는 클러스터에서 사용 가능한 스토리지의 다양한 계층 또는 카테고리를 정의하는 템플릿처럼 작동합니다. 성능(예: SSD 대 HDD), 용량, 내구성 및 비용과 같은 특성을 지정할 수 있습니다. 이를 통해 관리자는 애플리케이션의 특정 요구 사항에 맞는 스토리지를 프로비저닝할 수 있습니다.

액세스 모드

액세스 모드는 포드가 PV가 제공하는 스토리지와 상호 작용하는 방식을 정의합니다. 일반적인 모드는 다음과 같습니다.

  • ReadWriteOnce(RWO): 한 번에 하나의 포드만 읽기-쓰기 권한으로 볼륨을 마운트할 수 있습니다. 이를 통해 기본 데이터베이스 복제본과 같이 독점 쓰기 액세스가 필요한 애플리케이션의 데이터 무결성을 보장합니다.
  • ReadOnlyMany(ROX): 다중 포드는 읽기 전용 모드에서만 볼륨을 동시에 장착할 수 있습니다. 이는 구성 파일 또는 로그 저장소와 같이 애플리케이션이 수정 없이 공유 데이터에 액세스해야 하는 시나리오에 유용합니다.
  • ReadWriteMany(RWX): 여러 포드가 읽기-쓰기 권한으로 볼륨을 마운트할 수 있습니다. 여러 포드가 동시에 쓸 경우 데이터 불일치가 발생할 수 있으므로 이 액세스 모드는 신중하게 사용해야 합니다. 공유 캐시나 공동 편집 툴과 같은 특정 사용 사례에 이상적입니다.

회수 정책

회수 정책은 Kubernetes가 더 이상 포드에 구속되지 않은 PV를 처리하는 방법을 규정합니다. 주요 정책은 다음과 같습니다.

  • 유지: PV는 포드가 바인딩되지 않은 후에도 유지되므로 향후 사용 또는 마이그레이션을 위해 수동으로 관리할 수 있습니다.
  • 재활용: Kubernetes PV를 재활용합니다. 이는 일반적으로 기존 데이터를 삭제하고 향후 포드 할당을 위해 스토리지를 사용할 수 있도록 하는 것을 포함합니다.
  • 삭제: PV 오브젝트와 해당 기본 스토리지 리소스가 완전히 삭제됩니다. 데이터 복구가 불가능할 수 있으므로 신중하게 사용하십시오.

볼륨 플러그인

Kubernetes 볼륨 플러그인을 활용하여 플랫폼과 다양한 스토리지 공급업체 간의 격차를 해소합니다. 이러한 플러그인을 통해 Kubernetes 로컬 스토리지, NFS 또는 iSCSI와 같은 네트워크 연결 스토리지(NAS) 솔루션, AWS EBS 또는 GCE Persistent Disk와 같은 클라우드 제공업체별 스토리지 서비스를 포함한 다양한 스토리지 백엔드를 이해하고 상호 작용할 수 있습니다. 이 플러그인 아키텍처는 스토리지 솔루션을 선택하고 Kubernetes 클러스터와 통합할 수 있는 상당한 유연성을 제공합니다.

지속적인 볼륨 프로비저닝

Kubernetes 지속적인 볼륨(PV) 프로비저닝을 위한 정적 프로비저닝과 동적 프로비저닝의 두 가지 기본 방법을 제공합니다. 각 접근 방식은 다양한 활용 사례에 적합하며 고유한 이점을 제공합니다.

정적 프로비저닝

정적 프로비저닝에서 클러스터 관리자는 PV를 수동으로 생성하고 구성합니다. 이러한 접근 방식은 스토리지 구성에 대한 세분화된 제어 기능을 제공하며, 자주 변경되지 않는 잘 정의된 스토리지 요구 사항이 있는 시나리오에 적합합니다. PV를 정적으로 프로비저닝하려면:

1. 스토리지 세부 정보 정의: 스토리지 용량, 액세스 모드(ReadWriteOnce, ReadOnlyMany, ReadWriteMany), 회수 정책(유지, 재활용, 삭제) 및 볼륨 플러그인 세부 사항(예: NFS용 서버 주소)을 결정합니다.

2. YAML을 사용하여 PV 객체를 생성합니다. YAML 매니페스트 파일을 사용하여 PV 구성을 정의합니다. NFS 스토리지를 활용하는 예는 다음과 같습니다.

apiVersion: v1
 kind: PersistentVolume
 metadata:
   name: my-pv-nfs
 spec:
   capacity:
     storage: 10Gi
   accessModes:
     - ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   nfs:
     path: /path/to/nfs/share
     server: nfs-server.example.com

  • 이름: PV 의 고유한 이름입니다.
  • 스토리지: 원하는 스토리지 용량(예: 10기가바이트의 경우 10Gi).
  • 액세스모드: 애플리케이션의 요구 사항에 따라 적절한 액세스 모드를 선택합니다.
  • 영구 볼륨재청구정책: Kubernetes가 포드에서 벗어난 후 PV를 어떻게 처리해야 하는지 정의합니다.
  • nfs.경로: NFS 서버에서 NFS 공유 경로
  • nfs.서버 : NFS 서버의 IP 주소 또는 호스트 이름입니다.

3. YAML 매니페스트 적용: kubectl apply -f 명령을 사용하여 Kubernetes 클러스터에 PV 객체를 생성합니다.

동적 프로비저닝

동적 프로비저닝은 스토리지클래스를 활용하여 PV 생성을 자동화합니다. 관리자는 원하는 스토리지 특성을 지정하는 스토리지클래스를 정의하고, Kubernetes가 지속적 볼륨클레임(PVC)이 스토리지를 요청할 때 필요에 따라 PV 생성을 처리할 수 있도록 합니다. 동적 프로비저닝을 사용하려면:

1. 스토리지 클래스 정의: 프로비저닝 담당자, 스토리지 유형(예: SSD, HDD) 및 프로비저닝 담당자가 요구하는 추가 매개변수를 지정하는 StorageClass YAML 명부를 생성합니다. AWS EBS의 예는 다음과 같습니다.

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

  • 이름: 스토리지 클래스의 고유한 이름입니다.
  • 프로비저너: 스토리지 프로비저너 플러그인의 이름(예: AWS EBSkubernetes.io/aws-ebs).
  • parameters.type: 프로비저닝 담당자 내의 스토리지 유형(예: AWS EBS의 범용 SSD 볼륨 유형의 경우 gp2).

2. StorageClass 매니페스트 적용: kubectl apply -f를 사용하여 클러스터에 스토리지 클래스 오브젝트를 생성합니다.

포드에 지속적인 볼륨 결합

PV를 포드에 바인딩하면 애플리케이션이 영구 스토리지를 활용할 수 있습니다. 이러한 결합은 일반적으로 지속적 볼륨클레임(PVC)을 통해 이루어집니다.

    PVC는 포드가 제출한 스토리지 요청의 역할을 합니다. 포드의 스토리지 요구 사항을 지정합니다.

  • 액세스 모드: 포드가 스토리지와 상호 작용하는 방식을 정의합니다(예: ReadWriteOnce, ReadOnlyMany, ReadWriteMany).
  • 스토리지 용량: 포드에 필요한 스토리지 용량입니다.
  • StorageClassName(선택 사항): 동적 프로비저닝을 위해 스토리지 클래스를 참조합니다.

    PV를 포드에 결합하기 위한 두 가지 주요 방법이 있습니다.

  • 정적 바인딩: 정적 바인딩에서 관리자는 사전 프로비저닝된 PV를 명시적으로 참조하는 PVC를 수동으로 생성합니다. PVC와 PV는 PVC의 요청을 충족하기 PV 위해 PV에 액세스 모드 및 충분한 스토리지 용량 일치와 같은 호환 가능한 속성을 가져야 합니다.
  • 동적 바인딩: 동적 바인딩은 자동화된 PV 생성을 위해 스토리지 클래스를 활용합니다. 스토리지클래스를 참조하는 PVC가 있는 포드가 배포되면 Kubernetes PVC 요구사항을 충족하는 적절한 PV(스토리지클래스를 기반으로 기존 또는 새로 프로비저닝)를 검색합니다. 적절한 PV가 발견되면 Kubernetes PV와 PVC를 자동으로 결합합니다.

다음은 'pvc 예'라는 PVC를 활용하는 '포드 예'PVC 라는 포드의 예입니다.

apiVersion: v1
 kind: Pod
 metadata:
   name: pod-example
 spec:
   containers:
   - name: app
     image: nginx
     volumeMounts:
     - mountPath: "/usr/share/nginx/html"
       name: pvc-storage
   volumes:
   - name: pvc-storage
     persistentVolumeClaim:
       claimName: pvc-example

이 예에서 포드는 컨테이너 내의 경로 '/usr/share/nginx/html'에 'pvc-example'이라는 PVC를 장착합니다. 이를 통해 포드는 기본 PV에 저장된 영구 데이터에 액세스하고 이를 관리할 수 있습니다.

지속적인 볼륨 관리

Kubernetes스 클러스터에서 효율적이고 확장 가능한 스토리지 활용을 유지하려면 지속적인 볼륨(PV)을 효과적으로 관리해야 합니다. PV 관리의 몇 가지 주요 측면은 다음과 같습니다.

1. 영구 볼륨 크기 조정

Kubernetes v1.11은 PV의 크기를 조정할 수 있는 기능을 도입했습니다. 이를 통해 PV 할당된 스토리지 용량을 동적으로 조정하여 애플리케이션의 증가하는 스토리지 요구 사항을 충족할 수 있습니다. 

PV 의 크기를 조정하려면 PVC 의 스토리지 요청을 업데이트하십시오. PV를 참조하는 PVC를 편집하고 PVC PVC 의 YAML 사양의 resources.requests 섹션에서 스토리지 값을 수정합니다. 예를 들어, 'pvc 예'라는 PVC의 크기를 20Gi로 늘리려면 YAML 명부를 업데이트합니다.

apiVersion: v1
 kind: PersistentVolumeClaim
 metadata:
   name: pvc-example
 spec:
   resources:
     requests:
       storage: 20Gi

PVC 의 스토리지 요청을 업데이트하면 Kubernetes PV 에 대해 프로비저닝된 기본 스토리지의 크기를 조정하려고 합니다. PV의 크기를 조정하는 것은 일반적으로 단방향 작업(확장 스토리지)입니다. 잠재적인 데이터 손실 우려로 인해 PV의 크기를 축소하는 것은 지원되지 않습니다.

2. 영구 볼륨 삭제

PV를 삭제하려면 현재 PVC에 구속되지 않도록 해야 합니다. 데이터 손실을 방지하기 위해 PVC에서 사용 중인 PV는 삭제할 수 없습니다. PV를 삭제하는 방법은 다음과 같습니다.

kubectl delete pv pv-example

pv 예시를 삭제할 PV의 실제 이름으로 바꿉니다.

3. 지속적인 볼륨 업데이트

코어 스토리지 용량은 PV 오브젝트 내에서 직접 수정할 수 없지만, 레이블 또는 주석과 같은 PV의 특정 메타데이터 필드를 업데이트할 수 있습니다. 이러한 라벨과 주석은 클러스터 내에서 PV를 더 잘 정리, 식별 및 관리하는 데 사용할 수 있습니다.

Kubernetes 영구 볼륨 사용 모범 사례

다음은 Kubernetes의 지속적인 볼륨을 최대한 활용하기 위해 따라야 하는 몇 가지 모범 사례입니다.

  • 적절한 스토리지 클래스 선택: 애플리케이션의 성능 및 내구성 요구 사항에 맞는 스토리지 등급을 선택하세요. 예를 들어, SSD 기반 스토리지를 고성능 애플리케이션으로 사용하고 HDD 기반 스토리지를 아카이브 목적으로 사용합니다.
  • 액세스 모드를 올바르게 구성: 애플리케이션이 스토리지에 액세스하는 방법에 따라 PV에 적합한 액세스 모드를 선택합니다. 예를 들어, 공유 파일 시스템에는 RWX를, 단일 인스턴스 데이터베이스에는 RWO를 사용할 수 있습니다.
  • 회수 정책을 현명하게 구현합니다. 데이터 수명 주기 관리 전략에 맞는 회수 정책을 수립하세요. 삭제 전에 수동 개입이 필요한 중요 데이터에 대해서는 유지 정책을 사용하십시오.
  • 모니터링 및 로깅: 모니터링 및 로깅 도구를 활용하여 PV 사용량, 성능 및 상태를 모니터링합니다. Prometheus 및 Grafana와 같은 툴은 스토리지 인프라에 대한 귀중한 인사이트를 제공합니다.
  • 고급 데이터 관리를 위해 Portworx® 사용: Kubernetes의 고급 데이터 관리 및 영구 스토리지 솔루션의 경우, 퓨어스토리지의 Portworx 사용을 고려해 보세요. Portworx 컨테이너화된 애플리케이션을 위해 특별히 설계된 고가용성, 재해 복구 및 백업 등의 기능을 제공합니다.

결론

Kubernetes 지속 볼륨(PV)은 스테이트풀 애플리케이션에서 스토리지를 관리하기 위한 기본 메커니즘을 제공합니다. PV를 활용하면 Kubernetes 클러스터 내에서 데이터 지속성, 고가용성 및 효율적인 스토리지 활용을 보장할 수 있습니다. 퓨어스토리지의 Portworx 같은 솔루션은 Kubernetes의 영구 볼륨의 이점을 활용하는 직관적인 방법을 제공합니다. 고가용성, 재해복구 및 효율성 향상을 위해 인공지능을 사용하는 백업 등의 기능을 갖춘 Portworx 컨테이너화된 애플리케이션을 위한 이상적인 Kubernetes 영구 스토리지 솔루션입니다.

다음을 추천드립니다.

10/2025
Virtual Machine Provisioning at Enterprise Scale
Sizing and scaling Red Hat OpenShift Virtualization with Portworx.
백서
22 pages

주요 유용한 자료 및 이벤트를 확인하세요

THOUGHT LEADERSHIP
혁신을 향한 레이스

스토리지 혁신의 최전선에 있는 업계 리더들의 최신 인사이트 및 관점을 확인하세요.

더 알아보기
동영상
동영상 시청: 엔터프라이즈 데이터 클라우드의 가치

찰스 쟌칼로(Charles Giancarlo) CEO가 전하는 스토리지가 아닌 데이터 관리가 미래인 이유 통합 접근 방식이 기업 IT 운영을 어떻게 혁신하는지 알아보세요

지금 시청하기
유용한 자료
레거시 스토리지는 미래를 지원할 수 없습니다.

현대적 워크로드에는 AI 지원 속도, 보안, 확장성이 필수입니다. 귀사의 IT 스택, 준비됐나요?

지금 확인하기
퓨어360(PURE260) 데모
퓨어스토리지를 직접 탐색하고, 배우고, 경험해보세요.

퓨어스토리지의 역량을 확인할 수 있는 온디맨드 비디오와 데모를 시청하세요.

데모영상 시청하기
지원하지 않는 브라우저입니다.

오래된 브라우저는 보안상 위험을 초래할 수 있습니다. 최상의 경험을 위해서는 다음과 같은 최신 브라우저로 업데이트하세요.