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


Google Kubernetes Engine(GKE)を使用すると、クラスタへ簡単かつ自動的に Compute Engine 永続ディスク Container Storage Interface(CSI)ドライバをデプロイして、管理できます。

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

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

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

  • CSI ドライバは 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 で、追加の永続ディスク機能を活用できます。例:
    • Compute Engine 永続ディスクの CSI ドライバでは顧客管理の暗号鍵(CMEK)を使用できますが、in-tree volume プラグインでは使用できません。これらの鍵は、データを暗号化するデータ暗号鍵を暗号化する際に使用されます。GKE での CMEK についての詳細は、CMEK の使用をご覧ください。
    • Compute Engine 永続ディスクの CSI ドライバでは、ボリューム スナップショットを使用できます。ボリューム スナップショットを使用すると、特定の時点でのボリュームのコピーを作成できます。このコピーを使用すると、ボリュームを以前の状態に戻すことや、新しいボリュームをプロビジョニングすることが可能です。
  • バグの修正と機能の更新は、Kubernetes のマイナー リリースとは別にリリースされます。このリリース スケジュールにより、一般的にはリリース サイクルが早くなります。

要件

Compute Engine 永続ディスクの CSI ドライバを使用するには、クラスタで次のバージョンを使用する必要があります。

  • Linux クラスタ: GKE バージョン 1.14 以降。
  • Windows クラスタ: GKE バージョン 1.18 以降。

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

Compute Engine 永続ディスクの CSI ドライバが自動的に有効になっていないバージョンでクラスタを作成するには、gcloud コマンドライン ツールまたは Google Cloud Console を使用します。

クラスタ作成時にドライバを有効にするには、次の手順を行います。

gcloud

gcloud container clusters create CLUSTER-NAME \
    --addons=GcePersistentDiskCsiDriver \
    --cluster-version=VERSION

以下を置き換えます。

  • CLUSTER-NAME: クラスタの名前。
  • VERSION: GKE のバージョン番号。この機能を使用するには、1.14 以降のバージョンを選択する必要があります。

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

Console

  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 ドライバを有効にする

既存のクラスタで Compute Engine 永続ディスクの CSI ドライバを有効にするには、gcloud コマンドライン ツールまたは Google Cloud Console を使用します。

既存のクラスタでドライバを有効にするには、次の手順を行います。

gcloud

gcloud container clusters update CLUSTER-NAME \
   --update-addons=GcePersistentDiskCsiDriver=ENABLED

CLUSTER-NAME を、既存のクラスタの名前に置き換えます。

Console

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

    Google Kubernetes Engine のメニューに移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. [機能] の [Compute Engine 永続ディスクの CSI ドライバ] フィールドの横にある [Compute Engine CSI ドライバの編集] をクリックします。

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

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

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

gcloud コマンドライン ツールまたは Google Cloud Console を使用して、Compute Engine 永続ディスクの CSI ドライバを無効にします。

既存のクラスタでドライバを無効にするには、次の手順を行います。

gcloud

gcloud container clusters update CLUSTER-NAME \
    --update-addons=GcePersistentDiskCsiDriver=DISABLED

CLUSTER-NAME を、既存のクラスタの名前に置き換えます。

Console

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

    Google Kubernetes Engine に移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. [機能] の [Compute Engine 永続ディスクの CSI ドライバ] フィールドの横にある [Compute Engine CSI ドライバの編集] をクリックします。

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

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

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

次のセクションでは、GKE で CSI ドライバによって管理される Kubernetes Volume を使用する際の一般的なプロセスについて説明します。 これらのセクションは、Linux を使用するクラスタを対象としています。

StorageClass の作成

Compute Engine 永続ディスクの CSI ドライバを有効にすると、GKE は次の StorageClasses を自動的にインストールします。

  • バランス永続ディスクを使用する standard-rwo
  • SSD 永続ディスクを使用する premium-rwo

1.17 以前の一部の古いクラスタ バージョンでは、標準の永続ディスクを使用する singlewriter-standard または standard-singlewriterStorageClass を使用する場合があります。

インストールされている 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-ssdpd-standardpd-balanced など)で指定できます。

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)では、volumeBindingModeWaitForFirstConsumer に設定されています。volumeBindingModeWaitForFirstConsumer に設定されている場合、PersistentVolumeClaim を参照する Pod がスケジュールされるまで、PersistentVolume はプロビジョニングされません。StorageClass 内の volumeBindingModeImmediate に設定されると(または除外されると)、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

既知の問題

CSI ノード ID の仕様の 128 文字の制限と GKE がインスタンス名を生成する仕組みにより、特定のノードプールの新規および既存の GKE クラスタで、Compute Engine 永続ディスクの CSI ドライバのインストールが失敗することがあります。詳しくは、こちらの GitHub の問題をご覧ください。

この問題は、次のバージョンでは修正されています。

  • 1.16.15-gke.1700 以降
  • 1.17.9-6300 以降
  • 1.18.6-4801 以降

これより前のバージョンのクラスタを使用している場合は、この問題を解決するために、記載されているいずれかのバージョンにアップグレードしてください。

次のステップ