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 への移行がベータ版へをご覧ください。ツリー内ボリューム プラグインが削除された後、ツリー内ボリューム プラグインを使用する既存のボリュームは、代わりに CSI ドライバを通じて通信します。
- 手動で設定せずに、また、in-tree Volume プラグインを使用せずに、永続ディスク ドライバの自動デプロイ、管理ができるようになります。
- GKE で、追加の永続ディスク機能を活用できます。例:
- Compute Engine 永続ディスクの CSI ドライバでは顧客管理の暗号鍵(CMEK)を使用できますが、ツリー内ボリューム プラグインでは使用できません。これらの鍵は、データを暗号化するデータ暗号鍵の暗号化に使用されます。GKE での CMEK についての詳細は、CMEK の使用をご覧ください。
- Compute Engine 永続ディスクの CSI ドライバでは、ボリューム スナップショットを使用できます。ボリューム スナップショットを使用すると、特定の時点でのボリュームのコピーを作成できます。このコピーを使用して、ボリュームを以前の状態に戻すことや、新しいボリュームのプロビジョニングを行えます。
- バグの修正と機能の更新は、Kubernetes のマイナー リリースとは別にリリースされます。このリリース スケジュールにより、通常はリリース サイクルが短縮されます。
要件
Compute Engine 永続ディスクの CSI ドライバを使用するには、GKE バージョンの 1.14 以降を使用する必要があります。
新しいクラスタで Compute Engine 永続ディスクの CSI ドライバを有効にする
バージョン 1.18.10-gke.2100 以降または 1.19.3-gke.2100 以降を使用する新規作成クラスタでは、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
Cloud Console で Google Kubernetes Engine のメニューに移動します。
[クラスタを作成] ボタンをクリックします。
必要に応じてクラスタを構成します。作成できるクラスタのタイプについて詳しくは、クラスタのタイプをご覧ください。
ナビゲーション パネルの [クラスタ] の下の [機能] をクリックします。
[Compute Engine 永続ディスクの CSI ドライバの有効化] のチェックボックスをオンにします。
[作成] をクリックします。
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
Cloud Console で、Google Kubernetes Engine のメニューに移動します。
クラスタの [編集] ボタン(鉛筆の形をしたボタン)をクリックします。
[アドオン] を展開します。
[Compute Engine 永続ディスクの CSI ドライバ] プルダウンから [有効] を選択します。
[保存] をクリックします。
Compute Engine 永続ディスクの CSI ドライバの無効化
gcloud
コマンドライン ツールまたは Google Cloud Console を使用して、Compute Engine 永続ディスクの CSI ドライバを無効にします。
既存のクラスタでドライバを無効にするには、次の手順を行います。
gcloud
gcloud container clusters update CLUSTER-NAME \
--update-addons=GcePersistentDiskCsiDriver=DISABLED
CLUSTER-NAME
を、既存のクラスタの名前に置き換えます。
Console
Cloud Console で、Google Kubernetes Engine のメニューに移動します。
クラスタの [編集] ボタン(鉛筆の形をしたボタン)をクリックします。
[アドオン] を展開します。
[Compute Engine 永続ディスクの CSI ドライバ] プルダウンから [無効] を選択します。
[保存] をクリックします。
Compute Engine 永続ディスクの CSI ドライバを使用
次のセクションでは、GKE で CSI ドライバを使用した Kubernetes Volume を使用する際の一般的なプロセスについて説明します。
StorageClass の作成
Compute Engine 永続ディスクの CSI ドライバを有効にすると、GKE により自動的に StorageClass がインストールされます。StorageClass 名は standard-rwo
です。ただし、古いクラスタ バージョンでは、次の名前のいずれかが付けられている場合があります。
singlewriter-standard
standard-singlewriter
インストールされている StorageClass の名前を確認するには、次のコマンドを実行します。
kubectl get sc
また、Compute Engine 永続ディスクの CSI ドライバを使用する別の StorageClass も、provisioner 項目に pd.csi.storage.gke.io
を追加してインストールできます。
たとえば、次の 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-ssd
、pd-standard
、pd-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
では、volumeBindingMode
は WaitForFirstConsumer
に設定されています。volumeBindingMode
が WaitForFirstConsumer
に設定されている場合、PersistentVolumeClaim を参照する Pod がスケジュールされるまで、PersistentVolume はプロビジョニングされません。StorageClass 内の volumeBindingMode
が Immediate
に設定されると(または除外されると)、PersistentVolumeClaim が作成された後に、Persistent Disk-backed 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
既知の問題
CSI ノード ID の仕様の 128 文字の制限と GKE がインスタンス名を生成する仕組みにより、特定のノードプールの新規および既存の GKE クラスタで Compute Engine 永続ディスクの CSI ドライバのインストールが失敗することがあります。詳しくは、GitHub でこの問題をご覧ください。
この問題は、次のバージョンで修正されています。
- 1.16.15-gke.1700 以降
- 1.17.9-6300 以降
- 1.18.6-4801 以降
以前のバージョンを持つクラスタを使用している場合は、リストされているいずれかのバージョンにアップグレードして問題を解決してください。