亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述Amazon EKS 中 EFS 持久性存储相关的知识,希望能为你提供帮助。
作者:SRE运维博客学习目标
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/220110850573/
相关话题:https://www.cnsre.cn/tags/eks/
- 在 EKS 中部署 Amazon EFS CSI 驱动程序到
- 验证 EFS 并验证它是否正常工作
- 创建基于 EFS 的静态、动态存储
- EKS 集群
- AWS CLI如果你没有安装请查看安装、更新和卸载 AWS CLI。在安装 AWS CLI 后,还要对其进行配置。
- kubectl 如果没有安装 请查看安装 kubectl。
- 从 查看下方 IAM 策略文档或者查看策略文档。
"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Action": [
"elasticfilesystem:DescribeAccessPoints",
"elasticfilesystem:DescribeFileSystems"
],
"Resource": "*"
,
"Effect": "Allow",
"Action": [
"elasticfilesystem:CreateAccessPoint"
],
"Resource": "*",
"Condition":
"StringLike":
"aws:RequestTag/efs.csi.aws.com/cluster": "true"
,
"Effect": "Allow",
"Action": "elasticfilesystem:DeleteAccessPoint",
"Resource": "*",
"Condition":
"StringEquals":
"aws:ResourceTag/efs.csi.aws.com/cluster": "true"
]
- 在IAM-策略 中创建策略
策略
然后在下一步中点击 创建策略
点击
json
然后将 IAM 策略
填入, 然后点击 下一步:标签
在下一步的标签中,可以根据自己的情况自行填写,然后点击
下一步:审核
名称中填写
AmazonEKS_EFS_CSI_Driver_Policy
< notice warning "注意" > 你可以将 AmazonEKS_EFS_CSI_Driver_Policy 更改为其他名称,但如果更改,请确保在后续步骤中也做出相应更改。 < /notice >
将 efs 策略 附件到 eks node 角色中将我们刚才创建的 efs 策略
AmazonEKS_EFS_CSI_Driver_Policy
附加在 eks_node 的角色中,确保eks node拥有efs的权限。<
notice warning "注意" >
如果你之前创建了 eks 那么在你的角色中会有一个名为 eksctl--nodegrou-NodeInstanceRole-xxxxxxxxx
的角色。
<
/notice >
在角色中搜索 node
然后点击 eksctl--nodegrou-NodeInstanceRole-xxxxxxxxx
在角色中点击
附加策略
搜索之前创建的 EFS 策略 也就是
AmazonEKS_EFS_CSI_Driver_Policy
然后选中,点击最下方的附加策略。安装 Amazon EFS 驱动程序使用 Helm 或 yaml 清单安装 Amazon EFS CSI 驱动程序。 这边不详细说 helm 部署方式主要介绍 yaml 清单部署 < notice warning "注意" >
一定要修改镜像地址为你所在的地区 ?Amazon EKS 附加组件容器镜像地址? < /notice >
yaml 清单部署
< notice info "提示" >
因为github网络的问题。如果再执行的时候部署没有反应,请终止运行,多运行几次尝试部署
< /notice >
kubectl apply -k "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-1.3"
输出如下:
serviceaccount/efs-csi-controller-sa created
serviceaccount/efs-csi-node-sa created
clusterrole.rbac.authorization.k8s.io/efs-csi-external-provisioner-role created
clusterrolebinding.rbac.authorization.k8s.io/efs-csi-provisioner-binding created
deployment.apps/efs-csi-controller created
daemonset.apps/efs-csi-node created
csidriver.storage.k8s.io/efs.csi.aws.com created
检查驱动运行是否正常
kubectlgetpods -A|grepefs
kube-systemefs-csi-controller-56f6dc4c76-2lvqf3/3Running03m32s
kube-systemefs-csi-controller-56f6dc4c76-dxkwl3/3Running03m32s
kube-systemefs-csi-node-9ttxp3/3Running03m32s
kube-systemefs-csi-node-hsn943/3Running03m32s
< notice warning "注意" > 虽然这边显示运行正常,但是还是要修改镜像地址。不然在创建pv,pvc以后在pod中挂载会出现错误。(后面会单独记录这个错误) < /notice > 修改 efs-csi-node 驱动
kubectl editdaemonsets.apps-n kube-system efs-csi-node
找到
aws-efs-csi-driver
驱动所在的位置然后将镜像修改为
918309763551.dkr.ecr.cn-north-1.amazonaws.com.cn/eks/aws-efs-csi-driver:v1.3.3
具体如下创建 Amazon EFS 文件系统为 Amazon EKS 集群创建 Amazon EFS 文件系统
在控制台中搜索
efs
点击确认然后进入 EFS
控制台在控制台中点击
创建文件系统
名称: 根据自己的情况填写 vpc: 一定要创建在跟
eks
同一 VPC
下
可用性和持久性: 根据提示说明创建自己所需要的
如果有更多需求可以点击 自定义来设置更多
如:吞吐量、加密、备份等策略
最后点击 创建
创建入站规则
允许来自 EKS 集群 VPC 的 CIDR 的入站 NFS 流量 在刚刚创建的
EFS
中选择 网络
-->
安全组
然后复制安全组的ID sg-152XXX
在
EC2
中找到 网络与安全
选择 安全组
然后在搜索框中搜索 sg-152XXX
选中安全组。并选择 入站规则
在入站规则中允许来 EKS 集群来访问 NFS(2049)端口流量。
部署示例应用程序< tabs 部署静态供给 内容部署动态供给 > < tab >
部署静态供给
部署使用你创建的持久性卷的示例应用程序
此过程利用来自 Amazon EFS Container Storage Interface (CSI) 驱动程序 GitHub 存储库的多个 Pod 读写许多示例来使用静态预置的 Amazon EFS 持久性卷,并使用
ReadWriteMany
访问模式从多个 Pod 访问它。- 将 Amazon EFS Container Storage Interface (CSI) 驱动程序 GitHub 存储库克隆到你的本地系统。
- 导航到
multiple_pods
示例目录。
- 检索你的 Amazon EFS 文件系统 ID。你可以在 Amazon EFS 控制台中查找此信息,或者使用以下 AWS CLI 命令。
- 编辑
specs/pv.yaml
文件并将volumeHandle
值替换为你的 Amazon EFS 文件系统 ID。
由于 Amazon EFS 是弹性文件系统,因此它不会强制实施任何文件系统容量限制。在创建系统时,不使用持久性卷和持久性卷声明中的实际存储容量值。但是,由于存储容量是 Kubernetes 中的必需字段,你必须指定有效值,例如,在此示例中为
5Gi
。此值不会限制 Amazon EFS 文件系统的大小。- 从
specs
目录部署efs-sc
存储类、efs-claim
持久性卷声明以及efs-pv
持久性卷。
- 列出默认命名空间中的持久性卷。查找具有
default/efs-claim
声明的持久性卷。
STATUS
变为 Bound
之前,请勿继续执行下一步。- 从
specs
目录部署app1
和app2
示例应用程序。
- 查看默认命名空间中的 Pod 并等待
app1
和app2
Pod 的STATUS
变为Running
状态。
可能需要几分钟 Pod 才能达到
Running
状态。- 描述持久性卷。
VolumeHandle
列出。- 验证
app1
Pod 是否成功将数据写入卷。
- 验证
app2
Pod 在卷中显示的数据与app1
写入卷的数据相同。
- 完成试验时,请删除此示例应用程序的资源以进行清理。
部署动态供给
Prerequisite
您必须使用 1.2x 版或更高版本的 Amazon EFS CSI 驱动程序,该驱动程序需要 1.17 或更高版本的集群。要更新集群,请参阅 更新集群。
部署使用控制器所创建的持久性卷的示例应用程序
此过程利用来自 Amazon EFS Container Storage Interface (CSI) 驱动程序 GitHub 存储库的动态预置示例。它通过 Amazon EFS 接入点和 Pod 使用的持久性卷申领 (PVC) 动态创建一个持久性卷。
- 为 EFS 创建存储类。有关所有参数和配置选项,请参阅 GitHub 上的 Amazon EFS CSI 驱动程序。
StorageClass
清单。```
curl -o storageclass.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/storageclass.yaml
```2. 编辑相应文件,将 fileSystemId
的值替换为您的文件系统 ID。3. 部署存储类。```
kubectl apply -f storageclass.yaml
```- 通过部署利用
PersistentVolumeClaim
的 Pod 来测试自动预置:
- 确定运行控制器的 Pod 的名称。
- 几秒钟后,您可以观察到控制器开始接受更改(已编辑,旨在提高可读性)。将
74ccf9f566-q5989
替换成来自上一个命令输出中的一个 Pod 的值。
- 确认已创建状态为
Bound
至PersistentVolumeClaim
的持久性卷:
- 查看有关所创建的
PersistentVolumeClaim
的详细信息。
- 查看示例应用程序 Pod 的状态。
- (可选)终止运行 Pod 的 Amazon EKS 节点并等待重新安排运行 Pod。或者,您也可以删除 Pod 并重新部署它。再次完成步骤 7,确认输出包含先前的输出。
作者:SRE运维博客
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/220110850573/
【Amazon EKS 中 EFS 持久性存储】相关话题:https://www.cnsre.cn/tags/eks/
推荐阅读
- 记一次调优过程—Spark读取OBS文件入ES
- 微服务架构 | 1. 微服务相关基础知识 #yyds干货盘点#
- 手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏05图像仿射变换(平移和缩放操作)
- Golang(定时器的终止与重置)
- #yyds干货盘点# springcloud整合eureka实现服务注册与发现
- 高可用k8s集群搭建1.17.0
- 3516 L1 Linux版本成功启动!可以愉快地玩耍了~
- 2021年vivo互联网技术最受欢迎文章TOP25
- 跨平台技术实战!百度文库跨平台技术快速落地全过程