第6章 Container Storage Interface (CSI) の使用


6.1. CSI ボリュームの設定

Container Storage Interface (CSI) は、ストレージベンダーがコンテナーオーケストレーションシステム間で動作するプラグインを開発できるようにする標準仕様です。OpenShift Container Platform は、CSI ドライバーを使用して永続ストレージをプロビジョニングおよび管理し、ツリー内ストレージプラグインを置き換えます。

6.1.1. CSI アーキテクチャー

Container Storage Interface (CSI) アーキテクチャーは、OpenShift Container Platform とストレージバックエンド間の通信にコンテナー化されたドライバーとブリッジコンポーネントを使用します。各ドライバーには、ボリューム操作用のコントローラーデプロイメントとデーモンセットが必要です。複数のドライバーを同時に実行できます。

Container Storage Interface (CSI) により、OpenShift Container Platform は CSI インターフェイス を永続ストレージとして実装するストレージバックエンドからストレージを使用できます。

注記

OpenShift Container Platform 4.21 は、CSI 仕様 のバージョン 1.6.0 をサポートします。

CSI 仕様の詳細は、「CSI 仕様」を参照してください。

CSI ドライバーは通常、コンテナーイメージとして提供されます。これらのコンテナーは、実行先の OpenShift Container Platform を認識しません。OpenShift Container Platform でサポートされる CSI 互換のストレージバックエンドを使用するには、クラスター管理者は、OpenShift Container Platform とストレージドライバーの橋渡しとして機能するコンポーネントを複数デプロイする必要があります。

以下の図では、OpenShift Container Platform クラスターの Pod で実行されるコンポーネントの俯瞰図を示しています。

CSI コンポーネントのアーキテクチャー

異なるストレージバックエンドに対して複数の CSI ドライバーを実行できます。各ドライバーには、独自の外部コントローラーのデプロイメントおよびドライバーと CSI レジストラーを含むデーモンセットが必要です。

6.1.1.1. 外部の CSI コントローラー

External Container Storage Interface (CSI) コントローラーは、ボリュームのプロビジョニング、削除、アタッチ、スナップショット、サイズ変更を処理するコンテナーを備えたデプロイメントとして実行されます。コントローラー Pod は、UNIX Domain Socket を使用して CSI ドライバーと通信し、認証情報を保護するためにインフラストラクチャーノード上で実行されます。

外部の CSI コントローラーは、5 つのコンテナーを含む 1 つまたは複数の Pod を配置するデプロイメントです。

  • スナップショットコンテナーは、VolumeSnapshot オブジェクトおよび VolumeSnapshotContent オブジェクトを監視し、VolumeSnapshotContent オブジェクトの作成および削除を担当します。
  • リサイザーコンテナーは、PersistentVolumeClaim オブジェクトでより多くのストレージを要求した場合に、PersistentVolumeClaim の更新を監視し、CSI エンドポイントに対して ControllerExpandVolume 操作をトリガーするサイドカーコンテナーです。
  • OpenShift Container Platform からの attach および detach の呼び出しを適切な CSI ドライバーへの ControllerPublish および ControllerUnpublish 呼び出しに変換する外部の CSI アタッチャーコンテナー。
  • OpenShift Container Platform からの provision および delete 呼び出しを適切な CSI ドライバーへの CreateVolume および DeleteVolume 呼び出しに変換する外部の CSI プロビジョナーコンテナー。
  • CSI ドライバーコンテナー。

CSI アタッチャーおよび CSI プロビジョナーコンテナーは、Unix Domain Socket を使用して、CSI ドライバーコンテナーと通信し、CSI の通信が Pod 外に出ないようにします。CSI ドライバーは Pod 外からはアクセスできません。

注記

通常、attach、detach、provision、および delete 操作では、CSI ドライバーがストレージバックエンドに対する認証情報を使用する必要があります。CSI コントローラー Pod をインフラストラクチャーノードで実行し、コンピュートノードで致命的なセキュリティー違反が発生した場合でも認証情報がユーザープロセスに漏洩されないようにします。

注記

