Amazon EBS CSI ドライバー - Amazon EKS

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

Amazon EBS CSI ドライバー

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

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

注記

でドライバーはサポートされていません。FargateAmazon EBS CSI ドライバーのアルファ機能は、Amazon EKS クラスターではサポートされていません。このドライバーはベータリリースです。本番稼働用に Amazon EKS によって十分にテストされ、サポートされています。ドライバーのサポートは削除されませんが、詳細は変更される可能性があります。ドライバーのスキーマまたはセマンティクスが変更された場合は、次のバージョンへの移行手順が提供されます。

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

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

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

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

      curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/v0.8.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-my-cluster-my-nodegroup-NodeInstanceRole-XXXXXXXXXXXX username: system:node:{{EC2PrivateDNSName}}

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

  3. 以下のコマンドを使用して、先ほど特定した各ノードの Amazon_EBS_CSI_Driver ロールに新しい IAM ポリシーをアタッチします。赤いテキストは、自分の IAM アカウント番号とノード AWS ロール名に置き換えてください。IAM

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::<111122223333>:policy/Amazon_EBS_CSI_Driver \ --role-name <eksctl-my-cluster-my-nodegroup-NodeInstanceRole-XXXXXXXXXXXX>
  4. ドライバーが、同じタグを使用して Amazon EBS CSI ドライバーが作成するすべての Amazon EBS ボリュームにタグ付けする場合は、以下の手順を実行します。ドライバーが作成するボリュームにドライバーがタグ付けしない場合は、ステップ 5 に進みます。

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

      git clone https://github.com/kubernetes-sigs/aws-ebs-csi-driver.git
    2. 例のフォルダに移動します。base

      cd aws-ebs-csi-driver/deploy/kubernetes/base/
    3. controller.yaml ファイルを編集します。次のテキストを持つファイルのセクションを見つけ、--extra-tags を追加します。次のテキストは、既存および追加されたテキストを含むファイルのセクションを示しています。この例では、コントローラーによって作成されるすべてのボリュームに department タグと environment タグが追加されます。

      ... containers: - name: ebs-plugin image: amazon/aws-ebs-csi-driver:latest imagePullPolicy: IfNotPresent args: # - {all,controller,node} # specify the driver mode - --endpoint=$(CSI_ENDPOINT) - --logtostderr - --v=5 - --extra-tags=department=accounting,environment=dev ...
    4. 変更したマニフェストをクラスターに適用します。

      kubectl apply -k ../base
  5. ステップ 4 を完了した場合は、このステップをスキップします。クラスターがあるリージョンに対応するコマンドを使用して、Amazon EBS CSI ドライバーをデプロイします。

    注記

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

    kubectl version --client --short
    • リージョン以外のすべてのリージョン。中国

      kubectl apply -k "github.com/kubernetes-sigs/aws-ebs-csi-driver/deploy/kubernetes/overlays/stable/?ref=master"
    • 北京および寧夏 中国リージョン。

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

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

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

  1. コンテナストレージインターフェイス (CSI) ドライバー Amazon EBS リポジトリをローカルシステムにクローンします。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 [<regiona>] 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

    出力:

    Wed Jul 8 13:52:09 UTC 2020 Wed Jul 8 13:52:14 UTC 2020 Wed Jul 8 13:52:19 UTC 2020 Wed Jul 8 13:52:24 UTC 2020 Wed Jul 8 13:52:29 UTC 2020 Wed Jul 8 13:52:34 UTC 2020
  9. 実験が終了したら、このサンプルアプリケーションのリソースを削除してクリーンアップします。

    kubectl delete -f specs/