このページでは、Hyperdisk Balanced High Availability ボリュームとリージョン永続ディスクの動的プロビジョニングを有効にする方法と、Google Kubernetes Engine(GKE)でそれらを手動でプロビジョニングする方法について説明します。マシンタイプの互換性については、リージョン ディスクの制限事項と Hyperdisk のマシンシリーズのサポートをご覧ください。通常、第 3 世代以降のマシンシリーズには Hyperdisk Balanced High Availability ボリュームを使用し、第 2 世代以前のマシンシリーズにはリージョン永続ディスクを使用します。マシンシリーズの世代の詳細については、Compute Engine の用語をご覧ください。
リージョン永続ディスクを使用した高可用性アプリケーション用のエンドツーエンドのソリューションの作成については、Stateful HA Operator を使用してステートフル アプリの可用性を向上させるをご覧ください。 この機能は、Hyperdisk Balanced High Availability ボリュームをサポートしていません。
Hyperdisk Balanced の高可用性
この例では、Hyperdisk Balanced High Availability ボリュームを必要に応じて動的にプロビジョニングする方法と、クラスタ管理者が事前に手動でプロビジョニングする方法を示します。
動的プロビジョニング
次のマニフェストを
balanced-ha-storage.yaml
という名前のファイルに保存します。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: balanced-ha-storage provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-balanced-high-availability provisioned-throughput-on-create: "250Mi" provisioned-iops-on-create: "7000" allowedTopologies: - matchLabelExpressions: - key: topology.gke.io/zone values: - ZONE1 - ZONE2
次のように置き換えます。
ZONE1
、ZONE2
: 動的にプロビジョニングされたボリュームが複製されるリージョン内のゾーン。
StorageClass を作成します。
kubectl create -f hdb-ha-example-class.yaml
次の PersistentVolumeClaim マニフェストを
pvc-example.yaml
という名前のファイルに保存します。kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ACCESS_MODE storageClassName: balanced-ha-storage resources: requests: storage: 20Gi
次のように置き換えます。
ACCESS_MODE
: Hyperdisk Balanced High Availability はReadWriteOnce
、ReadWriteMany
、ReadWriteOncePod
をサポートしています。各アクセスモードの違いとユースケースについては、永続ボリュームのアクセスモードをご覧ください。
前に作成した StorageClass を参照する PersistentVolumeClaim を適用します。
kubectl apply -f pvc-example.yaml
手動プロビジョニング
Compute Engine のドキュメントに沿って、Hyperdisk Balanced High Availability ボリュームを手動で作成します。
次の PersistentVolume マニフェストを
pv-example.yaml
という名前のファイルに保存します。マニフェストは、作成した Hyperdisk Balanced High Availability ボリュームを参照します。apiVersion: v1 kind: PersistentVolume metadata: name: pv-demo spec: capacity: storage: 500Gi accessModes: - ACCESS_MODE claimRef: namespace: default name: podpvc csi: driver: pd.csi.storage.gke.io volumeHandle: projects/PROJECT_ID/regions/REGION/disks/gce-disk-1 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.gke.io/zone operator: In values: - ZONE1 - ZONE2
次のように置き換えます。
PROJECT_ID
: 作成したボリュームのプロジェクト ID。REGION
: 作成したディスクのリージョンご利用いただける最新のリージョンについては、Compute Engine のドキュメントをご覧ください。ZONE1
、ZONE2
: 作成したボリュームが複製されるリージョン内のゾーン。ACCESS_MODE
: Hyperdisk Balanced High Availability はReadWriteOnce
、ReadWriteMany
、ReadWriteOncePod
をサポートしています。各アクセスモードの違いとユースケースについては、永続ボリュームのアクセスモードをご覧ください。
前に作成した Hyperdisk Balanced High Availability ボリュームを参照する永続ボリュームを作成します。
kubectl apply -f pv-example.yaml
次の PersistentVolumeClaim マニフェストを
pvc-example.yaml
という名前のファイルに保存します。kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ACCESS_MODE storageClassName: balanced-ha-storage resources: requests: storage: 20Gi
次のように置き換えます。
ACCESS_MODE
: Hyperdisk Balanced High Availability はReadWriteOnce
、ReadWriteMany
、ReadWriteOncePod
をサポートしています。前のステップの PersistentVolume で指定されているアクセスモードと同じである必要があります。各アクセスモードの違いとユースケースについては、永続ボリュームのアクセスモードをご覧ください。
前に作成した PersistentVolume を参照する PersistentVolumeClaim を適用します。
kubectl apply -f pvc-example.yaml
リージョン永続ディスク
ゾーン永続ディスクは、通常の永続ディスクと同様に、必要に応じて動的にプロビジョニングすることも、クラスタ管理者が事前に手動でプロビジョニングすることもできますが、動的プロビジョニングをおすすめします。pd-standard
タイプのリージョン永続ディスクを使用するには、PersistentVolumeClaim の spec.resources.requests.storage
属性を 200 GiB 以上に設定します。ユースケースでより小さいボリュームが必要な場合は、代わりに pd-balanced
または pd-ssd
の使用を検討してください。
動的プロビジョニング
リージョン永続ディスクの動的プロビジョニングを有効にするには、replication-type
パラメータを使用して StorageClass
を作成し、allowedTopologies
にゾーン制約を指定します。
たとえば、次のマニフェストは regionalpd-storageclass
という名前の StorageClass
について記述しています。標準永続ディスクを使用し、データを europe-west1-b
ゾーンと europe-west1-c
ゾーンに複製しています。
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 を作成するときに、次の 2 つのゾーンとともにリージョン永続ディスクがプロビジョニングされます。一方のゾーンは、Pod がスケジュールされているゾーンと同じです。もう一方のゾーンは、クラスタで使用可能なゾーンからランダムに選択されます。
ゾーンクラスタを使用する場合は、allowedTopologies
を設定する必要があります。
StorageClass
を作成したら、PersistentVolumeClaim
オブジェクトを作成し、storageClassName
フィールドを使用して 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
を作成できます。また、既存の永続ディスクを 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
呼び出しの詳細が含まれています。default
に設定されている場合でも、claimRef.namespace
フィールドを指定する必要があります。
永続ディスクに名前を付ける
Kubernetes は、同じ名前のゾーン永続ディスクとリージョナル永続ディスクを区別できません。この問題を回避するために、永続ディスクに固有の名前を付けてください。動的にプロビジョニングされた永続ディスクを使用している場合には、この問題は発生しません。
次のステップ
- チュートリアルで、Persistent Disk と Cloud SQL を使用して GKE に WordPress をデプロイするについて学習する。