外部のアタッチャーは、サードパーティーの attach または detach 操作をサポートしない CSI ドライバーに対しても実行する必要があります。外部のアタッチャーは、CSI ドライバーに対して ControllerPublish または ControllerUnpublish 操作を発行しません。ただし、必要な OpenShift Container Platform 割り当て API を実装できるように依然として実行する必要があります。

6.1.1.2. CSI ドライバーのデーモンセット

CSI ドライバーデーモンセットは、ボリュームのマウントと操作を可能にするために、すべてのノードで実行されます。各 Pod には、UNIX ドメインソケットを使用してノードサービスと通信するドライバーとレジストラーが含まれています。ノードドライバーは最小限の認証情報を使用し、パブリッシュやステージなどのノード固有の CSI 操作を実装します。

CSI ドライバーのデーモンセットは、OpenShift Container Platform が CSI ドライバーによって提供されるストレージをノードにマウントして、永続ボリューム (PV) としてユーザーワークロード (Pod) で使用できるように、全ノードで Pod を実行します。CSI ドライバーがインストールされた Pod には、以下のコンテナーが含まれます。

CSI ドライバーレジストラー
CSI ドライバーレジストラーは、ノード上で実行中の openshift-node サービスに CSI ドライバーを登録します。このノードで実行中の openshift-node プロセスは、ノードで利用可能な UNIX Domain Socket を使用して CSI ドライバーに直接接続します。
CSI ドライバー
ノードにデプロイされた CSI ドライバーには、ストレージバックエンドへの認証情報をできる限り少なく指定する必要があります。OpenShift Container Platform は、NodePublish/NodeUnpublish および NodeStage/NodeUnstage (実装されている場合) などの CSI 呼び出しのノードプラグインセットのみを使用します。

6.1.2. OpenShift Container Platform でサポートされる CSI ドライバー

OpenShift Container Platform はデフォルトで複数の CSI ドライバーをインストールし、サポートされているバックエンドのドライバー Operator、ドライバー、およびストレージクラスを自動的にデプロイします。デフォルトドライバーは、ツリー内プラグイン以外の拡張機能を提供します。AWS EFS や GCP Filestore などの一部のドライバーは、手動でインストールする必要があります。

これらのサポートされるストレージアセットにマウントする CSI でプロビジョニングされた永続ボリュームを作成するには、OpenShift Container Platform は必要な CSI Driver Operator、CSI ドライバー、および必要なストレージクラスをインストールします。Operator およびドライバーのデフォルト namespace の詳細は、特定の CSI Driver Operator のドキュメントを参照してください。

重要

AWS EFS CSI ドライバーはデフォルトではインストールされないため、手動でインストールする必要があります。AWS EFS CSI ドライバーのインストール手順は、「AWS Elastic File Service CSI Driver Operator のセットアップ」を参照してください。

次の表では、OpenShift Container Platform とともにインストールされ、OpenShift Container Platform でサポートされている CSI ドライバーと、ボリュームのスナップショットやサイズ変更など、ドライバーでサポートされている CSI 機能を説明します。

重要

CSI ドライバーが次の表に記載されていない場合は、CSI ストレージベンダーが提供するインストール手順に従って、サポートされている CSI 機能を使用する必要があります。

サードパーティーによって認定された CSI ドライバーのリストは、関連情報 の Red Hat エコシステムポータル を参照してください。

表6.1 OpenShift Container Platform でサポートされる CSI ドライバーおよび機能
CSI ドライバーCSI ボリュームスナップショットCSI ボリュームグループスナップショット [1]CSI のクローン作成CSI のサイズ変更インラインのエフェメラルボリュームユーザー名前空間

AWS EBS

✅

  

✅

 

✅

AWS EFS

      

Google Compute Platform (GCP) persistent disk (PD)

✅

 

✅[2]

✅

 

✅

GCP Filestore

✅

  

✅

  

IBM Power® 仮想サーバーブロック

   

✅

 

✅

IBM Cloud® Block

✅[3]

  

✅[3]

 

✅

LVM Storage

✅

 

✅

✅

 

✅

Microsoft Azure Disk

✅

 

✅

✅

 

