Amazon EKS
ユーザーガイド

Amazon EBS CSI ドライバー

Amazon EBS コンテナストレージインターフェイス (CSI) ドライバーは、Amazon EKS クラスターが永続的ボリュームの Amazon EBS ボリュームのライフサイクルを管理できるようにする CSI インターフェイスを提供します。

このトピックでは、Amazon EBS CSI ドライバーを Amazon EKS クラスターにデプロイし、動作することを確認する方法を示します。ドライバーのバージョン v 0.4.0 を使用することをお勧めします。

注記

このドライバーは、Kubernetes バージョン 1.14 以降の Amazon EKS クラスターでのみサポートされています。Amazon EBS CSI ドライバーのアルファ機能は、Amazon EKS クラスターではサポートされていません。

使用可能なパラメータの詳細と、ドライバーの機能を示す完全な例については、GitHub の Amazon EBS コンテナストレージインターフェイス (CSI) ドライバープロジェクトを参照してください。

Amazon EBS CSI ドライバーを Amazon EKS クラスターにデプロイするには

  1. ワーカーノードインスタンスプロファイルに対して、Amazon_EBS_CSI_Driver という IAM ポリシーを作成し、Amazon EBS CSI ドライバーがユーザーに代わって AWS API を呼び出せるようにします。次の AWS CLI コマンドを使用して、AWS アカウントで IAM ポリシーを作成します。GitHub でポリシードキュメントを表示することもできます。

    1. GitHub からポリシードキュメントをダウンロードします。

      curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/v0.4.0/docs/example-iam-policy.json
    2. ポリシーを作成します。

      aws iam create-policy --policy-name Amazon_EBS_CSI_Driver \ --policy-document file://example-iam-policy.json

    返されるポリシー ARN を書き留めておきます。

  2. ワーカーノード用の IAM ロール名を取得します。次のコマンドを使用して、aws-auth configmap を出力します。

    kubectl -n kube-system describe configmap aws-auth

    出力:

    Name: aws-auth Namespace: kube-system Labels: <none> Annotations: <none> Data ==== mapRoles: ---- - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::111122223333:role/eksctl-alb-nodegroup-ng-b1f603c5-NodeInstanceRole-GKNS581EASPU username: system:node:{{EC2PrivateDNSName}} Events: <none>

    system:nodes グループが割り当てられている rolearn 値のロール名を記録します。前の出力例では、ロール名は eksctl-alb-Node group-ng-b1f603c5-NodeInstanceRole-GKNS581EASPU になります。クラスターの各ノードグループに 1 つの値が必要です。

  3. 次のコマンドを使用して、前に識別した各ワーカーノードの IAM ロールに、新しい Amazon_EBS_CSI_Driver IAM ポリシーをアタッチします。赤いテキストは、自分の AWS アカウント番号とワーカーノードの IAM ロール名に置き換えます。

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/Amazon_EBS_CSI_Driver \ --role-name eksctl-alb-nodegroup-ng-b1f603c5-NodeInstanceRole-GKNS581EASPU
  4. 次のコマンドを使用して Amazon EBS CSI ドライバーをデプロイします。

    注記

    このコマンドには kubectl のバージョン 1.14 以降が必要です。kubectl のバージョンは、以下のコマンドを使用して確認できます。kubectl バージョンをインストールまたはアップグレードするには、「kubectl のインストール」を参照してください。

    kubectl version --client --short
    kubectl apply -k "github.com/kubernetes-sigs/aws-ebs-csi-driver/deploy/kubernetes/overlays/stable/?ref=master"

サンプルアプリケーションをデプロイし、CSI ドライバーが動作していることを確認するには

この手順では、Amazon EBS コンテナストレージインターフェイス (CSI) ドライバー GitHub リポジトリの 動的ボリュームプロビジョニングの例を使用して、動的にプロビジョニングされた Amazon EBS ボリュームを使用します。

  1. Amazon EBS コンテナストレージインターフェイス (CSI) ドライバー GitHub リポジトリをローカルシステムにクローンします。

    git clone https://github.com/kubernetes-sigs/aws-ebs-csi-driver.git
  2. dynamic-provisioning サンプルディレクトリに移動します。

    cd aws-ebs-csi-driver/examples/kubernetes/dynamic-provisioning/
  3. specs ディレクトリから、ebs-sc ストレージクラス、ebs-claim 永続ボリュームクレーム、および app サンプルアプリケーションをデプロイします。

    kubectl apply -f specs/
  4. ebs-sc ストレージクラスについて説明します。

    kubectl describe storageclass ebs-sc

    出力:

    Name: ebs-sc IsDefaultClass: No Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{},"name":"ebs-sc"},"provisioner":"ebs.csi.aws.com","volumeBindingMode":"WaitForFirstConsumer"} Provisioner: ebs.csi.aws.com Parameters: <none> AllowVolumeExpansion: <unset> MountOptions: <none> ReclaimPolicy: Delete VolumeBindingMode: WaitForFirstConsumer Events: <none>

    このストレージクラスは WaitForFirstConsumer ボリュームバインドモードを使用していることに注意してください。つまり、ポッドが永続的ボリュームのクレームを行うまで、ボリュームは動的にプロビジョニングされません。詳細については、Kubernetes ドキュメントの「ボリュームバインドモード」を参照してください。

  5. デフォルトの名前空間のポッドを監視し、app ポッドが準備されるまで待ちます。

    kubectl get pods --watch
  6. デフォルトの名前空間の永続的ボリュームを一覧表示します。default/ebs-claim クレームがある永続的なボリュームを探します。

    kubectl get pv

    出力:

    NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-37717cd6-d0dc-11e9-b17f-06fad4858a5a 4Gi RWO Delete Bound default/ebs-claim ebs-sc 30s
  7. 永続的ボリュームの詳細を表示します。

    kubectl describe pv pvc-37717cd6-d0dc-11e9-b17f-06fad4858a5a

    出力:

    Name: pvc-37717cd6-d0dc-11e9-b17f-06fad4858a5a Labels: <none> Annotations: pv.kubernetes.io/provisioned-by: ebs.csi.aws.com Finalizers: [kubernetes.io/pv-protection external-attacher/ebs-csi-aws-com] StorageClass: ebs-sc Status: Bound Claim: default/ebs-claim Reclaim Policy: Delete Access Modes: RWO VolumeMode: Filesystem Capacity: 4Gi Node Affinity: Required Terms: Term 0: topology.ebs.csi.aws.com/zone in [us-west-2a] Message: Source: Type: CSI (a Container Storage Interface (CSI) volume source) Driver: ebs.csi.aws.com VolumeHandle: vol-0d651e157c6d93445 ReadOnly: false VolumeAttributes: storage.kubernetes.io/csiProvisionerIdentity=1567792483192-8081-ebs.csi.aws.com Events: <none>

    Amazon EBS ボリューム ID は VolumeHandle として表示されます。

  8. ポッドがボリュームにデータを正常に書き込んでいることを確認します。

    kubectl exec -it app cat /data/out.txt

    出力:

    Fri Sep 6 19:26:53 UTC 2019 Fri Sep 6 19:26:58 UTC 2019 Fri Sep 6 19:27:03 UTC 2019 Fri Sep 6 19:27:08 UTC 2019 Fri Sep 6 19:27:13 UTC 2019 Fri Sep 6 19:27:18 UTC 2019
  9. 実験が終了したら、このサンプルアプリケーションのリソースを削除してクリーンアップします。

    kubectl delete -f specs/