Amazon Elastic File System Container Storage Interface (CSI) ドライバーは、コンテナ オーケストレーターが Amazon EFS ファイル システムのライフサイクルを管理するための CSI 仕様を実装します。
Amazon EFS CSI ドライバー CSI 仕様バージョン | v0.3.0 | v1.1.0 | v1.2.0 |
---|---|---|---|
マスターブランチ | いいえ | いいえ | はい |
v2.xx | いいえ | いいえ | はい |
v1.xx | いいえ | いいえ | はい |
v0.3.0 | いいえ | はい | いいえ |
v0.2.0 | いいえ | はい | いいえ |
v0.1.0 | はい | いいえ | いいえ |
Amazon EFS CSI ドライバーは、動的プロビジョニングと静的プロビジョニングをサポートしています。現在、Dynamic Provisioning は PV ごとにアクセス ポイントを作成します。これは、Amazon EFS ファイル システムを最初に AWS 上で手動で作成し、ストレージ クラス パラメータへの入力として提供する必要があることを意味します。静的プロビジョニングの場合、最初に Amazon EFS ファイル システムを AWS 上で手動で作成する必要があります。その後、ドライバーを使用してボリュームとしてコンテナー内にマウントできます。
次の CSI インターフェイスが実装されています。
パラメータ | 価値観 | デフォルト | オプション | 説明 |
---|---|---|---|---|
プロビジョニングモード | efs-ap | 間違い | efs によってプロビジョニングされるボリュームのタイプ。現在、アクセス ポイントがサポートされています。 | |
ファイルシステムID | 間違い | アクセス ポイントが作成されるファイル システム。 | ||
ディレクトリパーマ | 間違い | Access Point のルート ディレクトリ作成のためのディレクトリ権限。 | ||
UID | 真実 | アクセス ポイントのルート ディレクトリの作成に適用される POSIX ユーザー ID。 | ||
ギド | 真実 | アクセス ポイントのルート ディレクトリの作成に適用される POSIX グループ ID。 | ||
gidRangeStart | 50000 | 真実 | アクセス ポイントのルート ディレクトリの作成に適用される POSIX グループ ID の開始範囲。 uid/gid が設定されている場合は使用されません。 | |
gidRangeEnd | 7000000 | 真実 | POSIX グループ ID の終了範囲。 uid/gid が設定されている場合は使用されません。 | |
ベースパス | 真実 | 動的プロビジョニング用のアクセス ポイントが作成されるパス。このパラメータが指定されていない場合、アクセス ポイントはファイル システムのルート ディレクトリの下に作成されます。 | ||
サブパスパターン | /${.PV.name} | 真実 | 動的プロビジョニングの下で各アクセス ポイントが作成されるサブパスを構築するために使用されるテンプレート。固定文字列と制限された変数で構成でき、nfs-subdir-external-provisioner チャートの「subPathPattern」変数に似ています。 .PVC.name 、 .PVC.namespace 、および.PV.name をサポート | |
固有のディレクトリを確保する | 真実 | 真実 | 注: これが希望する動作であると確信している場合にのみ、これを false に設定してください。 動的プロビジョニングが有効な場合に使用され、true に設定すると、 subPathPattern で指定されたパターンに UID が追加され、アクセス ポイントが誤って同じディレクトリを指すことがなくなります。 | |
az | 「」 | 真実 | クロスアカウントマウントに使用されます。ストレージ クラス パラメーターのaz オプションです。指定した場合、az に関連付けられたマウント ターゲットがクロスアカウント マウントに使用されます。指定しない場合、クロスアカウントマウント用にランダムなマウントターゲットが選択されます。 | |
アクセスポイントを再利用する | 間違い | 真実 | true に設定すると、指定された PVC 名からアクセス ポイントのクライアント トークンが作成されます。これにより、同じ PVC 名とストレージクラス構成が使用されている場合、AccessPoint を別のクラスターから複製できます。 |
注記
gidRangeStart
とgidRangeEnd
パラメータの両方が含まれている必要があります。これらのパラメータは、両方が省略された場合にのみオプションです。どちらかを指定すると、もう一方は必須になります。az
、efs-utils マウント オプションaz
と混同しないでください。 az
マウント オプションは、クラスターと同じ aws アカウント内でのクロス az マウントまたは efs 1 ゾーン ファイル システム マウントに使用されます。マウント中に他の mountOptions を Amazon EFS CSI ドライバーに渡す場合は、静的プロビジョニングが使用されるか動的プロビジョニングが使用されるかに応じて、永続ボリュームまたはストレージ クラス オブジェクトを通じて渡すことができます。以下は、渡すことができるいくつかの mountOptions の例です。
EFS CSI ドライバーを使用する場合は、 noresvport
マウント オプションがデフォルトで有効になっていることに注意してください。これは、クライアントが予約ポートだけでなく、通信に利用可能な任意の送信元ポートを使用できることを意味します。
Amazon EFS を使用する利点の 1 つは、TLS を使用した転送中の暗号化サポートを提供することです。転送中の暗号化を使用すると、データはネットワーク経由で Amazon EFS サービスに移行するときに暗号化されます。これにより、厳格なセキュリティ コンプライアンスを必要とするアプリケーションに多層防御の追加レイヤーが提供されます。
転送中の暗号化は、ドライバーの master ブランチ バージョンではデフォルトで有効になっています。これを無効にし、プレーン NFSv4 を使用してボリュームをマウントするには、永続ボリューム マニフェストでvolumeAttributes
フィールドencryptInTransit
を"false"
に設定します。マニフェストの例については、転送中の暗号化の例を参照してください。
注記
Kubernetes でこの機能を使用する場合は、Kubernetes バージョン 1.13 以降が必要です。
次のセクションは Kubernetes 固有のものです。 Kubernetes ユーザーの場合は、ドライバーの機能、インストール手順、および例についてこれを使用してください。
Amazon EFS CSI ドライバー Kubernetes バージョン | 成熟 | v1.11 | v1.12 | v1.13 | v1.14 | v1.15 | v1.16 | v1.17以降 |
---|---|---|---|---|---|---|---|---|
マスターブランチ | GA | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | はい |
v2.1.x | GA | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | はい |
v2.0.x | GA | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | はい |
v1.7.x | GA | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | はい |
v1.6.x | GA | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | はい |
v1.5.x | GA | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | はい |
v1.4.x | GA | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | はい |
v1.3.x | GA | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | はい |
v1.2.x | GA | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | はい |
v1.1.x | GA | いいえ | いいえ | いいえ | はい | はい | はい | はい |
v1.0.x | GA | いいえ | いいえ | いいえ | はい | はい | はい | はい |
v0.3.0 | ベータ | いいえ | いいえ | いいえ | はい | はい | はい | はい |
v0.2.0 | ベータ | いいえ | いいえ | いいえ | はい | はい | はい | はい |
v0.1.0 | アルファ | はい | はい | はい | いいえ | いいえ | いいえ | いいえ |
Amazon EFS CSI ドライバーのバージョン | 画像 |
---|---|
マスターブランチ | amazon/aws-efs-csi-driver:master |
v2.1.0 | amazon/aws-efs-csi-driver:v2.1.0 |
v2.0.9 | amazon/aws-efs-csi-driver:v2.0.9 |
v2.0.8 | amazon/aws-efs-csi-driver:v2.0.8 |
v2.0.7 | amazon/aws-efs-csi-driver:v2.0.7 |
v2.0.6 | amazon/aws-efs-csi-driver:v2.0.6 |
v2.0.5 | amazon/aws-efs-csi-driver:v2.0.5 |
v2.0.4 | amazon/aws-efs-csi-driver:v2.0.4 |
v2.0.3 | amazon/aws-efs-csi-driver:v2.0.3 |
v2.0.2 | amazon/aws-efs-csi-driver:v2.0.2 |
v2.0.1 | amazon/aws-efs-csi-driver:v2.0.1 |
v2.0.0 | amazon/aws-efs-csi-driver:v2.0.0 |
v1.7.7 | amazon/aws-efs-csi-driver:v1.7.7 |
v1.7.6 | amazon/aws-efs-csi-driver:v1.7.6 |
v1.7.5 | amazon/aws-efs-csi-driver:v1.7.5 |
v1.7.4 | amazon/aws-efs-csi-driver:v1.7.4 |
v1.7.3 | amazon/aws-efs-csi-driver:v1.7.3 |
v1.7.2 | amazon/aws-efs-csi-driver:v1.7.2 |
v1.7.1 | amazon/aws-efs-csi-driver:v1.7.1 |
v1.7.0 | amazon/aws-efs-csi-driver:v1.7.0 |
v1.6.0 | amazon/aws-efs-csi-driver:v1.6.0 |
v1.5.9 | amazon/aws-efs-csi-driver:v1.5.9 |
v1.5.8 | amazon/aws-efs-csi-driver:v1.5.8 |
v1.5.7 | amazon/aws-efs-csi-driver:v1.5.7 |
v1.5.6 | amazon/aws-efs-csi-driver:v1.5.6 |
v1.5.5 | amazon/aws-efs-csi-driver:v1.5.5 |
v1.5.4 | amazon/aws-efs-csi-driver:v1.5.4 |
v1.5.3 | amazon/aws-efs-csi-driver:v1.5.3 |
v1.5.2 | amazon/aws-efs-csi-driver:v1.5.2 |
v1.5.1 | amazon/aws-efs-csi-driver:v1.5.1 |
v1.5.0 | amazon/aws-efs-csi-driver:v1.5.0 |
v1.4.9 | amazon/aws-efs-csi-driver:v1.4.9 |
v1.4.8 | amazon/aws-efs-csi-driver:v1.4.8 |
v1.4.7 | amazon/aws-efs-csi-driver:v1.4.7 |
v1.4.6 | amazon/aws-efs-csi-driver:v1.4.6 |
v1.4.5 | amazon/aws-efs-csi-driver:v1.4.5 |
v1.4.4 | amazon/aws-efs-csi-driver:v1.4.4 |
v1.4.3 | amazon/aws-efs-csi-driver:v1.4.3 |
v1.4.2 | amazon/aws-efs-csi-driver:v1.4.2 |
v1.4.1 | amazon/aws-efs-csi-driver:v1.4.1 |
v1.4.0 | amazon/aws-efs-csi-driver:v1.4.0 |
v1.3.8 | amazon/aws-efs-csi-driver:v1.3.8 |
v1.3.7 | amazon/aws-efs-csi-driver:v1.3.7 |
v1.3.6 | amazon/aws-efs-csi-driver:v1.3.6 |
v1.3.5 | amazon/aws-efs-csi-driver:v1.3.5 |
v1.3.4 | amazon/aws-efs-csi-driver:v1.3.4 |
v1.3.3 | amazon/aws-efs-csi-driver:v1.3.3 |
v1.3.2 | amazon/aws-efs-csi-driver:v1.3.2 |
v1.3.1 | amazon/aws-efs-csi-driver:v1.3.1 |
v1.3.0 | amazon/aws-efs-csi-driver:v1.3.0 |
v1.2.1 | amazon/aws-efs-csi-driver:v1.2.1 |
v1.2.0 | amazon/aws-efs-csi-driver:v1.2.0 |
v1.1.1 | amazon/aws-efs-csi-driver:v1.1.1 |
v1.1.0 | amazon/aws-efs-csi-driver:v1.1.0 |
v1.0.0 | amazon/aws-efs-csi-driver:v1.0.0 |
v0.3.0 | amazon/aws-efs-csi-driver:v0.3.0 |
v0.2.0 | amazon/aws-efs-csi-driver:v0.2.0 |
v0.1.0 | amazon/aws-efs-csi-driver:v0.1.0 |
ドライバーのバージョン | ECR画像 |
---|---|
v2.1.0 | public.ecr.aws/efs-csi-driver/amazon/aws-efs-csi-driver:v2.1.0 |
注記
ここから、以前の efs-csi-driver バージョンのイメージを見つけることができます。
注記
Amazon EFS は柔軟なファイル システムであるため、実際にはファイル システムの容量を強制しません。永続ボリュームおよび永続ボリューム要求の実際のストレージ容量値は、ファイル システムの作成時に使用されません。ただし、ストレージ容量は Kubernetes の必須フィールドであるため、値を指定する必要があり、容量には任意の有効な値を使用できます。
考慮事項
1.2
以降のドライバーが必要です。サポートされている Amazon EKS クラスターのバージョンのドライバーのバージョン1.1
を使用して、永続ボリュームを静的にプロビジョニングできます。1.3.2
以降は、Amazon EC2 Graviton ベースのインスタンスを含む Arm64 アーキテクチャをサポートします。1.4.2
以降では、ファイル システムのマウントに FIPS の使用がサポートされています。 FIPS を有効にする方法の詳細については、「Helm」を参照してください。ノードの起動時 (特にノードが最初にクラスターに参加するとき) に競合状態が発生する可能性があり、EFS CSI ドライバーが起動して完全に準備が整う前に、EFS CSI ドライバーに依存するポッド/プロセスがノード上で動作する可能性があります。これに対処するために、EFS CSI ドライバーには、起動時にノードから汚染を自動的に削除する機能が含まれています。この機能は、EFS CSI ドライバーのバージョン v1.7.2 および Helm チャートのバージョン v2.5.2 から導入されました。ユーザーは、クラスターへの参加時や起動時にノードを汚染して、EFS CSI ドライバーの準備が整う前に他のポッドがノード上で実行されたりスケジュールされたりするのを防ぐことができます。
この機能はデフォルトで有効になっており、クラスター管理者はテイントefs.csi.aws.com/agent-not-ready:NoExecute
を使用する必要があります (どのような効果でも機能しますが、 NoExecute
をお勧めします)。たとえば、EKS 管理対象ノード グループは、自動的に汚染されたノードをサポートします。
前提条件
aws configure
によるクイック設定」を参照してください。 AWS CloudShell にインストールされている AWS CLI のバージョンは、最新バージョンよりも数バージョン古い場合もあります。更新するには、AWS CloudShell ユーザーガイドの「ホーム ディレクトリへの AWS CLI のインストール」を参照してください。kubectl
コマンドライン ツールは、デバイスまたは AWS CloudShell にインストールされます。バージョンは、クラスターの Kubernetes バージョンと同じか、それより 1 つ前のマイナー バージョンまたはそれよりも新しいマイナー バージョンにすることができます。 kubectl
をインストールまたはアップグレードするには、 kubectl
インストールまたは更新」を参照してください。注記
AWS Fargate で実行されているポッドは、このページで説明されている手動のドライバーのインストール手順を必要とせずに、Amazon EFS ファイル システムを自動的にマウントします。
ドライバーは、ユーザーに代わってボリュームを管理するために Amazon EFS と通信するための IAM アクセス許可を必要とします。ドライバーに IAM 権限を付与するには、いくつかの方法があります。
AmazonEFSCSIDriverPolicy
ポリシーをクラスターのノードグループの IAM ロールに追加する必要があります。ドライバーを展開するにはいくつかのオプションがあります。以下にいくつかの例を示します。
この手順には Helm V3 以降が必要です。 Helm をインストールまたはアップグレードするには、「Amazon EKS での Helm の使用」を参照してください。
Helm を使用してドライバーをインストールするには
Helm リポジトリを追加します。
helm repo add aws-efs-csi-driver https://kubernetes-sigs.github.io/aws-efs-csi-driver/
リポジトリを更新します。
helm repo update aws-efs-csi-driver
Helm チャートを使用してドライバーのリリースをインストールします。
helm upgrade --install aws-efs-csi-driver --namespace kube-system aws-efs-csi-driver/aws-efs-csi-driver
イメージ リポジトリを指定するには、次の引数を追加します。リポジトリ アドレスをクラスターのコンテナー イメージ アドレスに置き換えます。
--set image.repository=602401143452.dkr.ecr.region-code.amazonaws.com/eks/aws-efs-csi-driver
「Amazon EKS の IAM ポリシーとロールを作成する」に従ってサービス アカウントをすでに作成している場合は、次の引数を追加します。
--set controller.serviceAccount.create=false
--set controller.serviceAccount.name=efs-csi-controller-sa
インターネットへの送信アクセスがない場合は、次の引数を追加します。
--set sidecars.livenessProbe.image.repository=602401143452.dkr.ecr.region-code.amazonaws.com/eks/livenessprobe
--set sidecars.node-driver-registrar.image.repository=602401143452.dkr.ecr.region-code.amazonaws.com/eks/csi-node-driver-registrar
--set sidecars.csiProvisioner.image.repository=602401143452.dkr.ecr.region-code.amazonaws.com/eks/csi-provisioner
Amazon EFS CSI ドライバーがファイル システムのマウントに FIPS を使用するように強制するには、次の引数を追加します。
--set useFips=true
注記hostNetwork: true
(ポッド ネットワークから AWS メタデータにアクセスできない kubernetes インストールの仕様/デプロイの下に追加する必要があります。次のエラーNoCredentialProviders: no valid providers in chain
ませんを修正するには、このパラメータを追加する必要があります。)
マニフェスト付きのイメージをダウンロードする場合は、まず次の手順を試して、プライベート Amazon ECR レジストリから保護されたイメージをプルすることをお勧めします。
プライベート Amazon ECR レジストリに保存されているイメージを使用してドライバーをインストールするには
マニフェストをダウンロードします。 release-XX
目的のブランチに置き換えます。最新リリースのバージョンを使用することをお勧めします。アクティブなブランチのリストについては、「ブランチ」を参照してください。
kubectl kustomize
" github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/ecr/?ref=release-2.X " > private-ecr-driver.yaml
注記
IAM アクセス許可を追加しても解決できない問題が発生した場合は、代わりにマニフェスト (パブリック レジストリ) の手順を試してください。
次のコマンドで、 region-code
クラスターが存在する AWS リージョンに置き換えます。次に、変更したコマンドを実行して、ファイル内のus-west-2
AWS リージョンに置き換えます。
sed -i.bak -e ' s|us-west-2|region-code| ' private-ecr-driver.yaml
次のコマンドのaccount
、クラスターが存在する AWS リージョンの Amazon コンテナ イメージ レジストリのアカウントに置き換えてから、変更したコマンドを実行してファイル内の602401143452
置き換えます。
sed -i.bak -e ' s|602401143452|account| ' private-ecr-driver.yaml
「Amazon EKS の IAM ポリシーとロールを作成する」に従ってサービス アカウントをすでに作成している場合は、 private-ecr-driver.yaml
ファイルを編集します。 Kubernetes サービス アカウントを作成する次の行を削除します。
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/name: aws-efs-csi-driver
name: efs-csi-controller-sa
namespace: kube-system
---
マニフェストを適用します。
kubectl apply -f private-ecr-driver.yaml
状況によっては、プライベート Amazon ECR レジストリからプルするために必要な IAM アクセス許可を追加できない場合があります。このシナリオの一例は、IAM プリンシパルが他の人のアカウントでの認証を許可されていない場合です。これが真の場合、パブリック Amazon ECR レジストリを使用できます。
パブリック Amazon ECR レジストリに保存されているイメージを使用してドライバーをインストールするには
マニフェストをダウンロードします。 release-XX
目的のブランチに置き換えます。最新リリースのバージョンを使用することをお勧めします。アクティブなブランチのリストについては、「ブランチ」を参照してください。
kubectl kustomize
" github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-2.X " > public-ecr-driver.yaml
「IAM ポリシーとロールの作成」に従ってサービス アカウントをすでに作成している場合は、 public-ecr-driver.yaml
ファイルを編集します。 Kubernetes サービス アカウントを作成する次の行を削除します。
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/name: aws-efs-csi-driver
name: efs-csi-controller-sa
namespace: kube-system
---
マニフェストを適用します。
kubectl apply -f public-ecr-driver.yaml
ドライバーを展開した後、次のセクションに進むことができます。
パラメータ | 価値観 | デフォルト | オプション | 説明 |
---|---|---|---|---|
ボリュームメトリクスオプトイン | 間違い | 真実 | ボリュームメトリクスを発行するにはオプトインします。 | |
ボリュームメトリクスのリフレッシュ期間 | 240 | 真実 | ボリュームメトリクスの更新期間(分単位)。 | |
vol-metrics-fs-rate-limit | 5 | 真実 | ボリューム メトリクス ルーチンのファイル システムごとのレート リミッタ。 |
vol-metrics-opt-in パラメータを有効にすると、inode およびディスク使用量データの収集が有効になります。この機能は、特に大規模なファイル システムを使用するシナリオでは、ファイル システム情報が詳細に集約されるため、メモリ使用量が増加する可能性があります。大規模なファイル システムを使用するユーザーには、この機能を利用する際にこの点を考慮することをお勧めします。
パラメータ | 価値観 | デフォルト | オプション | 説明 |
---|---|---|---|---|
アクセスポイントのルートディレクトリの削除 | 間違い | 真実 | DeleteVolume によるアクセス ポイントのルート ディレクトリの削除をオプトインします。デフォルトでは、DeleteVolume は Persistent Volume の背後にあるアクセス ポイントを削除します。アクセス ポイントを削除しても、アクセス ポイントのルート ディレクトリまたはそのコンテンツは削除されません。 | |
タグ | 真実 | Amazon EFS リソースのタグとして追加されるスペース区切りのキーと値のペア。例: 「--tags=名前:efs-tag-test 日付:Jan24」 |
最新リリースバージョンにアップデートしたい場合:
kubectl apply -k " github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-2.0 "
特定のバージョンに更新する場合は、まずドライバー yaml ファイルをローカルでカスタマイズします。
kubectl kustomize " github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-2.0 " > driver.yaml
次に、yaml ファイル内のimage: amazon/aws-efs-csi-driver
参照しているすべての行を目的のバージョン (たとえば、 image: amazon/aws-efs-csi-driver:v2.1.0
) に更新し、ドライバー yaml をデプロイします。また:
kubectl apply -f driver.yaml
例に従う前に、次のことを行う必要があります。
elasticfilesystem:DescribeMountTargets
およびec2:DescribeAvailabilityZones
アクションを許可します。ここでポリシーの例を参照してください。 開始する前に、CSI 仕様および Kubernetes CSI 開発者ドキュメントを参照して、CSI ドライバーの基本を理解してください。
iam ポリシー ファイルを更新しようとしている場合は、weaveworks/eksctl https://github.com/weaveworks/eksctl/blob/main/pkg/cfn/builder/statement.go */ の efs ポリシーも更新してください。
依存関係は go モジュールを通じて管理されます。プロジェクトをビルドするには、まず、 export GO111MODULE=on
使用して go mod をオンにし、次のコマンドを実行してプロジェクトをmake
。
すべての単体テストを実行するには、 make test
を実行します。
ログを取得してドライバーのトラブルシューティングを行うには、troubleshooting/README.md を参照してください。
このライブラリは、Apache 2.0 ライセンスに基づいてライセンスされています。