✅

Microsoft Azure Stack Hub

✅

 

✅

✅

 

✅

Microsoft Azure File

✅

 

✅

✅

✅

 

OpenStack Cinder

✅

 

✅

✅

 

✅

OpenShift Data Foundation

✅

✅

✅

✅

 

✅ [4]

OpenStack Manila

✅

  

✅

  

CIFS/SMB

  

✅

   

VMware vSphere

✅[5]

  

✅[6]

 

✅ [7]

1.

重要

CSI ボリュームグループスナップショットは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

2.

  • ストレージプールを使用する hyperdisk-balanced ディスクでは、クローン作成はサポートされていません。

3.

  • オフラインスナップショットまたはサイズ変更はサポートされていません。ボリュームは、実行中の Pod にアタッチする必要があります。

4.

  • RBD はユーザー名前空間をサポートしていますが、CephFS はサポートしていません。

5.

  • vCenter Server と ESXi の両方において、VMware vSphere バージョン 8.0 Update 1 以降、または VMware vSphere Foundation (VVF) 9、あるいは VMware Cloud Foundation (VCF) 9 が必要です。
  • ファイル共有ボリュームはサポートされません。

6.

  • オンライン拡張は、VMware vSphere バージョン 8.0 Update 1 以降、または VVF 9、あるいは VCF 9 でサポートされています。

7.

  • vSAN ファイルサービスなどのファイル永続ボリューム (PV) は、ユーザー名前空間をサポートしていません。

6.1.3. 動的プロビジョニング

動的プロビジョニングは、ストレージクラス設定からオンデマンドで永続ボリュームを作成します。Container Storage Interface (CSI) ドライバーは、動作を決定する特定のパラメーターをサポートします。デフォルトのストレージクラスを作成して、クラスを指定せずにクレームのプロビジョニングを有効にします。

永続ストレージの動的プロビジョニングは、CSI ドライバーおよび基礎となるストレージバックエンドの機能により異なります。CSI ドライバーのプロバイダーは、OpenShift Container Platform でのストレージクラスの作成方法および設定に利用でじるパラメーターに関する文書を作成する必要があります。

作成されたストレージクラスは、動的プロビジョニングを有効にするために設定できます。

手順

  • デフォルトのストレージクラスを作成します。これにより、特殊なストレージクラスを必要としないすべての PVC がインストールされた CSI ドライバーでプロビジョニングされます。

    # oc create -f - << EOF
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: <storage-class>
      annotations:
        storageclass.kubernetes.io/is-default-class: "true"
    provisioner: <provisioner-name>
    parameters:
      csi.storage.k8s.io/fstype: xfs
    EOF
  • metadata.name: 作成されるストレージクラスの名前を指定します。
  • provisioner: インストールされている CSI ドライバーの名前を指定します。
  • parameters.csi.storage.k8s.io/fstype: vSphere CSI ドライバーは、XFS や Ext4 など、基盤となる Red Hat Core オペレーティングシステムリリースでサポートされているすべてのファイルシステムをサポートします。

6.1.4. CSI ドライバーの使用例

Container Storage Interface (CSI) 永続ストレージを使用して MySQL アプリケーションをデプロイし、動的ボリュームプロビジョニングをデモンストレーションします。この例では、CSI ドライバーが手動で介入することなく、永続ボリューム要求を自動的に作成し、動的にプロビジョニングされたボリュームにバインドする方法を示します。

前提条件

  • CSI ドライバーがデプロイされている。
  • 動的プロビジョニング用にストレージクラスが作成されている。

手順

  • MySQL テンプレートを作成します。

    # oc new-app mysql-persistent

    出力例

    --> Deploying template "openshift/mysql-persistent" to project default
    ...

    # oc get pvc

    出力例

    NAME           STATUS         VOLUME                                   CAPACITY ACCESS MODES   STORAGECLASS   AGE
    mysql          Bound          kubernetes-dynamic-pv-3271ffcb4e1811e8   1Gi      RWO            gp3-csi        3s

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

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

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

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

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

Legal Notice

Theme

© 2026 Red Hat
トップに戻る