Compute Engine 永続ディスクの CSI ドライバを使用

このページでは、Compute Engine 永続ディスクの CSI ドライバの使用方法について説明します。

Google Kubernetes Engine(GKE)を使用すれば、クラスタ内の Google Compute Engine Persistent Disk の Container Storage Interface(CSI)ドライバを簡単かつ自動的にデプロイ、管理できます。

Compute Engine 永続ディスクの CSI ドライバのバージョンは、GKE Kubernetes のマスター バージョン番号に関連付けられています。ドライバは通常、GKE がリリースされた時点で入手可能な最新バージョンになります。クラスタが最新の GKE パッチにアップグレードされると、ドライバは自動的に更新されます。

Compute Engine 永続ディスクの CSI ドライバを使用するメリット

Kubernetes in-tree gcePersistentDisk Volume プラグインの代わりに Compute Engine 永続ディスクの CSI ドライバを使用するメリットは次のとおりです。

  • CSI ドライバは、in-tree Volume プラグインに代わる、Kubernetes における将来のストレージ拡張機能です。Kubernetes は、Kubernetes のバージョン 1.21 から in-tree Volume プラグインを削除することを発表しています。詳しくは、Kubernetes In-Tree から CSI Volume への移行がベータ版へをご覧ください。in-tree Volume の削除後、in-tree Volume プラグインを使用する既存の Volume は、代わりに CSI ドライバを通じて通信します。
  • 手動で設定せずに、また、in-tree Volume プラグインを使用せずに、永続ディスク ドライバの自動デプロイ、管理ができるようになります。
  • GKE で、追加の永続ディスク機能を活用できます。データを暗号化するデータ暗号鍵の暗号化に使用される、顧客管理の暗号鍵(CMEK)は、Compute Engine 永続ディスクの CSI ドライバでは使用できますが、in-tree Volume プラグインでは使用できません。CMEK について詳しくは、CMEK の使用をご覧ください。
  • バグの修正と機能の更新は、Kubernetes のマイナー リリースとは別にリリースされます。そのため、リリース サイクルが早くなります。

要件

この機能を使用するには、Kubernetes のマスターとノードのバージョンを 1.14 以降にする必要があります。

新しいクラスタで Compute Engine 永続ディスクの CSI ドライバを有効化する

新しいクラスタで Compute Engine 永続ディスクの CSI ドライバを使用するには、gcloud または Google Cloud Console を使用して、この機能を有効にします。これが唯一の必須のステップです。

gcloud

デフォルトでは、クラスタの作成時に Compute Engine 永続ディスクの CSI ドライバは有効になりません。クラスタ作成時にドライバを有効にするには、次のコマンドを実行します。

gcloud beta container clusters create cluster-name \
  --addons=GcePersistentDiskCsiDriver \
  --cluster-version=version

ここで

  • cluster-name は、新しいクラスタの名前です。
  • version は、GKE のバージョン番号です。この機能を使用するには、1.14 以降のバージョンを選択する必要があります。

任意指定のフラグの完全なリストについては、gcloud container clusters create のドキュメントをご覧ください。

Console

デフォルトでは、クラスタの作成時に Compute Engine 永続ディスクの CSI ドライバは有効になりません。クラスタ作成時にドライバを有効にするには:

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. [クラスタを作成] ボタンをクリックします。

  3. 必要に応じてクラスタを構成します。作成できるクラスタのタイプについて詳しくは、クラスタのタイプをご覧ください。

  4. ナビゲーション パネルの [クラスタ] の下の [機能] をクリックします。

  5. [Compute Engine 永続ディスクの CSI ドライバの有効化] のチェックボックスをオンにします。

  6. [作成] をクリックします。

Compute Engine 永続ディスクの CSI ドライバを有効にすると、ドライバが、ドライバとプロビジョナーの名前(pd.csi.storage.gke.io)を使用して Kubernetes Volume で使用できるようになります。

既存のクラスタで Compute Engine 永続ディスクの CSI ドライバを有効にする

マスターとノードのバージョンが 1.14 以降であれば、既存のクラスタでドライバを有効にすることもできます。

gcloud

既存のクラスタでドライバを有効にするには、次のコマンドを実行します。

gcloud beta container clusters update cluster-name \
  --update-addons=GcePersistentDiskCsiDriver=ENABLED

ここで、cluster-name は既存のクラスタの名前です。

Console

既存のクラスタでドライバを有効にするには:

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. クラスタの [編集] ボタン(鉛筆の形をしたボタン)をクリックします。

  3. [アドオン] を展開します。

  4. [Compute Engine 永続ディスクの CSI ドライバ] プルダウンから [有効] を選択します。

  5. [保存] をクリックします。

Compute Engine 永続ディスクの CSI ドライバの無効化

ドライバを無効にすることもできます。

gcloud

既存のクラスタでドライバを有効にするには、次のコマンドを実行します。

gcloud beta container clusters update cluster-name \
  --update-addons=GcePersistentDiskCsiDriver=DISABLED

ここで、cluster-name は既存のクラスタの名前です。

Console

既存のクラスタでドライバを有効にするには:

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. クラスタの [編集] ボタン(鉛筆の形をしたボタン)をクリックします。

  3. [アドオン] を展開します。

  4. [Compute Engine 永続ディスクの CSI ドライバ] プルダウンから [無効] を選択します。

  5. [保存] をクリックします。

Compute Engine 永続ディスクの CSI ドライバを使用する

次のセクションでは、GKE で CSI ドライバを使用した Kubernetes Volume を使用する際の一般的なプロセスについて説明します。

StorageClass を作成する

Compute Engine 永続ディスクの CSI ドライバを有効にすると、GKE は StorageClass を自動的にプリインストールします。StorageClass 名は standard-rwo です。ただし、古いクラスタ バージョンには、次の名前のいずれかが付いている場合があります。 + singlewriter-standard + standard-singlewriter

次のコマンドを実行すると、インストールされている StorageClass の名前を確認できます。

kubectl get sc

別の 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-ssd

pd-example-class.yaml ファイルを作成したら、次のコマンドを実行します。

kubectl create -f pd-example-class.yaml

PersistentVolumeClaim を作成する

PersistentVolumeClaim を作成することもできます。次の例では、プリインストールされたストレージ クラス singlewriter-standard を使用しています。

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: singlewriter-standard
  resources:
    requests:
      storage: 6Gi

PersistentVolumeClaim マニフェストを作成したら、次のコマンドを実行します。

kubectl create -f filename.yaml

プリインストールされた StorageClass の singlewriter-standard では、volumeBindingModeWaitForFirstConsumer に設定されています。volumeBindingModeWaitForFirstConsumer に設定されている場合、PersistentVolumeClaim を参照する Pod がスケジュールされるまで、PersistentVolume はプロビジョニングされません。StorageClass 内の volumeBindingModeImmediate に設定されると(または除外されると)、PersistentVolumeClaim が作成された後に、Persistent Disk-backed PersistentVolume がプロビジョニングされます。

Volume を消費する Pod を作成する

PersistentVolume で Pod を使用する場合は、ワークロード コントローラ(Deployment、StatefulSet など)を使用することをおすすめします。通常、スタンドアロン Pod は使用しませんが、次の例では、わかりやすさのためにこれを使用しています。

次の YAML ファイルを 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

次のステップ