Amazon Elastic File System 容器存储接口 (CSI) 驱动程序为容器编排器实施 CSI 规范,以管理 Amazon EFS 文件系统的生命周期。
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 驱动程序支持动态预配置和静态预配置。目前,动态配置为每个 PV 创建一个接入点。这意味着必须首先在 AWS 上手动创建 Amazon EFS 文件系统,并且应将其作为存储类参数的输入提供。对于静态预配置,需要首先在 AWS 上手动创建 Amazon EFS 文件系统。之后,可以使用驱动程序将其作为卷安装在容器内。
实现了以下 CSI 接口:
参数 | 价值观 | 默认 | 选修的 | 描述 |
---|---|---|---|---|
配置模式 | EFS-AP | 错误的 | efs 配置的卷类型。目前,支持接入点。 | |
文件系统ID | 错误的 | 在其下创建访问点的文件系统。 | ||
目录权限 | 错误的 | 创建接入点根目录的目录权限。 | ||
uid | 真的 | 用于创建接入点根目录的 POSIX 用户 ID。 | ||
吉德 | 真的 | 用于创建接入点根目录的 POSIX 组 ID。 | ||
gidRangeStart | 50000 | 真的 | 用于创建接入点根目录的 POSIX 组 ID 的起始范围。如果设置了 uid/gid,则不使用。 | |
gidRangeEnd | 700万 | 真的 | POSIX 组 ID 的结束范围。如果设置了 uid/gid,则不使用。 | |
基本路径 | 真的 | 创建动态配置的接入点的路径。如果不指定该参数,则在文件系统的根目录下创建访问点 | ||
子路径模式 | /${.PV.name} | 真的 | 用于构造子路径的模板,动态配置下创建的每个接入点都在该子路径下。可以由固定字符串和有限变量组成,类似于 nfs-subdir-external-provisioner 图表上的“subPathPattern”变量。支持.PVC.name 、 .PVC.namespace 和.PV.name | |
确保唯一目录 | 真的 | 真的 | 注意:仅当您确定这是您想要的行为时才将其设置为 false 。 在启用动态配置时使用,如果设置为 true,会将 UID 附加到 subPathPattern 中指定的模式,以确保访问点不会意外指向同一目录。 | |
阿兹 | ”” | 真的 | 用于跨账户挂载。存储类别参数下的az 是可选的。如果指定,与 az 关联的挂载目标将用于跨账户挂载。如果未指定,将选择随机挂载目标进行跨账户挂载 | |
重用接入点 | 错误的 | 真的 | 设置为 true 时,它会根据提供的 PVC 名称创建接入点客户端令牌。这样,如果使用相同的 PVC 名称和存储类配置,则可以从不同的集群复制 AccessPoint。 |
笔记
gidRangeStart
和gidRangeEnd
参数。仅当两者都被省略时,这些参数才是可选的。如果您指定其中一项,则另一项将成为强制性的。az
不应与 efs-utils 挂载选项az
混淆。 az
挂载选项用于跨 az 挂载或在与集群相同的 aws 账户内进行 efs 单区域文件系统挂载。如果您希望在挂载时将任何其他 mountOptions 传递给 Amazon EFS CSI 驱动程序,则可以通过持久卷或存储类对象传递它们,具体取决于使用的是静态还是动态预配置。以下是一些可以传递的 mountOptions 的示例:
使用 EFS CSI 驱动程序时,请注意noresvport
安装选项默认处于启用状态。这意味着客户端可以使用任何可用的源端口进行通信,而不仅仅是保留端口。
使用 Amazon EFS 的优点之一是它使用 TLS 提供传输加密支持。使用传输中加密,数据在通过网络传输到 Amazon EFS 服务期间将被加密。这为需要严格安全合规性的应用程序提供了额外的深度防御层。
默认情况下,在驱动程序的主分支版本中启用传输中加密。要禁用它并使用普通 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+ |
---|---|---|---|---|---|---|---|---|
主分支 | 遗传算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v2.1.x | 遗传算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v2.0.x | 遗传算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v1.7.x | 遗传算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v1.6.x | 遗传算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v1.5.x | 遗传算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v1.4.x | 遗传算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v1.3.x | 遗传算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v1.2.x | 遗传算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v1.1.x | 遗传算法 | 不 | 不 | 不 | 是的 | 是的 | 是的 | 是的 |
v1.0.x | 遗传算法 | 不 | 不 | 不 | 是的 | 是的 | 是的 | 是的 |
v0.3.0 | 贝塔 | 不 | 不 | 不 | 是的 | 是的 | 是的 | 是的 |
v0.2.0 | 贝塔 | 不 | 不 | 不 | 是的 | 是的 | 是的 | 是的 |
v0.1.0 | 阿尔法 | 是的 | 是的 | 是的 | 不 | 不 | 不 | 不 |
Amazon EFS CSI 驱动程序版本 | 图像 |
---|---|
主分支 | 亚马逊/aws-efs-csi-driver:master |
v2.1.0 | 亚马逊/aws-efs-csi-driver:v2.1.0 |
v2.0.9 | 亚马逊/aws-efs-csi-驱动程序:v2.0.9 |
v2.0.8 | 亚马逊/aws-efs-csi-driver:v2.0.8 |
v2.0.7 | 亚马逊/aws-efs-csi-driver:v2.0.7 |
v2.0.6 | 亚马逊/aws-efs-csi-driver:v2.0.6 |
v2.0.5 | 亚马逊/aws-efs-csi-driver:v2.0.5 |
v2.0.4 | 亚马逊/aws-efs-csi-driver:v2.0.4 |
v2.0.3 | 亚马逊/aws-efs-csi-driver:v2.0.3 |
v2.0.2 | 亚马逊/aws-efs-csi-driver:v2.0.2 |
v2.0.1 | 亚马逊/aws-efs-csi-driver:v2.0.1 |
v2.0.0 | 亚马逊/aws-efs-csi-driver:v2.0.0 |
v1.7.7 | 亚马逊/aws-efs-csi-驱动程序:v1.7.7 |
v1.7.6 | 亚马逊/aws-efs-csi-驱动程序:v1.7.6 |
v1.7.5 | 亚马逊/aws-efs-csi-驱动程序:v1.7.5 |
v1.7.4 | 亚马逊/aws-efs-csi-驱动程序:v1.7.4 |
v1.7.3 | 亚马逊/aws-efs-csi-driver:v1.7.3 |
v1.7.2 | 亚马逊/aws-efs-csi-驱动程序:v1.7.2 |
v1.7.1 | 亚马逊/aws-efs-csi-driver:v1.7.1 |
v1.7.0 | 亚马逊/aws-efs-csi-driver:v1.7.0 |
v1.6.0 | 亚马逊/aws-efs-csi-driver:v1.6.0 |
v1.5.9 | 亚马逊/aws-efs-csi-驱动程序:v1.5.9 |
v1.5.8 | 亚马逊/aws-efs-csi-驱动程序:v1.5.8 |
v1.5.7 | 亚马逊/aws-efs-csi-驱动程序:v1.5.7 |
v1.5.6 | 亚马逊/aws-efs-csi-驱动程序:v1.5.6 |
v1.5.5 | 亚马逊/aws-efs-csi-驱动程序:v1.5.5 |
v1.5.4 | 亚马逊/aws-efs-csi-驱动程序:v1.5.4 |
v1.5.3 | 亚马逊/aws-efs-csi-driver:v1.5.3 |
v1.5.2 | 亚马逊/aws-efs-csi-驱动程序:v1.5.2 |
v1.5.1 | 亚马逊/aws-efs-csi-driver:v1.5.1 |
v1.5.0 | 亚马逊/aws-efs-csi-driver:v1.5.0 |
v1.4.9 | 亚马逊/aws-efs-csi-驱动程序:v1.4.9 |
v1.4.8 | 亚马逊/aws-efs-csi-驱动程序:v1.4.8 |
v1.4.7 | 亚马逊/aws-efs-csi-驱动程序:v1.4.7 |
v1.4.6 | 亚马逊/aws-efs-csi-driver:v1.4.6 |
v1.4.5 | 亚马逊/aws-efs-csi-驱动程序:v1.4.5 |
v1.4.4 | 亚马逊/aws-efs-csi-driver:v1.4.4 |
v1.4.3 | 亚马逊/aws-efs-csi-driver:v1.4.3 |
v1.4.2 | 亚马逊/aws-efs-csi-driver:v1.4.2 |
v1.4.1 | 亚马逊/aws-efs-csi-driver:v1.4.1 |
v1.4.0 | 亚马逊/aws-efs-csi-driver:v1.4.0 |
v1.3.8 | 亚马逊/aws-efs-csi-驱动程序:v1.3.8 |
v1.3.7 | 亚马逊/aws-efs-csi-驱动程序:v1.3.7 |
v1.3.6 | 亚马逊/aws-efs-csi-driver:v1.3.6 |
v1.3.5 | 亚马逊/aws-efs-csi-驱动程序:v1.3.5 |
v1.3.4 | 亚马逊/aws-efs-csi-driver:v1.3.4 |
v1.3.3 | 亚马逊/aws-efs-csi-driver:v1.3.3 |
v1.3.2 | 亚马逊/aws-efs-csi-driver:v1.3.2 |
v1.3.1 | 亚马逊/aws-efs-csi-driver:v1.3.1 |
v1.3.0 | 亚马逊/aws-efs-csi-driver:v1.3.0 |
v1.2.1 | 亚马逊/aws-efs-csi-driver:v1.2.1 |
v1.2.0 | 亚马逊/aws-efs-csi-driver:v1.2.0 |
v1.1.1 | 亚马逊/aws-efs-csi-driver:v1.1.1 |
v1.1.0 | 亚马逊/aws-efs-csi-driver:v1.1.0 |
v1.0.0 | 亚马逊/aws-efs-csi-driver:v1.0.0 |
v0.3.0 | 亚马逊/aws-efs-csi-driver:v0.3.0 |
v0.2.0 | 亚马逊/aws-efs-csi-driver:v0.2.0 |
v0.1.0 | 亚马逊/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
或更高版本支持 Arm64 架构,包括基于 Amazon EC2 Graviton 的实例。1.4.2
或更高版本支持使用 FIPS 来挂载文件系统。有关如何启用 FIPS 的更多信息,请参阅 Helm。节点启动时存在潜在的竞争条件(尤其是当节点首次加入集群时),依赖 EFS CSI 驱动程序的 Pod/进程可以在 EFS CSI 驱动程序启动并完全准备就绪之前对节点进行操作。为了解决这个问题,EFS CSI 驱动程序包含一项功能,可以在启动时自动删除节点中的污点。此功能是从 EFS CSI 驱动程序 v1.7.2 版本及其 Helm Chart v2.5.2 版本中引入的。用户可以在加入集群和/或启动时污染其节点,以防止其他 Pod 在 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 版本相同,也可以比集群的 Kubernetes 版本早或晚一个小版本。要安装或升级kubectl
,请参阅安装或更新kubectl
。笔记
在 AWS Fargate 上运行的 Pod 会自动挂载 Amazon EFS 文件系统,无需执行本页所述的手动驱动程序安装步骤。
该驱动程序需要 IAM 权限才能与 Amazon EFS 通信以代表用户管理卷。有多种方法可以授予驱动程序 IAM 权限:
AmazonEFSCSIDriverPolicy
策略添加到集群节点组的 IAM 角色中。有多种用于部署驱动程序的选项。以下是一些示例。
此过程需要 Helm V3 或更高版本。要安装或升级 Helm,请参阅将 Helm 与 Amazon EKS 结合使用。
使用 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
如果您没有对 Internet 的出站访问权限,请添加以下参数。
--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
(应在无法从 pod 网络访问 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 | 真的 | 流量指标的刷新周期(以分钟为单位)。 | |
交易量指标 FS 速率限制 | 5 | 真的 | 每个文件系统的卷度量例程速率限制器。 |
启用 vol-metrics-opt-in 参数会激活 inode 和磁盘使用数据的收集。此功能(特别是在文件系统较大的情况下)可能会由于文件系统信息的详细聚合而导致内存使用量增加。我们建议拥有大型文件系统的用户在使用此功能时考虑这一方面。
参数 | 价值观 | 默认 | 选修的 | 描述 |
---|---|---|---|---|
删除访问点根目录 | 错误的 | 真的 | 选择通过DeleteVolume 删除接入点根目录。默认情况下,DeleteVolume 将删除持久卷后面的接入点,删除接入点不会删除接入点根目录或其内容。 | |
标签 | 真的 | 空格分隔的键:值对将作为 Amazon EFS 资源的标签添加。例如,“--tags=名称:efs-tag-测试日期: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 中的 efs 策略 https://github.com/weaveworks/eksctl/blob/main/pkg/cfn/builder/statement.go */
依赖关系通过 go 模块进行管理。要构建项目,首先使用export GO111MODULE=on
打开 go mod,构建项目运行: make
要执行所有单元测试,请运行: make test
要提取日志并对驱动程序进行故障排除,请参阅故障排除/README.md。
该库根据 Apache 2.0 许可证获得许可。