本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon EFS CSI 驱动程序
Container Storage Interface (CSI) 驱动程序 提供了一个 CSI 接口,允许 Amazon EFS 上运行的 Kubernetes 集群管理
本主题介绍了如何部署 Amazon EFS CSI 驱动程序到 Amazon EKS 集群,并验证它是否正常工作。
Amazon EFS 集群上不支持 Amazon EKS CSI 驱动程序的 Alpha 功能。
有关可用参数的详细说明以及演示驱动程序功能的完整示例,请参阅 GitHub 上的 Container Storage Interface (CSI) 驱动程序Amazon EFS项目。
将 Amazon EFS CSI 驱动程序部署到 Amazon EKS 集群
-
使用与集群所在的区域对应的命令部署 Amazon EFS CSI 驱动程序。如果您的集群包含节点(也可以包含 AWS Fargate Pod),请使用以下命令部署驱动程序。
-
中国区域以外的所有区域。
kubectl apply -k "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/ecr/?ref=release-1.0"
-
北京和宁夏 中国区域。
kubectl apply -k "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-1.0"
如果您的集群仅包含 Fargate Pod(无节点),请使用以下命令部署驱动程序。
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/deploy/kubernetes/base/csidriver.yaml
-
Amazon EFS 访问点
CSI 驱动程序支持 Amazon EFS 访问点Amazon EFS,这些访问点是
为 Amazon EFS 集群创建 Amazon EKS 文件系统
-
找到您 Amazon EKS 集群的 VPC ID。您可以在 Amazon EKS 控制台中查找此 ID,或者使用以下 AWS CLI 命令。将
<cluster_name>
替换为您自己的值(包括<>
)。aws eks describe-cluster --name <cluster_name> --query "cluster.resourcesVpcConfig.vpcId" --output text
输出:
vpc-<exampledb76d3e813>
-
查找您集群 VPC 的 CIDR 范围。您可以在 Amazon VPC 控制台中查找此信息,或者使用以下 AWS CLI 命令。
aws ec2 describe-vpcs --vpc-ids vpc-<exampledb76d3e813> --query "Vpcs[].CidrBlock" --output text
输出:
192.168.0.0/16
-
创建一个安全组,该安全组允许您 Amazon EFS 装载点的入站 NFS 流量。
-
打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/
。 -
在左侧导航面板中选择 Security Groups,然后选择 Create security group。
-
为您的安全组输入名称和描述,然后选择您的 Amazon EKS 集群使用的 VPC。
-
在 Inbound rules (入站规则) 下,选择 Add rule (添加规则)。
-
在 Type (类型) 下,选择 NFS。
-
在 Source (源) 下,选择 Custom (自定义),然后粘贴您在上一步中获取的 VPC CIDR 范围。
-
选择创建安全组.
-
-
为您的 Amazon EFS 集群创建 Amazon EKS 文件系统。
-
通过 https://console.amazonaws.cn/efs/
打开 Amazon Elastic File System 控制台。 -
在左侧导航窗格中选择 File systems (文件系统),然后选择 Create file system (创建文件系统)。
-
在 Create file system (创建文件系统) 页面上,选择 Customize (自定义)。
-
在 File system settings (文件系统设置) 页面上,您不需要输入或选择任何信息,但可以在需要时选择 Next (下一步)。
-
在 Network access (网络访问) 页面上,对于 Virtual Private Cloud (VPC) (虚拟私有云 (VPC)),选择您的 VPC。
注意 如果您在控制台的右上角没有看到您的 VPC,请确保已选择您的 VPC 所在的区域。
-
在 Mount targets (挂载目标) 下,如果已列出默认安全组,请选择框右上角的 X(带有默认安全组名称)以从每个挂载点中删除它,选择您在上一步中为每个挂载目标创建的安全组,然后选择 Next (下一步)。
-
在 File system policy (文件系统策略) 页面上,选择 Next (下一步)。
-
在 Review and create (审核并创建) 页面上,选择 Create (创建)。
重要 默认情况下,新 Amazon EFS 文件系统由
root:root
拥有,并且只有root
用户 (UID 0) 具有读取、写入和执行权限。如果您的容器没有作为root
运行,则必须更改 Amazon EFS 文件系统权限,以允许其他用户修改文件系统。有关更多信息,请参阅 https://docs.amazonaws.cn/efs/latest/ug/accessing-fs-nfs-permissions.html 中的在网络文件系统 (NFS) 级别使用用户、组和权限Amazon Elastic File System 用户指南。
-
部署一个示例应用程序并验证 CSI 驱动程序是否正常运行
此过程使用来自 Container Storage Interface (CSI) 驱动程序ReadWriteMany
-
将 Amazon EFS Container Storage Interface (CSI) 驱动程序
GitHub 存储库克隆到您的本地系统。 git clone https://github.com/kubernetes-sigs/aws-efs-csi-driver.git
-
导航到
multiple_pods
示例目录。cd aws-efs-csi-driver/examples/kubernetes/multiple_pods/
-
检索 Amazon EFS 文件系统 ID。您可以在 Amazon EFS 控制台中查找此信息,或者使用以下 AWS CLI 命令。
aws efs describe-file-systems --query "FileSystems[*].FileSystemId" --output text
输出:
fs-<582a03f3>
-
编辑
specs/pv.yaml
文件并将volumeHandle
值替换为您的 Amazon EFS 文件系统 ID。apiVersion: v1 kind: PersistentVolume metadata: name: efs-pv spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: efs-sc csi: driver: efs.csi.aws.com volumeHandle: fs-<582a03f3>
注意 由于 Amazon EFS 是弹性文件系统,它不会强制实施任何文件系统容量限制。在创建系统时,不使用持久性卷和持久性卷声明中的实际存储容量值。但是,由于存储容量是 Kubernetes 中的必需字段,您必须指定有效值,例如,在此示例中为
5Gi
。此值不会限制 Amazon EFS 文件系统的大小。 -
从
efs-sc
目录部署efs-claim
存储类、efs-pv
持久性卷声明和specs
持久性卷。kubectl apply -f specs/pv.yaml kubectl apply -f specs/claim.yaml kubectl apply -f specs/storageclass.yaml
-
列出默认命名空间中的持久性卷。查找具有
default/efs-claim
声明的持久性卷。kubectl get pv -w
输出:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE efs-pv 5Gi RWX Retain Bound default/efs-claim efs-sc 2m50s
在
STATUS
变为Bound
之前,请勿继续下一步。 -
从
app1
目录部署app2
和specs
示例应用程序。kubectl apply -f specs/pod1.yaml kubectl apply -f specs/pod2.yaml
-
查看默认命名空间中的 Pod 并等待
app1
和app2
Pod 的STATUS
变为Running
。kubectl get pods --watch
注意 Pod 可能需要几分钟才能达到
Running
状态。 -
描述持久性卷。
kubectl describe pv efs-pv
输出:
Name: efs-pv Labels: none Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{},"name":"efs-pv"},"spec":{"accessModes":["ReadWriteMany"],"capaci... pv.kubernetes.io/bound-by-controller: yes Finalizers: [kubernetes.io/pv-protection] StorageClass: efs-sc Status: Bound Claim: default/efs-claim Reclaim Policy: Retain Access Modes: RWX VolumeMode: Filesystem Capacity: 5Gi Node Affinity: none Message: Source: Type: CSI (a Container Storage Interface (CSI) volume source) Driver: efs.csi.aws.com VolumeHandle: fs-582a03f3 ReadOnly: false VolumeAttributes: none Events: none
Amazon EFS 文件系统 ID 将作为
VolumeHandle
. 列出。 -
验证
app1
Pod 成功将数据写入卷。kubectl exec -ti app1 -- tail /data/out1.txt
输出:
Thu Jul 23 21:44:02 UTC 2020 Thu Jul 23 21:44:07 UTC 2020 Thu Jul 23 21:44:12 UTC 2020 Thu Jul 23 21:44:17 UTC 2020 Thu Jul 23 21:44:22 UTC 2020 Thu Jul 23 21:44:27 UTC 2020
-
验证
app2
Pod 显示与app1
写入到卷的卷中相同的数据。kubectl exec -ti app2 -- tail /data/out1.txt
输出:
Thu Jul 23 21:44:47 UTC 2020 Thu Jul 23 21:44:52 UTC 2020 Thu Jul 23 21:44:57 UTC 2020 Thu Jul 23 21:45:02 UTC 2020 Thu Jul 23 21:45:07 UTC 2020 Thu Jul 23 21:45:12 UTC 2020
-
完成试验时,请删除此示例应用程序来清除资源。
kubectl delete -f specs/
您也可以手动删除您创建的文件系统和安全组。