Persistent Disk가 있는 영구 볼륨

이 페이지는 Kubernetes의 PersistentVolume 및 PersistentVolumeClaim과 Google Kubernetes Engine에서의 사용법을 간단히 소개합니다. 이 페이지에서는 Compute Engine 영구 디스크가 지원하는 저장소를 집중적으로 다룹니다.

개요

PersistentVolume 리소스는 클러스터의 내구성 있는 스토리지 관리에 사용됩니다. GKE에서 PersistentVolume은 일반적으로 Compute Engine 영구 디스크가 지원합니다. PersistentVolume은 NFS와 같은 다른 스토리지 유형에도 사용할 수 있습니다. PersistentVolume의 전체적인 개요는 Kubernetes 문서를 참조하세요.

볼륨과는 달리 PersistentVolume 수명 주기는 Kubernetes가 관리합니다. PersistentVolume은 동적으로 프로비저닝할 수 있으므로 사용자는 지원 저장소를 수동으로 만들고 삭제할 필요가 없습니다.

PersistentVolume은 포드와 독립적으로 존재하는 클러스터 리소스입니다. 다시 말해 PersistentVolume이 표시하는 디스크와 데이터는 클러스터가 변경되고 포드가 삭제되고 다시 만들어져도 계속 존재합니다. PersistentVolume 리소스는 PersistentVolumeClaim을 통해 동적으로 프로비저닝하거나 클러스터 관리자가 명시적으로 만들 수 있습니다.

PersistentVolumeClaim은 PersistentVolume 리소스에 대한 요청이자 클레임입니다. PersistentVolumeClaim 객체는 PersistentVolume의 특정 크기, 액세스 모드, StorageClass를 요청합니다. 요청을 충족하는 PersistentVolume이 존재하거나 프로비저닝 가능한 경우, PersistentVolumeClaim이 해당 PersistentVolume에 결합됩니다.

포드는 신청을 볼륨으로 사용합니다. 클러스터는 클레임을 검사하여 결합된 볼륨을 찾고, Pod에서 사용할 해당 볼륨을 마운트합니다.

이동성은 PersistentVolume과 PersistentVolumeClaim을 사용할 때의 또 다른 장점입니다. PersistentVolume은 실제 지원 저장소 인터페이스이므로 다양한 클러스터와 환경에서 동일한 포드 사양을 쉽게 사용할 수 있습니다.

StorageClass

gcePersistentDisk와 같은 볼륨 구현은 StorageClass 리소스를 통해 구성됩니다. GKE는 표준 영구 디스크 유형을 사용하는 기본 StorageClass를 만듭니다. PersistentVolumeClaim에서 StorageClassName을 지정하지 않는 경우, 기본 StorageClass가 사용됩니다. 제공된 기본 StorageClass를 자체 StorageClass로 대체할 수 있습니다.

자체 StorageClass 리소스를 만들어 다른 저장소 등급을 설명할 수 있습니다. 예를 들어 등급은 서비스 품질 수준 또는 백업 정책에 매핑될 수 있습니다. 이 개념은 다른 저장소 시스템에서 '프로필'이라고도 합니다.

PersistentVolume 동적 프로비저닝

대부분의 경우에 PersistentVolume 객체를 직접 구성하거나 Compute Engine 영구 디스크를 만들 필요는 없습니다. 대신 PersistentVolumeClaim을 만들면 Kubernetes가 영구 디스크를 자동으로 프로비저닝합니다.

다음 매니페스트는 액세스 모드가 단일 노드에 의한 읽기-쓰기로 마운트되는 것을 허용하는 30GiB 디스크에 대한 요청을 설명합니다.

pvc-demo.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: helloweb-disk
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi
    

kubectl apply -f pvc-demo.yaml을 사용하여 이 PersistentVolumeClaim을 만들면 Kubernetes는 해당 PersistentVolume 객체를 동적으로 생성합니다. GKE 기본 스토리지 클래스를 바꾸지 않았다고 가정하면 이 PersistentVolume은 새로운 빈 Compute Engine 영구 디스크에 의해 지원됩니다. 클레임을 볼륨으로 사용하여 이 디스크를 Pod에서 사용합니다.

이 클레임을 삭제하면 해당 PersistentVolume 객체뿐 아니라 프로비저닝된 Compute Engine 영구 디스크도 삭제됩니다.

동적으로 프로비저닝된 영구 디스크의 삭제를 방지하려면 PersistentVolume 리소스 또는 StorageClass 리소스의 재확보 정책Retain으로 설정합니다. 이 경우 영구 디스크를 사용하는 PersistentVolumeClaim이 없더라도 영구 디스크가 존재하는 동안은 요금이 청구됩니다.

액세스 모드

