Google Kubernetes Engine(GKE)を使用すると、Compute Engine 永続ディスク Container Storage Interface(CSI)ドライバをクラスタに簡単かつ自動的にデプロイして、管理できます。Compute Engine 永続ディスクの CSI ドライバは、Autopilot クラスタで常に有効になっており、無効にすることも編集することもできません。Standard クラスタでは、Compute Engine 永続ディスクの CSI ドライバを有効にする必要があります。
Compute Engine 永続ディスクの CSI ドライバのバージョンは GKE のバージョン番号に関連付けられています。通常、Compute Engine 永続ディスクの CSI ドライバのバージョンは、GKE バージョンがリリースされた時点で入手可能な最新バージョンになります。クラスタが最新の GKE パッチにアップグレードされると、ドライバは自動的に更新されます。
利点
Compute Engine 永続ディスクの CSI ドライバの使用には、次の利点があります。
- 手動による設定を必要とせずに、永続ディスク ドライバの自動デプロイ、管理ができるようになります。
- 顧客管理の暗号鍵(CMEK)を使用できます。これらの鍵は、データを暗号化するデータ暗号鍵を暗号化する際に使用されます。GKE での CMEK についての詳細は、CMEK の使用をご覧ください。
- Compute Engine 永続ディスクの CSI ドライバでは、ボリューム スナップショットを使用できます。ボリューム スナップショットを使用すると、特定の時点でのボリュームのコピーを作成できます。このコピーを使用すると、ボリュームを以前の状態に戻すことや、新しいボリュームをプロビジョニングすることが可能です。
- GKE バージョン 1.22 以降を実行しているクラスタでは、Compute Engine 永続ディスクの CSI ドライバでボリュームのクローン作成を使用できます。ボリュームのクローン作成を使用すると、特定の時点でボリュームを複製でき、ソース ボリュームのすべてのデータがプロビジョニングされます。
- バグの修正と機能の更新は、Kubernetes のマイナー リリースとは別にリリースされます。このリリース スケジュールにより、一般的にはリリース サイクルが早くなります。
準備
作業を始める前に、次のことを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
要件
Compute Engine 永続ディスクの CSI ドライバを使用するには、クラスタで次のバージョンを使用する必要があります。
- Linux クラスタ: GKE バージョン 1.14 以降。
- Windows クラスタ: GKE バージョン 1.18 以降。
バージョン 1.22 以降では、CSI 移行が有効になっています。gce-pd
プロバイダを使用する既存のボリュームは、代わりに CSI ドライバを介して通信するように移行されます。StorageClass を変更する必要はありません。gce-pd
プロバイダは、CMEK やボリューム スナップショットなどの機能を引き続きサポートしません。これらの機能を有効にするには、StorageClass の pd.csi.storage.gke.io
プロバイダを使用する必要があります。
GKE 用 Workload Identity 連携で Compute Engine 永続ディスクの CSI ドライバを使用するには、Standard クラスタで次のバージョンを使用する必要があります。
- Linux クラスタ: GKE バージョン 1.16 以降。
- Windows クラスタ: GKE バージョン 1.20.8-gke.900 以降。
新しいクラスタで Compute Engine 永続ディスクの CSI ドライバを有効にする
Compute Engine 永続ディスクの CSI ドライバが自動的に有効になっていないバージョンで標準クラスタを作成するには、Google Cloud CLI または Google Cloud コンソールを使用します。
クラスタ作成時にドライバを有効にするには、次の手順を行います。
gcloud
gcloud container clusters create CLUSTER-NAME \
--addons=GcePersistentDiskCsiDriver \
--cluster-version=VERSION
以下を置き換えます。
CLUSTER-NAME
: クラスタの名前。VERSION
: GKE のバージョン番号。この機能を使用するには、1.14 以降のバージョンを選択する必要があります。
フラグの完全な一覧については、gcloud container clusters create
のドキュメントをご覧ください。
Console
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
[add_box 作成] をクリックします。
[Standard] セクションで [構成] をクリックします。
必要に応じてクラスタを構成します。
ナビゲーション パネルの [クラスタ] の下の [機能] をクリックします。
[Compute Engine 永続ディスクの CSI ドライバの有効化] のチェックボックスをオンにします。
[作成] をクリックします。
Compute Engine 永続ディスクの CSI ドライバを有効にすると、ドライバとプロビジョナーの名前(pd.csi.storage.gke.io
)を使用して Kubernetes Volume でドライバを使用できます。
既存のクラスタで Compute Engine 永続ディスクの CSI ドライバを有効にする
既存の Standard クラスタで Compute Engine 永続ディスクの CSI ドライバを有効にするには、Google Cloud CLI または Google Cloud コンソールを使用します。
既存のクラスタでドライバを有効にするには、次の手順を行います。
gcloud
gcloud container clusters update CLUSTER-NAME \
--update-addons=GcePersistentDiskCsiDriver=ENABLED
CLUSTER-NAME
を、既存のクラスタの名前に置き換えます。
Console
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[機能] の [Compute Engine 永続ディスクの CSI ドライバ] フィールドの横にある edit [Compute Engine CSI ドライバの編集] をクリックします。
[Compute Engine 永続ディスクの CSI ドライバの有効化] のチェックボックスをオンにします。
[変更を保存] をクリックします。
Compute Engine 永続ディスクの CSI ドライバの無効化
Standard クラスタの Compute Engine 永続ディスクの CSI ドライバは、Google Cloud CLI または Google Cloud コンソールを使用して無効にできます。
ドライバを無効にすると、現在ドライバが所有する PersistentVolume を使用する Pod は、すべて終了しなくなります。これらの PersistentVolume を使用する新しい Pod でも起動エラーが発生します。
既存の Standard クラスタでドライバを無効にするには、次の手順を行います。
gcloud
gcloud container clusters update CLUSTER-NAME \
--update-addons=GcePersistentDiskCsiDriver=DISABLED
CLUSTER-NAME
を、既存のクラスタの名前に置き換えます。
Console
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[機能] の [Compute Engine 永続ディスクの CSI ドライバ] フィールドの横にある edit [Compute Engine CSI ドライバの編集] をクリックします。
[Compute Engine 永続ディスクの CSI ドライバの有効化] のチェックボックスをオフにします。
[変更を保存] をクリックします。
Linux クラスタに Compute Engine 永続ディスクの CSI ドライバを使用する
次のセクションでは、GKE で CSI ドライバによって管理される Kubernetes Volume を使用する際の一般的なプロセスについて説明します。これらのセクションは、Linux を使用するクラスタを対象としています。
StorageClass の作成
Compute Engine 永続ディスクの CSI ドライバを有効にすると、GKE は次の StorageClasses を自動的にインストールします。
- バランス永続ディスクを使用する
standard-rwo
- SSD 永続ディスクを使用する
premium-rwo
Autopilot クラスタの場合、デフォルトの StorageClass は standard-rwo
で、Compute Engine 永続ディスクの CSI ドライバを使用します。標準クラスタの場合、デフォルトの StorageClass は、Kubernetes in-tree gcePersistentDisk
Volume プラグインを使用します。
インストールされている StorageClass の名前は、次のコマンドを実行することで確認できます。
kubectl get sc
また、プロビジョナー フィールドに pd.csi.storage.gke.io
を追加して、Compute Engine 永続ディスクの CSI ドライバを使用する別の StorageClass をインストールすることも可能です。
たとえば、次の pd-example-class.yaml
という名前のファイルを使用して StorageClass を作成できます。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: pd-example
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
type: pd-balanced
type
パラメータで次の永続ディスクタイプを指定できます。
pd-balanced
pd-ssd
pd-standard
pd-extreme
(GKE バージョン 1.26 以降でサポート)
pd-standard
または pd-extreme
を使用する場合は、サポートされていないマシンタイプの追加の使用制限をご覧ください。
pd-extreme
オプションを使用する場合は、マニフェストに provisioned-iops-on-create
フィールドも追加する必要があります。このフィールドには、永続ディスクの作成時に指定したプロビジョニングされた IOPS 値と同じ値を設定する必要があります。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: pd-extreme-example
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
type: pd-extreme
provisioned-iops-on-create: '10000'
pd-example-class.yaml
ファイルを作成したら、次のコマンドを実行します。
kubectl create -f pd-example-class.yaml
PersistentVolumeClaim を作成する
Compute Engine 永続ディスクの CSI ドライバの StorageClass を参照する PersistentVolumeClaim を作成できます。
次の pvc-example.yaml
という名前のファイルは、プリインストールされたストレージ クラス standard-rwo
を使用しています。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: podpvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: standard-rwo
resources:
requests:
storage: 6Gi
PersistentVolumeClaim マニフェストを作成したら、次のコマンドを実行します。
kubectl create -f pvc-example.yaml
プリインストールされた StorageClass(standard-rwo
)では、volumeBindingMode
は WaitForFirstConsumer
に設定されています。volumeBindingMode
が WaitForFirstConsumer
に設定されている場合、PersistentVolumeClaim を参照する Pod がスケジュールされるまで、PersistentVolume はプロビジョニングされません。StorageClass 内の volumeBindingMode
が Immediate
に設定されると(または除外されると)、PersistentVolumeClaim が作成された後に、永続ディスクにサポートされる PersistentVolume がプロビジョニングされます。
ボリュームを消費する Pod を作成する
PersistentVolume で Pod を使用する場合は、ワークロード コントローラ(Deployment、StatefulSet など)を使用することをおすすめします。通常は、スタンドアロン Pod は使用しませんが、次の例では、わかりやすいようにこれを使用しています。
次の例では、前のセクションで作成したボリュームを使用します。
apiVersion: v1
kind: Pod
metadata:
name: web-server
spec:
containers:
- name: web-server
image: nginx
volumeMounts:
- mountPath: /var/lib/www/html
name: mypvc
volumes:
- name: mypvc
persistentVolumeClaim:
claimName: podpvc
readOnly: false
Windows クラスタに Compute Engine 永続ディスクの CSI ドライバを使用する
次のセクションでは、GKE で CSI ドライバによって管理される Kubernetes Volume を使用する際の一般的なプロセスについて説明します。これらのセクションは、Windows を使用するクラスタを対象としています。
次のことをご確認ください。
- クラスタ バージョンは 1.19.7-gke.2000、1.20.2-gke.2000 以降である。
- ノードのバージョンが 1.18.12-gke.1203、1.19.6-gke.800 以降である。
StorageClass の作成
Windows 用の StorageClass は、Linux と非常によく似ています。ファイル システム タイプは異なるため、デフォルトでインストールされた StorageClass は Windows で機能しないことに注意する必要があります。Windows 用の Compute Engine 永続ディスクの CSI ドライバは、ファイル システム タイプとして NTFS
を必要とします。
たとえば、次の pd-
windows-class.yaml
という名前のファイルを使用して StorageClass を作成できます。必ず、パラメータ リストに csi.storage.k8s.io/fstype: NTFS
を追加してください。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: pd-sc-windows
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
type: pd-balanced
csi.storage.k8s.io/fstype: NTFS
PersistentVolumeClaim を作成する
Windows 用の StorageClass を作成すると、その StorageClass を参照する PersistentVolumeClaim を作成できるようになります。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: podpvc-windows
spec:
accessModes:
- ReadWriteOnce
storageClassName: pd-sc-windows
resources:
requests:
storage: 6Gi
ボリュームを消費する Pod を作成する
次の例では、前のタスクで作成したボリュームを使用します。
apiVersion: v1
kind: Pod
metadata:
name: web-server
spec:
nodeSelector:
kubernetes.io/os: windows
containers:
- name: iis-server
image: mcr.microsoft.com/windows/servercore/iis
ports:
- containerPort: 80
volumeMounts:
- mountPath: /var/lib/www/html
name: mypvc
volumes:
- name: mypvc
persistentVolumeClaim:
claimName: podpvc-windows
readOnly: false
Compute Engine 永続ディスクの CSI ドライバをデフォルト以外のファイルシステム タイプで使用する
GKE の Compute Engine 永続ディスクのデフォルトのファイル システム タイプは ext4
です。ノードのイメージでサポートされていれば、xfs
ストレージ タイプを使用することもできます。ノード イメージごとのサポートされているドライバの一覧については、ストレージ ドライバのサポートをご覧ください。
次の例は、Compute Engine 永続ディスクの CSI ドライバで ext4
の代わりに xfs
をデフォルトのファイル システムとして使用する方法を示しています。
StorageClass の作成
次のマニフェストを
pd-xfs-class.yaml
という名前のファイルとして保存します。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: xfs-class provisioner: pd.csi.storage.gke.io parameters: type: pd-balanced csi.storage.k8s.io/fstype: xfs volumeBindingMode: WaitForFirstConsumer
次のようにマニフェストを適用します。
kubectl apply -f pd-xfs-class.yaml
PersistentVolumeClaim を作成する
次のマニフェストを
pd-xfs-pvc.yaml
として保存します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: xfs-pvc spec: storageClassName: xfs-class accessModes: - ReadWriteOnce resources: requests: storage: 10Gi
次のようにマニフェストを適用します。
kubectl apply -f pd-xfs-pvc.yaml
ボリュームを消費する Pod を作成する
次のマニフェストを
pd-xfs-pod.yaml
として保存します。apiVersion: v1 kind: Pod metadata: name: pd-xfs-pod spec: containers: - name: cloud-sdk image: google/cloud-sdk:slim args: ["sleep","3600"] volumeMounts: - mountPath: /xfs name: xfs-volume volumes: - name: xfs-volume persistentVolumeClaim: claimName: xfs-pvc
次のようにマニフェストを適用します。
kubectl apply -f pd-xfs-pod.yaml
ボリュームが正しくマウントされたことを確認する
Pod でシェル セッションを開きます。
kubectl exec -it pd-xfs-pod -- /bin/bash
xfs
パーティションを探します。df -aTh --type=xfs
出力例を以下に示します。
Filesystem Type Size Used Avail Use% Mounted on /dev/sdb xfs 30G 63M 30G 1% /xfs
Compute Engine 永続ディスクの CSI ドライバのログを表示する
Cloud Logging を使用して、Compute Engine 永続ディスクの CSI ドライバに関連するイベントを表示できます。ログは問題のトラブルシューティングに役立ちます。
Cloud Logging の詳細については、GKE ログの表示をご覧ください。
Compute Engine 永続ディスクの CSI ドライバのログを表示するには、次の操作を行います。
Google Cloud コンソールで、[Cloud Logging] ページに移動します。
次のクエリを実行します。
resource.type="k8s_container" resource.labels.project_id="PROJECT_ID" resource.labels.location="LOCATION" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.namespace_name="kube-system" resource.labels.container_name="gce-pd-driver"
以下を置き換えます。
PROJECT_ID
: プロジェクトの名前LOCATION
: クラスタの Compute Engine のリージョンまたはゾーン。CLUSTER_NAME
: クラスタの名前。
既知の問題
サポートされていないマシンタイプ
C3 シリーズのマシン ファミリーを使用している場合、pd-standard
永続ディスクタイプはサポートされません。
マシン上で Pod を実行しようとしたときに、Pod がサポートされていない永続ディスクタイプを使用すると、次のような警告メッセージが Pod に表示されます。
AttachVolume.Attach failed for volume "pvc-d7397693-5097-4a70-9df0-b10204611053" : rpc error: code = Internal desc = unknown Attach error: failed when waiting for zonal op: operation operation-1681408439910-5f93b68c8803d-6606e4ed-b96be2e7 failed (UNSUPPORTED_OPERATION): [pd-standard] features are not compatible for creating instance.
クラスタに、マシン ファミリーが異なる複数のノードプールがある場合は、ノード taint とノード アフィニティを使用して、ワークロードをスケジュールできる場所を制限できます。たとえば、この方法を使用すると、pd-standard
を使用するサポートされていないマシン ファミリーでワークロードが実行されないように制限できます。
pd-extreme
永続ディスクタイプを使用する場合は、ディスクが適切なマシンの形の VM インスタンスにアタッチされていることを確認する必要があります。詳細については、マシンの形のサポートをご覧ください。