이 페이지에서는 리전 영구 디스크의 동적 프로비저닝을 사용 설정하는 방법과 Google Kubernetes Engine(GKE)에서 수동으로 프로비저닝하는 방법을 설명합니다.
리전 영구 디스크로 고가용성 애플리케이션에 대해 엔드 투 엔드 솔루션을 만들려면 스테이트풀(Stateful) HA 연산자로 스테이트풀(Stateful) 앱 가용성 증가를 참조하세요.
리전 영구 디스크
영역 영구 디스크와 마찬가지로 리전 영구 디스크를 필요에 따라 동적으로 프로비저닝하거나 클러스터 관리자가 사전에 수동으로 프로비저닝할 수 있지만 동적 프로비저닝이 권장됩니다.
동적 프로비저닝
리전 영구 디스크의 동적 프로비저닝을 사용 설정하려면 replication-type
매개변수로 StorageClass
를 만들고 allowedTopologies
에 영역 제약조건을 지정합니다.
예를 들어 다음 매니페스트는 표준 영구 디스크를 사용하고 europe-west1-b
및 europe-west1-c
영역에 데이터를 복제하는 regionalpd-storageclass
라는 이름의 StorageClass
를 설명합니다.
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: regionalpd-storageclass
provisioner: pd.csi.storage.gke.io
parameters:
type: pd-balanced
replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
- key: topology.gke.io/zone
values:
- europe-west1-b
- europe-west1-c
리전 클러스터를 사용하는 경우 allowedTopologies
를 지정되지 않은 상태로 둘 수 있습니다. 이렇게 하면 이 StorageClass
를 사용하는 PersistentVolumeClaim
을 소비하는 pod를 만들 때 리전 영구 디스크가 두 영역으로 프로비저닝됩니다. 한 영역은 pod가 예약된 영역과 동일합니다. 다른 한 영역은 클러스터에서 사용할 수 있는 영역에서 무작위로 선택됩니다.
영역 클러스터를 사용할 때 allowedTopologies
를 설정해야 합니다.
StorageClass
가 생성되면 다음으로 storageClassName
필드를 사용하여 PersistentVolumeClaim
객체를 만들고 StorageClass
를 참조합니다. 예를 들어 다음 매니페스트는 regional-pvc
라는 이름의 PersistentVolumeClaim
을 만들고 regionalpd-storageclass
를 참조합니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: regional-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Gi
storageClassName: regionalpd-storageclass
StorageClass
가 volumeBindingMode: WaitForFirstConsumer
로 구성되어 있으므로 PersistentVolumeClaim
을 사용하는 pod가 생성될 때까지 PersistentVolume
이 프로비저닝되지 않습니다.
다음 매니페스트는 이전에 만든 PersistentVolumeClaim
을 사용하는 pod의 예시입니다.
kind: Pod
apiVersion: v1
metadata:
name: task-pv-pod
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: regional-pvc
containers:
- name: task-pv-container
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage
수동 프로비저닝
먼저 gcloud compute disks create
명령어를 사용하여 리전 영구 디스크를 만듭니다. 다음 예시에서는 europe-west1-b
및 europe-west1-c
영역에 복제된 gce-disk-1
이라는 디스크를 만듭니다.
gcloud compute disks create gce-disk-1 \
--size 500Gi \
--region europe-west1 \
--replica-zones europe-west1-b,europe-west1-c
그런 후 바로 전에 만든 리전 영구 디스크를 참조하는 PersistentVolume
을 만들 수 있습니다. 기존 Persistent Disk를 PersistentVolume으로 사용의 객체 외에도 리전 영구 디스크의 PersistentVolume
은 node-affinity
도 지정해야 합니다.
StorageClass
를 사용하는 경우 영구 디스크 CSI 드라이버를 지정해야 합니다.
다음은 표준 영구 디스크를 사용하고 europe-west1-b
및 europe-west1-c
영역에 데이터를 복제하는 StorageClass
매니페스트의 예시입니다.
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: regionalpd-storageclass
provisioner: pd.csi.storage.gke.io
parameters:
type: pd-balanced
replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
- key: topology.gke.io/zone
values:
- europe-west1-b
- europe-west1-c
다음은 pv-demo
라는 PersistentVolume
을 만들고 regionalpd-storageclass
를 참조하는 매니페스트의 예시입니다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-demo
spec:
storageClassName: "regionalpd-storageclass"
capacity:
storage: 500Gi
accessModes:
- ReadWriteOnce
claimRef:
namespace: default
name: pv-claim-demo
csi:
driver: pd.csi.storage.gke.io
volumeHandle: projects/PROJECT_ID/regions/europe-west1/disks/gce-disk-1
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: topology.gke.io/zone
operator: In
values:
- europe-west1-b
- europe-west1-c
PersistentVolume
예시에서 다음에 유의하세요.
volumeHandle
필드에는PROJECT_ID
를 비롯한gcloud compute disks create
호출의 세부정보가 포함됩니다.claimRef.namespace
필드는default
로 설정된 경우에도 지정해야 합니다.
영구 디스크 이름 지정
Kubernetes는 동일한 이름을 가진 영역 영구 디스크와 리전 영구 디스크를 구분할 수 없습니다. 이 문제를 해결하려면 영구 디스크에 고유한 이름을 지정해야 합니다. 동적으로 프로비저닝된 영구 디스크를 사용하는 경우에는 이 문제가 발생하지 않습니다.
다음 단계
- 튜토리얼을 따라 Persistent Disk 및 Cloud SQL로 GKE에 WordPress 배포 알아보기