Container Storage Interface ドライバのインストール

このページでは、Anthos clusters on VMware(GKE On-Prem)に Container Storage Interface(CSI)ストレージ ドライバをインストールする方法について説明します。

概要

CSI は Kubernetes がコンテナ化されたワークロードに任意のストレージ システムを公開できるオープン標準 API です。CSI 互換のストレージ ドライバを Anthos clusters on VMware にデプロイすると、クラスタは vSphere ストレージを経由せずに、互換性のあるストレージ デバイスに直接接続できます。

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

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

始める前に

Anthos clusters on VMware では、デフォルトで組み込みの vsphereVolume ドライバを介して vSphere データストアを使用します。また、NFS と iSCSI 用の組み込みドライバでは、既存のボリュームをワークロードに接続してマウントできます。

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

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

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

CSI ドライバをインストールしたら、クラスタの Anthos clusters on VMware のバージョンに応じて、次のいずれかのコマンドを実行し、インストールを確認します。

1.2.0-gke.5

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

1.1.0-gke.6

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

CSI ドライバを使用する

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

  1. provisioner フィールドでドライバを参照する Kubernetes 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(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: k8s.gcr.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: fast # This field references the existing StorageClass

次のステップ