PersistentVolume이 지원하는 액세스 모드는 다음과 같습니다.

  • ReadWriteOnce: 단일 노드에 의한 읽기-쓰기로 볼륨이 마운트될 수 있습니다.
  • ReadOnlyMany: 여러 노드에 의한 읽기 전용으로 볼륨이 마운트될 수 있습니다.
  • ReadWriteMany: 여러 노드에 의한 읽기-쓰기로 볼륨이 마운트될 수 있습니다. Compute Engine 영구 디스크가 지원하는 PersistentVolume은 이 액세스 모드를 지원하지 않습니다.

Compute Engine 영구 디스크를 ReadOnlyMany로 사용

ReadWriteOnce는 영구 디스크의 가장 일반적인 사용 사례이며, 대부분의 애플리케이션에서 기본 액세스 모드로 사용됩니다. Compute Engine 영구 디스크는 ReadOnlyMany 모드도 지원하므로 여러 애플리케이션이나 같은 애플리케이션의 여러 복제본이 동시에 같은 디스크를 사용할 수 있습니다. 예시 사용 사례에서는 여러 복제본에 정적 콘텐츠를 제공합니다.

여러 리더를 위한 영구 디스크 만들기 안내 기사를 참조하세요.

기존 영구 디스크를 PersistentVolume으로 사용

동적으로 프로비저닝된 PersistentVolume은 생성 시 비어 있습니다. 데이터가 채워진 Compute Engine 영구 디스크가 있는 경우, 해당 PersistentVolume 리소스를 수동으로 만들어 클러스터에 도입할 수 있습니다. 영구 디스크는 클러스터 노드와 동일한 영역에 있어야 합니다.

기존 영구 디스크가 지원하는 영구 볼륨을 만드는 방법의 예시를 참조하세요.

배포와 StatefulSet 비교

영구 볼륨 신청 또는 볼륨 신청 템플릿을 배포 또는 StatefulSet 같은 상위 수준 컨트롤러에서 각각 사용할 수 있습니다.

배포스테이트리스(Stateless) 애플리케이션용으로 설계되었으므로 배포의 모든 복제본은 동일한 영구 볼륨 신청을 공유합니다. 생성된 복제본 Pod는 서로 동일하므로 ReadOnlyMany 또는 ReadWriteMany 모드인 볼륨만 이 설정에서 작동할 수 있습니다.

ReadWriteOnce 볼륨을 사용하는 복제본이 하나 있는 배포라도 권장되지 않습니다. 기본 배포 전략에서 재생성 시 첫 번째 Pod를 내리기 전에 두 번째 Pod를 만들기 때문입니다. ReadWriteOnce 볼륨이 이미 사용 중이기 때문에 두 번째 Pod가 시작될 수 없고 두 번째 Pod가 아직 시작되지 않아 첫 번째 Pod를 삭제할 수 없으므로 배포가 교착 상태로 실패할 수 있습니다. 대신 ReadWriteOnce 볼륨과 함께 StatefulSet를 사용하세요.

StatefulSet는 고유한 복제본당 볼륨을 필요로 하는 스테이트풀(Stateful) 애플리케이션 배포에 권장되는 방법입니다. StatefulSet를 영구 볼륨 신청 템플릿과 함께 사용하면 각 복제본 Pod에 연결된 고유한 영구 볼륨 신청과 함께 자동으로 확장되는 애플리케이션을 사용할 수 있습니다.

리전 영구 디스크

리전 영구 디스크는 같은 리전의 두 영역 간에 데이터를 복제하며, 일반 영구 디스크와 비슷하게 사용할 수 있습니다. 영역에 장애가 발생할 경우, Kubernetes는 이 볼륨을 사용하여 워크로드를 다른 영역으로 장애 조치할 수 있습니다. 리전 영구 디스크를 사용하여 GKE에서 스테이트풀(Stateful) 워크로드를 위한 고가용성 솔루션을 빌드할 수 있습니다. 사용자는 기본 영역과 장애 조치 영역이 워크로드 실행에 충분한 리소스 용량으로 구성되어 있는지 확인해야 합니다.

리전 SSD 영구 디스크는 고가용성과 고성능이 모두 필요한 데이터베이스 같은 애플리케이션을 위한 옵션입니다. 자세한 내용은 블록 저장소 성능 비교를 참조하세요.

일반 영구 디스크와 마찬가지로 리전 영구 디스크는 필요에 따라 동적으로 프로비저닝하거나 클러스터 관리자가 미리 수동으로 프로비저닝할 수 있습니다.

리전 영구 디스크를 추가하는 방법을 알아보려면 리전 영구 디스크 프로비저닝 안내를 참조하세요.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Kubernetes Engine 문서