6.13. GCP PD CSI Driver Operator


6.13.1. 概要

OpenShift Container Platform は、Google Cloud Platform (GCP) 永続ディスク (PD) ストレージの Container Storage Interface (CSI) ドライバーを使用して永続ボリューム (PV) をプロビジョニングできます。

Container Storage Interface (CSI) Operator およびドライバーを使用する場合、永続ストレージ および CSI ボリュームの設定 を理解しておくことが推奨されます。

GCP PD ストレージアセットにマウントする CSI でプロビジョニングされた永続ボリューム (PV) を作成するには、OpenShift Container Platform はデフォルトで GCP PD CSI Driver 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 ディスクをサポートします。

OpenShift Container Platform では、GCE Persistent Disk in-tree ボリュームプラグインと同等の CSI ドライバーに自動的に移行できます。詳細は、CSI の自動移行 を参照してください。

6.13.2. ベアメタルおよび N4 マシンシリーズ用の C3 インスタンスタイプ

6.13.2.1. C3 および N4 インスタンスタイプの制限

ベアメタルおよび N4 マシンシリーズの C3 インスタンスタイプに対する GCP PD CSI ドライバーのサポートには、次の制限があります。

  • hyperdisk-balanced ディスクを作成する際は、ボリュームサイズを少なくとも 4Gi に設定する必要があります。OpenShift Container Platform は最小サイズに切り上げないので、正しいサイズを自分で指定する必要があります。
  • ストレージプールを使用する場合、ボリュームのクローン作成はサポートされません。
  • クローン作成またはサイズ変更を行うには、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 リンク)。
  • その他の制限

6.13.2.2. hyperdisk-balanced ディスクのストレージプールの概要

ハイパーディスクストレージプールは、大規模なストレージ用に Compute Engine で使用できます。ハイパーディスクストレージプールは、購入した容量、スループット、および IOPS のコレクションであり、必要に応じてアプリケーションにプロビジョニングできます。ハイパーディスクストレージプールを使用すると、プールにディスクを作成して管理し、複数のワークロードでディスクを使用できます。ディスクをまとめて管理することで、期待される容量とパフォーマンスの向上を実現しながらコストを節約できます。ハイパーディスクストレージプールに必要なストレージのみを使用することで、数百のディスクの管理から単一のストレージプールの管理に至るまでに、容量の予測や管理の複雑さを軽減できます。

ストレージプールを設定するには、hyperdisk-balanced ディスクの設定 を参照してください。

6.13.2.3. hyperdisk-balanced ディスクの設定

前提条件

  • 管理者権限でクラスターにアクセスできる。

手順

