Container Storage Interface ドライバをインストールする

このページでは、Container Storage Interface(CSI)ストレージ ドライバをベアメタル版 GKE クラスタにインストールする方法について説明します。

概要

Container Storage Interface(CSI)は、Kubernetes がコンテナ化されたワークロードに任意のストレージ システムを公開でき、多くの大手ストレージ ベンダーがサポートするオープン スタンダード API です。

Kubernetes の Volume は、ベンダー固有のストレージ ドライバによって管理されており、これまでは Kubernetes バイナリにコンパイルされてきました。以前は、Kubernetes に含まれていないストレージ ドライバを使用できませんでした。CSI ドライバをインストールすると、Kubernetes でネイティブにサポートされないストレージ システムがサポートされるようになります。また、CSI を使用すると、スナップショットやサイズ変更などの最新のストレージ機能を使用できます。

CSI ドライバを使用するには、Kubernetes StorageClass を作成する必要があります。StorageClass のプロビジョナーとして CSI ドライバを設定します。次に、StorageClass をクラスタのデフォルトとして設定するか、StorageClass を使用するようにワークロードを構成します(StatefulSet の例)。

ベンダーの CSI ドライバをインストールする

ストレージ ベンダーは独自の CSI ドライバを開発し、インストール手順を示す義務を負っています。単純なケースでのインストールは、マニフェストをクラスタにデプロイするだけです。CSI ドキュメントの CSI ドライバの一覧をご覧ください。

本番環境のストレージについては、GDCV Ready ストレージ パートナーから CSI ドライバをインストールすることをおすすめします。

ドライバのインストールを確認する

CSI ドライバをインストールした後、次のコマンドを実行してインストールを確認できます。

kubectl get csinodes -o jsonpath='{range .items[*]} \
    {.metadata.name}{": "} {range .spec.drivers[*]} {.name}{"\n"} {end}{end}'

CSI ドライバを使用する

CSI ドライバを使用する手順は次のとおりです。

  1. provisioner フィールドでドライバを参照する Kubernetes StorageClass を作成します。

  2. 次のいずれか方法でストレージをプロビジョニングできます。

CSI ドライバによりサポートされる StorageClasses に関する考慮事項

StorageClass を作成するときは、次の点を考慮します。

  • CSI ドライバのドキュメントには、StorageClass に指定するドライバ固有のパラメータ(プロビジョナー名など)を含めます。
  • StorageClass は、関連する特定のドライバやアプライアンスの名前ではなく、プロパティに基づく名前を付ける必要があります。StorageClass にプロパティに基づく名前を付けると、複数のクラスタや環境で同じ名前の StorageClass を作成できます。これにより、アプリケーションは同じプロパティのストレージを複数のクラスタで取得できるようになります。

例: StatefulSet 内の StorageClass の参照

次の例では、StorageClass で CSI ドライバを定義してから、StatefulSet ワークロードで StorageClass を参照する方法をモデル化します。ドライバがすでにクラスタにインストールされていることを前提としています。

次の簡単な StorageClass premium-rwo では、架空の CSI ドライバ csi.example.com をプロビジョナーとして使用します。

fast-sc.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: premium-rwo
provisioner: csi.example.com # CSI driver
parameters: # You provide vendor-specific parameters to this specification
  type: example-parameter # Be sure to follow the vendor's instructions
  datastore: my-datastore
reclaimPolicy: Retain
allowVolumeExpansion: true

StatefulSet の volumeClaimTemplates 仕様で StorageClass を参照します。

StatefulSet の volumeClaimTemplates 仕様で StorageClass を参照すると、Kubernetes は PersistentVolume(PV)を使用して安定したストレージを提供します。Kubernetes は、StorageClass で定義されたプロビジョナーを呼び出して新しいストレージ Volume を作成します。この場合、Kubernetes は架空の csi.example.com プロバイダを呼び出します。このプロバイダが、プロバイダの API を呼び出して Volume を作成します。Volume がプロビジョニングされると、Kubernetes は自動的に PV を作成してストレージを表します。

StorageClass を参照する単純な StatefulSet は次のとおりです。

statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: registry.k8s.io/nginx-slim:0.8
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates: # This is the specification in which you reference the StorageClass
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi
      storageClassName: premium-rwo # This field references the existing StorageClass

次のステップ