5.5. GCP PD CSI Driver Operator
5.5.1. 概要
OpenShift Dedicated は、Google Cloud Platform (GCP) 永続ディスク (PD) ストレージ用の Container Storage Interface (CSI) ドライバーを使用して、永続ボリューム (PV) をプロビジョニングできます。
Container Storage Interface (CSI) Operator およびドライバーを使用する場合は、永続ストレージ および CSI ボリュームの設定 を理解しておくことが推奨されます。
GCP PD ストレージアセットにマウントする CSI プロビジョニングされた永続ボリューム (PV) を作成するために、OpenShift Dedicated はデフォルトで GCP PD CSI ドライバー Operator と GCP PD CSI ドライバーを openshift-cluster-csi-drivers
namespace にインストールします。
- GCP PD CSI Driver Operator: デフォルトで、Operator は PVC の作成に使用できるストレージクラスを提供します。必要に応じて、このデフォルトのストレージクラスを無効にできます (デフォルトストレージクラスの管理 を参照)。GCE Persistent Disk を使用した永続ストレージ で説明されているように、GCP PD ストレージを作成するオプションもあります。
GCP PD ドライバー: このドライバーを使用すると、GCP PD PV を作成し、マウントできます。
GCP PD CSI ドライバーは、ベアメタルおよび N4 マシンシリーズの C3 インスタンスタイプをサポートします。C3 インスタンスタイプと N4 マシンシリーズは、hyperdisk–balanced ディスクをサポートします。
5.5.2. ベアメタルおよび N4 マシンシリーズ用の C3 インスタンスタイプ
5.5.2.1. C3 および N4 インスタンスタイプの制限
ベアメタルおよび N4 マシンシリーズの C3 インスタンスタイプに対する GCP PD CSI ドライバーのサポートには、次の制限があります。
- ストレージプールを使用する場合、ボリュームのクローン作成はサポートされません。
- クローン作成またはサイズ変更を行うには、hyperdisk-balanced ディスクのサイズは 6Gi 以上である必要があります。
デフォルトストレージクラスは standard-csi です。
重要ストレージクラスを手動で作成する必要があります。
ストレージクラスの作成については、hyperdisk–balanced ディスクの設定 セクションのステップ 2 を参照してください。
- N2 や N4 など、異なるストレージタイプを使用する仮想マシン (VM) が混在するクラスターはサポートされていません。これは、ハイパーディスク分散ディスクがほとんどのレガシー VM で使用できないためです。同様に、N4/C3 仮想マシンでは、通常の永続ディスクは使用できません。
- c3-standard-2、c3-standard-4、n4-standard-2、および n4-standard-4 ノードを持つ GCP クラスターは、アタッチ可能な最大ディスク番号 (16) を誤って超過する可能性があります (JIRA リンク)。
5.5.2.2. ハイパーディスクバランスディスクのストレージプールの概要
ハイパーディスクストレージプールは、大規模なストレージ用に Compute Engine で使用できます。ハイパーディスクストレージプールは、購入した容量、スループット、および IOPS のコレクションであり、必要に応じてアプリケーションにプロビジョニングできます。ハイパーディスクストレージプールを使用すると、プールにディスクを作成して管理し、複数のワークロードでディスクを使用できます。ディスクをまとめて管理することで、期待される容量とパフォーマンスの向上を実現しながらコストを節約できます。ハイパーディスクストレージプールに必要なストレージのみを使用することで、数百のディスクの管理から単一のストレージプールの管理に至るまでに、容量の予測や管理の複雑さを軽減できます。
ストレージプールを設定するには、hyperdisk–balanced ディスクの設定 を参照してください。
5.5.2.3. hyperdisk–balanced ディスクの設定
前提条件
- 管理者権限でクラスターにアクセスできる。
手順
hyperdisk-balanced ディスクを設定するには、以下を実行します。
次のサンプル YAML ファイルを使用して、ハイパーディスク固有のストレージクラスを使用する永続ボリューム要求 (PVC) を作成します。
PVC YAML ファイルの例
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: storageClassName: hyperdisk-sc 1 accessModes: - ReadWriteOnce resources: requests: storage: 2048Gi 2
作成した PVC を使用するデプロイメントを作成します。デプロイメントを使用すると、Pod が再起動して再スケジュールされた後でも、アプリケーションが永続ストレージにアクセスできるようになります。
- デプロイメントを作成する前に、指定されたマシンシリーズのノードプールが稼働していることを確認します。稼働していない場合は、Pod はスケジュールに失敗します。
以下の YAML ファイルの例を使用してデプロイメントを作成します。
デプロイメント YAML ファイルの例
apiVersion: apps/v1 kind: Deployment metadata: name: postgres spec: selector: matchLabels: app: postgres template: metadata: labels: app: postgres spec: nodeSelector: cloud.google.com/machine-family: n4 1 containers: - name: postgres image: postgres:14-alpine args: [ "sleep", "3600" ] volumeMounts: - name: sdk-volume mountPath: /usr/share/data/ volumes: - name: sdk-volume persistentVolumeClaim: claimName: my-pvc 2
以下のコマンドを実行して、デプロイメントが正常に作成されたことを確認します。
$ oc get deployment
出力例
NAME READY UP-TO-DATE AVAILABLE AGE postgres 0/1 1 0 42s
ハイパーディスクインスタンスがプロビジョニングを完了し、READY ステータスが表示されるまで数分かかる場合があります。
次のコマンドを実行して、PVC
my-pvc
が永続ボリューム (PV) に正常にバインドされていることを確認します。$ oc get pvc my-pvc
出力例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE my-pvc Bound pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 2Ti RWO hyperdisk-sc <unset> 2m24s
hyperdisk-balanced ディスクの想定の設定を確認します。
$ gcloud compute disks list
出力例
NAME LOCATION LOCATION_SCOPE SIZE_GB TYPE STATUS instance-20240914-173145-boot us-central1-a zone 150 pd-standard READY instance-20240914-173145-data-workspace us-central1-a zone 100 pd-balanced READY c4a-rhel-vm us-central1-a zone 50 hyperdisk-balanced READY 1
- 1
- Hyperdisk-balanced ディスク。
ストレージプールを使用している場合は、次のコマンドを実行して、ボリュームがストレージクラスと PVC で指定されたとおりにプロビジョニングされていることを確認します。
$ gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
出力例
NAME STATUS PROVISIONED_IOPS PROVISIONED_THROUGHPUT SIZE_GB pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 READY 3000 140 2048
5.5.3. CSI について
ストレージベンダーはこれまで Kubernetes の一部としてストレージドライバーを提供してきました。Container Storage Interface (CSI) の実装では、サードパーティーのプロバイダーは、コア Kubernetes コードを変更せずに標準のインターフェイスを使用してストレージプラグインを提供できます。
CSI Operator は、in-tree ボリュームプラグインでは不可能なボリュームスナップショットなどのストレージオプションを OpenShift Dedicated ユーザーに付与します。
5.5.4. GCP PD CSI ドライバーストレージクラスパラメーター
Google Cloud Platform (GCP) 永続ディスク (PD) の Container Storage Interface (CSI) ドライバーは CSI の external-provisioner
サイドカーをコントローラーとして使用します。これは、CSI ドライバーでデプロイされる別のヘルパーコンテナーです。サイドカーは、CreateVolume
操作をトリガーして永続ボリューム (PV) を管理します。
GCP PD CSI ドライバーは、csi.storage.k8s.io/fstype
パラメーターキーを使用して動的プロビジョニングをサポートします。次の表では、OpenShift Dedicated でサポートされているすべての GCP PD CSI ストレージクラスパラメーターを説明します。
パラメーター | 値 | デフォルト | 説明 |
---|---|---|---|
|
|
| 標準の PV または solid-state-drive PV を選択できます。 ドライバーは値を検証しないため、可能なすべての値が受け入れられます。 |
|
|
| zonal またはリージョン PV を選択できます。 |
| 新規ディスクの暗号化に使用するキーの完全修飾リソース識別子。 | 空の文字列 | 顧客管理の暗号鍵 (CMEK) を使用して新規ディスクを暗号化します。 |
5.5.5. カスタムで暗号化された永続ボリュームの作成
PersistentVolumeClaim
オブジェクトを作成すると、OpenShift Dedicated は新しい永続ボリューム (PV) をプロビジョニングし、PersistentVolume
オブジェクトを作成します。新規に作成された PV を暗号化することで、Google Cloud Platform (GCP) にカスタム暗号化キーを追加し、クラスター内の PV を保護することができます。
暗号化の場合、作成した新たに割り当てられる PV は、新規または既存の Google Cloud Key Management Service (KMS) キーを使用してクラスターで顧客管理の暗号鍵 (CMEK) を使用します。
前提条件
- 実行中の OpenShift Dedicated クラスターにログインしている。
- Cloud KMS キーリングとキーのバージョンを作成している。
CMEK および Cloud KMS リソースの詳細は、顧客管理の暗号鍵 (CMEK) の使用 を参照してください。
手順
カスタムで暗号化された PV を作成するには、以下の手順を実行します。
Cloud KMS キーを使用してストレージクラスを作成します。以下の例では、暗号化されたボリュームの動的プロビジョニングを有効にします。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-gce-pd-cmek provisioner: pd.csi.storage.gke.io volumeBindingMode: "WaitForFirstConsumer" allowVolumeExpansion: true parameters: type: pd-standard disk-encryption-kms-key: projects/<key-project-id>/locations/<location>/keyRings/<key-ring>/cryptoKeys/<key> 1
- 1
- このフィールドは、新規ディスクの暗号化に使用されるキーのリソース識別子である必要があります。値では、大文字と小文字が区別されます。キー ID の値を指定する方法は、Retrieving a resource's ID および Getting a Cloud KMS resource ID を参照してください。
注記disk-encryption-kms-key
パラメーターは既存のストレージクラスに追加することはできません。ただし、ストレージクラスを削除し、同じ名前および異なるパラメーターセットでこれを再作成できます。これを実行する場合、既存クラスのプロビジョナーはpd.csi.storage.gke.io
にする必要があります。oc
コマンドを使用して、ストレージクラスを OpenShift Dedicated クラスターにデプロイします。$ oc describe storageclass csi-gce-pd-cmek
出力例
Name: csi-gce-pd-cmek IsDefaultClass: No Annotations: None Provisioner: pd.csi.storage.gke.io Parameters: disk-encryption-kms-key=projects/key-project-id/locations/location/keyRings/ring-name/cryptoKeys/key-name,type=pd-standard AllowVolumeExpansion: true MountOptions: none ReclaimPolicy: Delete VolumeBindingMode: WaitForFirstConsumer Events: none
直前の手順で作成したストレージクラスオブジェクトの名前に一致する
pvc.yaml
という名前のファイルを作成します。kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteOnce storageClassName: csi-gce-pd-cmek resources: requests: storage: 6Gi
注記新規ストレージクラスをデフォルトとしてマークした場合は、
storageClassName
フィールドを省略できます。PVC をクラスターに適用します。
$ oc apply -f pvc.yaml
PVC のステータスを取得し、これが作成され、新規にプロビジョニングされた PV にバインドされていることを確認します。
$ oc get pvc
出力例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE podpvc Bound pvc-e36abf50-84f3-11e8-8538-42010a800002 10Gi RWO csi-gce-pd-cmek 9s
注記ストレージクラスで
volumeBindingMode
フィールドがWaitForFirstConsumer
に設定されている場合は、これを検証する前に PVC を使用するために Pod を作成する必要があります。
CMEK で保護された PV を OpenShift Dedicated クラスターで使用できるようになりました。