CSI ドライバを手動でインストールする


このページでは、Google Kubernetes Engine(GKE)Standard クラスタに Container Storage Interface(CSI)ストレージ ドライバをインストールする方法について説明します。このページは、Compute Engine 永続ディスクの CSI ドライバを自動で使用する GKE Autopilot クラスタには対応していません。

Standard クラスタで Compute Engine 永続ディスクの CSI ドライバを使用している場合は、ドライバを自動でデプロイして管理上のオーバーヘッドを減らすことをおすすめします。

概要

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

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

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

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

CSI ドライバのインストールが済むと、クラスタの GKE バージョンに応じて、次のいずれかのコマンドを実行してインストールを確認できます。

1.14+

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

1.13.x

kubectl get nodes \
-o jsonpath='{.items[*].metadata.annotations.csi\.volume\.kubernetes\.io\/nodeid}'

CSI ドライバを使用する

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

  1. ドライバのインストールの一部として StorageClass が作成されていない場合は、provisioner フィールドでドライバを参照する Kubernetes StorageClass を作成します。一部の CSI ドライバでは、インストール時に StorageClass がデプロイされます。

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

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

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

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

例: StatefulSet 内の StorageClass の参照

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

この例では、premium-rwo という単純な StorageClass で、架空の 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 を使用して安定したストレージを提供します。Kubernetes は、StorageClass で定義されたプロビジョナーを呼び出して新しいストレージ Volume を作成します。この場合、Kubernetes は架空の csi.example.com プロバイダを呼び出します。このプロバイダが、プロバイダの API を呼び出して Volume を作成します。Volume がプロビジョニングされると、Kubernetes は自動的に PersistentVolume を作成してストレージを表します。

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

次のステップ