hyperdisk-balanced ディスクを設定するには、次の手順を実行します。

  1. hyperdisk-balanced ディスクによってプロビジョニングされたアタッチ済みディスクを使用して GCP クラスターを作成します。
  2. インストール時に hyperdisk-balanced ディスクを指定するストレージクラスを作成します。

    1. カスタマイズによる GCP へのクラスターのインストール セクションの手順に従います。

      install-config.yaml ファイルとして、次のサンプルファイルを使用します。

      install-config YAML ファイルの例

      apiVersion: v1
      metadata:
        name: ci-op-9976b7t2-8aa6b
      
      sshKey: |
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      baseDomain: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      platform:
        gcp:
          projectID: XXXXXXXXXXXXXXXXXXXXXX
          region: us-central1
      controlPlane:
        architecture: amd64
        name: master
        platform:
          gcp:
            type: n4-standard-4 
      1
      
            osDisk:
              diskType: hyperdisk-balanced 
      2
      
              diskSizeGB: 200
        replicas: 3
      compute:
      - architecture: amd64
        name: worker
        replicas: 3
        platform:
          gcp:
            type: n4-standard-4 
      3
      
            osDisk:
              diskType: hyperdisk-balanced 
      4
      Copy to Clipboard Toggle word wrap

      1 3
      ノードタイプを n4-standard-4 に指定します。
      2 4
      hyperdisk-balanced ディスクタイプを基盤とするルートディスクがノードにあることを指定します。クラスター内のすべてのノードが、同じディスクタイプ (hyperdisks-balanced または pd-* のどちらか) を使用する必要があります。
      注記

      クラスター内のすべてのノードが、hyperdisk-balanced ボリュームをサポートする必要があります。hyperdisk-balanced ディスクを使用する N2 と N3 など、混合ノードを持つクラスターはサポートされていません。

    2. Cloud Credential Operator ユーティリティーマニフェストの組み込み セクションのステップ 3 を実行した後、インストールプログラムによって作成されたマニフェストディレクトリーに次のマニフェストをコピーします。

      • cluster_csi_driver.yaml - デフォルトのストレージクラスを作成しないことを指定します。
      • storageclass.yaml - ハイパーディスク固有のストレージクラスを作成します。

        クラスター CSI ドライバーの YAML ファイルの例

        apiVersion: operator.openshift.io/v1
        kind: "ClusterCSIDriver"
        metadata:
          name: "pd.csi.storage.gke.io"
        spec:
          logLevel: Normal
          managementState: Managed
          operatorLogLevel: Normal
          storageClassState: Unmanaged 
        1
        Copy to Clipboard Toggle word wrap

        1
        デフォルトの OpenShift Container Platform ストレージクラスの作成を無効にすることを指定します。

        ストレージクラスの YAML ファイルの例

        apiVersion: storage.k8s.io/v1
        kind: StorageClass
        metadata:
          name: hyperdisk-sc 
        1
        
          annotations:
            storageclass.kubernetes.io/is-default-class: "true"
        provisioner: pd.csi.storage.gke.io 
        2
        
        volumeBindingMode: WaitForFirstConsumer
        allowVolumeExpansion: true
        reclaimPolicy: Delete
        parameters:
          type: hyperdisk-balanced 
        3
        
          replication-type: none
          provisioned-throughput-on-create: "140Mi" 
        4
        
          provisioned-iops-on-create: "3000" 
        5
        
          storage-pools: projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c 
        6
        
        allowedTopologies: 
        7
        
        - matchLabelExpressions:
          - key: topology.kubernetes.io/zone
            values:
            - us-east4-c
        ...
        Copy to Clipboard Toggle word wrap

        1
        ストレージクラスの名前を指定します。この例では、hyperdisk-sc です。
        2
        pd.csi.storage.gke.io は GCP の CSI プロビジョナーを指定します。
        3
        hyperdisk-balanced ディスクの使用を指定します。
        4
        スループット値を、"Mi" 修飾子を使用して MiBps 単位で指定します。たとえば、必要なスループットが 250 MiBps の場合は、"250Mi" と指定します。値を指定しない場合、ディスクタイプのデフォルトに基づいて容量が決定されます。
        5
        IOPS の値を修飾子なしで指定します。たとえば、7,000 IOPS が必要な場合は、"7000" と指定します。値を指定しない場合、ディスクタイプのデフォルトに基づいて容量が決定されます。
        6
        ストレージプールを使用する場合は、使用する特定のストレージプールのリストを、projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME という形式で指定します。
        7
        ストレージプールを使用する場合は、allowedTopologies を設定して、プロビジョニングされるボリュームのトポロジーをストレージプールが存在する場所に制限します。この例では、us-east4-c です。
  3. 次のサンプル YAML ファイルを使用して、ハイパーディスク固有のストレージクラスを使用する永続ボリューム要求 (PVC) を作成します。

    PVC YAML ファイルの例

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-pvc
    spec:
      storageClassName: hyperdisk-sc 
    1
    
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 2048Gi 
    2
    Copy to Clipboard Toggle word wrap

    1
    PVC はストレージプール固有のストレージクラスを参照します。この例では、hyperdisk-sc です。
    2
    hyperdisk-balanced ボリュームのターゲットストレージ容量。この例では 2048Gi です。
  4. 作成した PVC を使用するデプロイメントを作成します。デプロイメントを使用すると、Pod が再起動して再スケジュールされた後でも、アプリケーションが永続ストレージにアクセスできるようになります。

    1. デプロイメントを作成する前に、指定されたマシンシリーズのノードプールが稼働していることを確認します。稼働していない場合は、Pod はスケジュールに失敗します。
    2. 以下の 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
      Copy to Clipboard Toggle word wrap

      1
      マシンファミリーを指定します。この例では n4 です。
      2
      前述の手順で作成された PVC の名前を指定します。この例では my-pfc です。
    3. 以下のコマンドを実行して、デプロイメントが正常に作成されたことを確認します。

      $ oc get deployment
      Copy to Clipboard Toggle word wrap

      出力例

      NAME       READY   UP-TO-DATE   AVAILABLE   AGE
      postgres   0/1     1            0           42s
      Copy to Clipboard Toggle word wrap

      ハイパーディスクインスタンスがプロビジョニングを完了し、READY ステータスが表示されるまで数分かかる場合があります。

    4. 次のコマンドを実行して、PVC my-pvc が永続ボリューム (PV) に正常にバインドされていることを確認します。

      $ oc get pvc my-pvc
      Copy to Clipboard Toggle word wrap

      出力例

      NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       VOLUMEATTRIBUTESCLASS  AGE
      my-pvc        Bound    pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6   2Ti        RWO            hyperdisk-sc       <unset>                2m24s
      Copy to Clipboard Toggle word wrap

    5. hyperdisk-balanced ディスクの想定の設定を確認します。

      $ gcloud compute disks list
      Copy to Clipboard Toggle word wrap

      出力例

      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
      Copy to Clipboard Toggle word wrap

      1
      Hyperdisk-balanced ディスク。
    6. ストレージプールを使用している場合は、次のコマンドを実行して、ボリュームがストレージクラスと PVC で指定されたとおりにプロビジョニングされていることを確認します。

      $ gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
      Copy to Clipboard Toggle word wrap

      出力例

      NAME                                      STATUS  PROVISIONED_IOPS  PROVISIONED_THROUGHPUT  SIZE_GB
      pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6  READY   3000              140                     2048
      Copy to Clipboard Toggle word wrap

6.13.3. CSI について

