Amazon EBS CSI ドライバー - Amazon EKS

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

Amazon EBS CSI ドライバー

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

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

注記

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

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

Prerequisites

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

  1. CSI ドライバーのサービスアカウントがユーザーに代わって IAM APIs を呼び出すことを許可する AWS ポリシーを作成します。GitHub でポリシードキュメントを表示することもできます。

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

      curl -o example-iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/v0.9.0/docs/example-iam-policy.json
    2. ポリシーを作成します。別の名前AmazonEKS_EBS_CSI_Driver_Policyに変更することもできますが、変更する場合は、後のステップでも変更してください。

      aws iam create-policy --policy-name AmazonEKS_EBS_CSI_Driver_Policy \ --policy-document file://example-iam-policy.json
  2. IAM ロールを作成して、IAM ポリシーをアタッチします。

    1. クラスターの OIDC プロバイダー URL を表示します。<cluster_name> ( を含む<>) をクラスター名に置き換えます。コマンドからの出力が の場合はNone、「前提条件」を参照してください。

      aws eks describe-cluster --name <cluster_name> --query "cluster.identity.oidc.issuer" --output text

      出力

      https://oidc.eks.us-west-2.amazonaws.com/id/XXXXXXXXXX45D83924220DC4815XXXXX
    2. IAM ロールを作成し、

      1. 次の内容を という名前のファイルtrust-policy.jsonにコピーします。<AWS_ACCOUNT_ID> ( を含む<>) を アカウント ID、 <REGION> リージョン、および前のステップで返された<XXXXXXXXXX45D83924220DC4815XXXXX>値に置き換えます。

        { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<AWS_ACCOUNT_ID>:oidc-provider/oidc.eks.<REGION>.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<REGION>.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa" } } } ] }
      2. ロールを作成し、別の名前AmazonEKS_EBS_CSI_DriverRoleに変更することもできますが、変更する場合は、後のステップでも変更してください。

        aws iam create-role \ --role-name AmazonEKS_EBS_CSI_DriverRole \ --assume-role-policy-document file://"trust-policy.json"
    3. IAM ポリシーをロールにアタッチします。<AWS_ACCOUNT_ID> ( を含む<>) を アカウント ID に置き換えます。

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::<AWS_ACCOUNT_ID>:policy/AmazonEKS_EBS_CSI_Driver_Policy \ --role-name AmazonEKS_EBS_CSI_DriverRole
  3. 次のいずれかのオプションを使用して、ドライバーをデプロイします。

    • ドライバーをデプロイし、作成するすべてのAmazon EBSボリュームに、 で指定したタグが付けられるようにします。

      1. Amazon EBS Container Storage Interface (CSI) ドライバー GitHub リポジトリのクローンをコンピュータに作成します。

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

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

        ... 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
    • ドライバーをデプロイし、作成したAmazon EBSボリュームに、指定したタグが付けられないようにします。クラスターがあるリージョンに対応するコマンドを使用します。

      注記

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

      kubectl version --client --short
      • 注記

        yaml ファイルを手動で表示またはダウンロードするには、aws-ebs-csi-driver Github で確認できます。

        リージョンを除くすべての中国リージョン。

        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"
  4. 前に作成した ebs-csi-controller-sa ロールの ARN を使用して IAM Kubernetes サービスアカウントに注釈を付けます。<AWS_ACCOUNT_ID> ( を含む<>) を アカウント ID に置き換えます。

    kubectl annotate serviceaccount ebs-csi-controller-sa \ -n kube-system \ eks.amazonaws.com/role-arn=arn:aws:iam::<AWS_ACCOUNT_ID>:role/AmazonEKS_EBS_CSI_DriverRole
  5. ドライバーポッドを削除します。これらは、ロールに割り当てられたIAMポリシーのIAMアクセス許可を使用して自動的に再デプロイされます。

    kubectl delete pods \ -n kube-system \ -l=app=ebs-csi-controller

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

この手順ではhttps://github.com/kubernetes-sigs/aws-ebs-csi-driver/tree/master/examples/kubernetes/dynamic-provisioning、Container Storage Interface (CSI) ドライバー GitHub リポジトリの Amazon EBSDynamic volume provisioning の例を使用して、動的にプロビジョニングされた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. ebs-sc ディレクトリから、ebs-claim ストレージクラス、app 永続ボリュームクレーム、および specs サンプルアプリケーションをデプロイします。

    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、ポッドのステータスが になるまで待ちますRunning

    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. 永続ボリュームを記述し、 <pvc-37717cd6-d0dc-11e9-b17f-06fad4858a5a> ( を含む<>) を前のステップの出力の値に置き換えます。

    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-2d] 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 Jan 8 15:34:20 UTC 2021 Fri Jan 8 15:34:25 UTC 2021 Fri Jan 8 15:34:30 UTC 2021 Fri Jan 8 15:34:35 UTC 2021 Fri Jan 8 15:34:40 UTC 2021 Fri Jan 8 15:34:45 UTC 2021 ...
  9. 実験が終了したら、このサンプルアプリケーションのリソースを削除してクリーンアップします。

    kubectl delete -f specs/