ストレージベンダーはこれまで Kubernetes の一部としてストレージドライバーを提供してきました。Container Storage Interface (CSI) の実装では、サードパーティーのプロバイダーは、コア Kubernetes コードを変更せずに標準のインターフェイスを使用してストレージプラグインを提供できます。

CSI Operator は、インツリーボリュームプラグインでは不可能なボリュームスナップショットなどのストレージオプションを OpenShift Container Platform ユーザーに付与します。

6.13.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 Container Platform がサポートするすべての GCP PD CSI ストレージクラスパラメーターを説明しています。

Expand
表6.5 CreateVolume パラメーター
パラメーターデフォルト説明

type

pd-ssdpd-standard、または pd-balanced

pd-standard

標準の PV または solid-state-drive PV を選択できます。

ドライバーは値を検証しないため、可能なすべての値が受け入れられます。

replication-type

none または regional-pd

none

zonal またはリージョン PV を選択できます。

disk-encryption-kms-key

新規ディスクの暗号化に使用するキーの完全修飾リソース識別子。

空の文字列

顧客管理の暗号鍵 (CMEK) を使用して新規ディスクを暗号化します。

6.13.5. カスタムで暗号化された永続ボリュームの作成

PersistentVolumeClaim オブジェクトの作成時に、OpenShift Container Platform は新規永続ボリューム (PV) をプロビジョニングし、PersistentVolume オブジェクトを作成します。新規に作成された PV を暗号化することで、Google Cloud Platform (GCP) にカスタム暗号化キーを追加し、クラスター内の PV を保護することができます。

暗号化の場合、作成した新たに割り当てられる PV は、新規または既存の Google Cloud Key Management Service (KMS) キーを使用してクラスターで顧客管理の暗号鍵 (CMEK) を使用します。

前提条件

  • 実行中の OpenShift Container Platform クラスターにログインしている。
  • Cloud KMS キーリングとキーのバージョンを作成している。

CMEK および Cloud KMS リソースの詳細は、顧客管理の暗号鍵 (CMEK) の使用 を参照してください。

手順

カスタムで暗号化された PV を作成するには、以下の手順を実行します。

  1. 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
    Copy to Clipboard Toggle word wrap
    1
    このフィールドは、新規ディスクの暗号化に使用されるキーのリソース識別子である必要があります。値では、大文字と小文字が区別されます。キー ID の値を指定する方法は、Retrieving a resource’s ID および Getting a Cloud KMS resource ID を参照してください。
    注記

    disk-encryption-kms-key パラメーターは既存のストレージクラスに追加することはできません。ただし、ストレージクラスを削除し、同じ名前および異なるパラメーターセットでこれを再作成できます。これを実行する場合、既存クラスのプロビジョナーは pd.csi.storage.gke.io である必要があります。

  2. oc コマンドを使用して、ストレージクラスを OpenShift Container Platform クラスターにデプロイします。

    $ oc describe storageclass csi-gce-pd-cmek
    Copy to Clipboard Toggle word wrap

    出力例

    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
    Copy to Clipboard Toggle word wrap

  3. 直前の手順で作成したストレージクラスオブジェクトの名前に一致する pvc.yaml という名前のファイルを作成します。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: csi-gce-pd-cmek
      resources:
        requests:
          storage: 6Gi
    Copy to Clipboard Toggle word wrap
    注記

    新規ストレージクラスをデフォルトとしてマークした場合は、storageClassName フィールドを省略できます。

  4. PVC をクラスターに適用します。

    $ oc apply -f pvc.yaml
    Copy to Clipboard Toggle word wrap
  5. PVC のステータスを取得し、これが作成され、新規にプロビジョニングされた PV にバインドされていることを確認します。

    $ oc get pvc
    Copy to Clipboard Toggle word wrap

    出力例

    NAME      STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS     AGE
    podpvc    Bound     pvc-e36abf50-84f3-11e8-8538-42010a800002   10Gi       RWO            csi-gce-pd-cmek  9s
    Copy to Clipboard Toggle word wrap

    注記

    ストレージクラスで volumeBindingMode フィールドが WaitForFirstConsumer に設定されている場合、これを検証する前に PVC を使用するために Pod を作成する必要があります。

CMEK で保護される PV が OpenShift Container Platform クラスターで使用できるようになります。

6.13.6. ユーザー管理型の暗号化

ユーザー管理型の暗号化機能を使用すると、インストール時に OpenShift Container Platform ノードのルートボリュームを暗号化するキーを指定でき、すべてのマネージドストレージクラスはこれらのキーを使用してプロビジョニングされたストレージボリュームを暗号化できます。install-config YAML ファイルの platform.<cloud_type>.defaultMachinePlatform フィールドにカスタムキーを指定する必要があります。

この機能は、次のストレージタイプをサポートします。

  • Amazon Web Services (AWS) Elastic Block storage (EBS)
  • Microsoft Azure Disk ストレージ
  • Google Cloud Platform (GCP) 永続ディスク (PD) ストレージ
  • IBM Virtual Private Cloud (VPC) Block ストレージ

GCP PD のユーザー管理型の暗号化を使用したインストールの詳細は、インストール設定パラメーター を参照してください。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat