先决条件

安装Amazon CLI

##amd64 架构安装
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install##arm64 架构安装
curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

安装 eksctl

eksctl 安装文档:https://docs.amazonaws.cn/eks/latest/userguide/eksctl.html

curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
eksctl version

配置 Amazon CLI

##正确填写Access Key信息,并确保有EKS/EFS/安全组 相关操作权限
aws configure

Amazon EFS CSI 驱动程序

官方文档:https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/efs-csi.html

1.创建 IAM policy

创建允许 CSI 驱动程序的服务账户代表您调用 AWS API 的 IAM policy

##下载 IAM policy 文档
curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/docs/iam-policy-example.json##创建策略
aws iam create-policy \--policy-name Policy_EKS_EFS_CSI_Driver \--policy-document file://iam-policy-example.json

2.创建 IAM 角色并向其附加此 IAM policy

查看集群的 OIDC 提供商 URL

##将 my-cluster 替换为您的集群名称。如果命令的输出为 None,请查看先决条件。
aws eks describe-cluster --name my-cluster \
--query "cluster.identity.oidc.issuer" \
--output text

创建 IAM 角色

向 Kubernetes 服务账户授予 AssumeRoleWithWebIdentity 操作权限

##将 111122223333 替换为您的账户 ID;
##将 EXAMPLED539D4633E53DE1B71EXAMPLE 和 region-code 替换为在上一步中返回的值;
##如果您的集群位于 AWS GovCloud(美国东部)或 AWS GovCloud(美国东部)AWS 区域,请将arn:aws-cn: 替换为 arn:aws-us-gov:
##cat << EOF > trust-policy.json
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Federated": "arn:aws-cn:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"},"Action": "sts:AssumeRoleWithWebIdentity","Condition": {"StringEquals": {"oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa"}}}]
}
EOF

创建角色:Role_EKS_EFS_CSI_Driver

aws iam create-role \--role-name Role_EKS_EFS_CSI_Driver \--assume-role-policy-document file://"trust-policy.json"

向角色附加 IAM policy

##请将 111122223333 替换为您的账户 ID;
##如果您的集群位于 AWS GovCloud(美国东部)或 AWS GovCloud(美国东部)AWS 区域,请将arn:aws-cn: 替换为 arn:aws-us-gov:
##
aws iam attach-role-policy \--policy-arn arn:aws-cn:iam::111122223333:policy/Policy_EKS_EFS_CSI_Driver\--role-name Role_EKS_EFS_CSI_Driver

创建一个使用您创建的 IAM 角色的 ARN 进行注释的 Kubernetes 服务账户

##将 111122223333 替换为您的账户 ID
##如果您的集群位于 AWS GovCloud(美国东部)或 AWS GovCloud(美国东部)AWS 区域,请将arn:aws-cn: 替换为 arn:aws-us-gov:
##
cat << EOF > efs-service-account.yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:labels:app.kubernetes.io/name: aws-efs-csi-drivername: efs-csi-controller-sanamespace: kube-systemannotations:eks.amazonaws.com/role-arn: arn:aws-cn:iam::111122223333:role/Role_EKS_EFS_CSI_Driver
EOF

在集群上创建 Kubernetes 服务账户

kubectl apply -f efs-service-account.yaml

验证结果

kubectl get ServiceAccount/efs-csi-controller-sa -n kube-system

2.安装Amazon EFS驱动程序

此过程需要 Helm V3 或更高版本。要安装或升级 Helm

安装helm

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

添加chart仓库

helm repo add aws-efs-csi-driver https://kubernetes-sigs.github.io/aws-efs-csi-driver/
##更新存储库。
helm repo update

使用 Helm Chart 安装驱动程序

  • efs-csi-controller
  • efs-csi-node
##请将存储库地址替换为集群的容器镜像地址;region-code替换为你仓库的区域。
helm upgrade -i --timeout 20m aws-efs-csi-driver aws-efs-csi-driver/aws-efs-csi-driver --wait --wait-for-jobs --debug\--namespace kube-system \--set controller.serviceAccount.create=false \--set controller.serviceAccount.name=efs-csi-controller-sa

验证安装结果(状态是否为Running)

kubectl get pod -n kube-system -l "app.kubernetes.io/name=aws-efs-csi-driver,app.kubernetes.io/instance=aws-efs-csi-driver"

输出结果如下:

NAME                                 READY   STATUS    RESTARTS   AGE
efs-csi-controller-8cd49f9f6-wssmf   3/3     Running   0          2m16s
efs-csi-controller-8cd49f9f6-xjfxd   3/3     Running   0          2m16s
efs-csi-node-2wk62                   3/3     Running   0          2m16s
efs-csi-node-ktnl4                   3/3     Running   0          2m16s
efs-csi-node-mh7cm                   3/3     Running   0          2m16s

创建 EFS 安全组

也可在平台手动创建。

官方文档:https://docs.amazonaws.cn/efs/latest/ug/mounting-fs.html

1.检索您的集群所在的 VPC ID。

  • 可在EKS平台自行查看,或者使用以下命令获取;
  • 将 my-cluster 替换为您的集群名称;
##将VPC ID存储在变量中,以便在后续步骤中使用。
vpc_id=$(aws eks describe-cluster \--name my-cluster \--query "cluster.resourcesVpcConfig.vpcId" \--output text)##检查变量
echo ${vpc_id}

2.检索您的集群的 VPC 的 CIDR 范围

##将CIDR存储在变量中,以便在后续步骤中使用。
cidr_range=$(aws ec2 describe-vpcs \--vpc-ids $vpc_id \--query "Vpcs[].CidrBlock" \--output text)##检查变量
echo ${cidr_range}

3.创建一个安全组

  • 该安全组包含一条允许您的 Amazon EFS 挂载点的入站 NFS 流量的入站规则;
  • 要进一步限制对文件系统的访问,您可以将 CIDR 用于子网,而不是 VPC;
##创建安全组。将 example values 替换为您自己的值;
security_group_id=$(aws ec2 create-security-group \--group-name FW-EFS-TEST \--description "My EFS security group" \--vpc-id $vpc_id \--output text)##查看创建好的安全组id
echo ${security_group_id}##创建一条入站规则,该入站规则允许来自您的集群 VPC 的 CIDR 的入站 NFS 流量;
aws ec2 authorize-security-group-ingress \--group-id $security_group_id \--protocol tcp \--port 2049 \--cidr $cidr_range

为 EKS 集群创建EFS 文件系统

1.创建文件系统

##region替换为您的集群所在的 AWS 区域
file_system_id=$(aws efs create-file-system \--region cn-north-1 \--performance-mode generalPurpose \--tags Key=Name,Value=EKS-EFS-TEST \--query 'FileSystemId' \--output text)##查看创建好的EFS id
echo ${file_system_id}

2.创建挂载目标

##查看您的集群节点的 IP 地址。
kubectl get nodes -owide |awk '{print $1,$6}'##确定 VPC 中子网的 ID 以及子网所在的可用区。
aws ec2 describe-subnets \--filters "Name=vpc-id,Values=$vpc_id" \--query 'Subnets[*].{SubnetId: SubnetId,AvailabilityZone: AvailabilityZone,CidrBlock: CidrBlock}' \--output table

为节点所在的子网添加挂载目标。从前两个步骤的输出来看,集群node使用 IP 地址位于 ID 为 subnet-EXAMPLEe2ba886490 的子网的 CidrBlock 内。

##以下命令会为节点所在的子网创建一个挂载目标(如果集群中有很多节点,那么您应该替换相应的子网 ID后多次运行命令)
aws efs create-mount-target \--file-system-id $file_system_id \--subnet-id subnet-EXAMPLEe2ba886490 \--security-groups $security_group_id
  • 平台查看创建结果

部署使用控制器所创建的持久性卷的示例应用程序

您必须使用 1.2x 版或更高版本的 Amazon EFS CSI 驱动程序,该驱动程序需要 1.17 或更高版本的集群。

1.为 EFS 创建存储类

为 EFS 创建存储类。有关所有参数和配置选项,请参阅 GitHub 上的 Amazon EFS CSI 驱动程序。

##查看EFS 文件系统 ID,${file_system_id} 为前面创建EFS生成的变量
aws efs describe-file-systems --query "FileSystems[*].FileSystemId" |grep "${file_system_id}"##下载 Amazon EFS 的 StorageClass 清单。
curl -o aws-efs-storageclass.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/storageclass.yaml##编辑 yaml文件
kind: StorageClass
apiVersion: storage.k8s.io/v1
allowVolumeExpansion: true    ##添加此行
volumeBindingMode: WaitForFirstConsumer   ##修改卷绑定模式
metadata:name: efs-qqq-test
provisioner: efs.csi.aws.com
parameters:provisioningMode: efs-apfileSystemId: fs-582a03f3  ##替换为你的文件系统 IDdirectoryPerms: "700"gidRangeStart: "1000" # optionalgidRangeEnd: "2000" # optionalbasePath: "/dynamic_provisioning" # optional##部署存储类
kubectl apply -f aws-efs-storageclass.yaml##查看存储类
kubectl get storageclass

2.测试EFS 自动预置

部署pod和PVC

##下载一个清单,该清单将部署一个 Pod 和一个 PersistentVolumeClaim。
curl -o pod-efs.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/pod.yaml##存储类名使用为上面配置的名字
sed -i 's/storageClassName: efs-sc/storageClassName: efs-qqq-test/g' pod-efs.yaml##使用示例应用程序和 Pod 使用的 PersistentVolumeClaim 来部署 Pod。
kubectl apply -f pod-efs.yaml

验PV

##确定运行控制器的 Pod 的名称。
kubectl get pods -n kube-system | grep efs-csi-controller
#####输出示例如下:
efs-csi-controller-8cd49f9f6-wssmf              3/3     Running   0               13m
efs-csi-controller-8cd49f9f6-xjfxd              3/3     Running   0               13m##几秒钟后,观察输出日志
kubectl logs --tail=10 -f deployment/efs-csi-controller -n kube-system -c csi-provisionerkubectl logs --tail 10 -f efs-csi-controller-8cd49f9f6-wssmf \-n kube-system \-c csi-provisioner##查看创建的 PersistentVolumeClaim 的详细信息
kubectl describe pvc/efs-claim##确认已创建PVC状态为 Bound 至 PersistentVolumeClaim 的持久性卷
kubectl get pv##请查应用程序容器的状态,直到 STATUS 变成 Running
kubectl get pods -o wide##确认数据已写入到卷。
kubectl exec efs-app -- bash -c "cat data/out"##检查无问题后删除pod
kubectl delete -f pod-efs.yaml

Amazon EKS 使用 EFS服务相关推荐

  1. Amazon EKS 上有状态服务启用存储加密

    点击上方入口立即[自由构建 探索无限] 一起共赴年度科技盛宴! 1.背景 用户通过 Deployment, Replication Controller 可以方便地在 Kubernetes 中部署一套 ...

  2. AWS CLI创建Amazon EKS服务

    Amazon EKS文档 前言: 创建ClusterRole需要选择一下的角色 AmazonEKSClusterPolicy 创建NodeRole需要选择一下的角色 AmazonEC2Containe ...

  3. 数据处理任务量级巨大?构建预置容器镜像的Amazon EKS解决方案了解一下!

    概述 Amazon EKS是一项托管的Kubernetes服务,且经过认证与Kubernetes一致,因此上游Kubernetes上运行的现有应用程序可与Amazon EKS兼容.出于其安全性.可靠性 ...

  4. AWS宣布Amazon EKS在AWS中国(宁夏)区域和AWS中国(北京)区域正式商用

    2020年3月13日,北京,今天,亚马逊旗下公司Amazon Web Services, Inc. (AWS) 宣布,Amazon Elastic Kubernetes Service(Amazon ...

  5. Amazon EKS基于GitLab的CICD实践二 基础架构和应用架构创建篇

    关于GitLab的CI/CD的实践具体分成如下的内容,其中(一)和(二)已经在上面一篇关于GitLab的CICD的实践一 GitLab的部署和配置篇中介绍完成了. 全系列目录: (一)部署的架构 (二 ...

  6. Amazon EKS基于GitLab的CICD实践一 GitLab的部署和配置篇

    在容器化,微服务,基础设施即代码(IaC)以及DevOps的理念不断被大家所接受和理解,摆在大家面前的是如何在实际的工作中应用和实践这些理念. 本文将讨论基于GitLab来实现针对公有云基础设施(亚马 ...

  7. 如何在 Amazon EKS 中部署 SR-IOV 设备插件

    前言 随着云技术和容器的发展,越来越多的基于容器集群的通信负载开始在公有云上运行,通信负载对网络性能要求极高,因此广泛使用 SR-IOV 技术来提升网络的吞吐量和减少抖动,同时降低应用的 CPU 开销 ...

  8. 使用 KubeSphere 管理 Amazon EKS Anywhere 集群

    Amazon EKS Anywhere 介绍 近日,亚马逊云科技开源了 Amazon EKS Anywhere.这个项目为 Amazon EKS 提供了一种新的部署模式,可以在本地数据中心使用虚拟机轻 ...

  9. Amazon EKS 新功能上线——助你降低配置和管理复杂度

    我们在与客户沟通过程中了解到,一些从基于 EC2 自建的 Kubernetes 迁移到使用 Amazon Elastic Kubernetes Service (Amazon EKS) 托管服务的客户 ...

最新文章

  1. TCP/IP 笔记 1.3 IP:网际协议
  2. 2022王道操作系统名词解释概念题
  3. POI SXSSFWorkbook 实现大批量数据 导出
  4. 如何修改帝国cms文章点击量默认值和成倍增加
  5. 《机器学习系统设计:Python语言实现》一2.2 IPython控制台
  6. hadoop2.2.0 centos6.4 编译安装详解
  7. ubuntu16.04安装PHP5.6和7.0
  8. JavaSE基础——反射
  9. textbox多行文本框_文本框脚本
  10. 畅捷支付显示连接服务器失败,畅捷支付POS机常见错误码解决方法!
  11. u盘服务器安装win7系统,服务器u盘安装win7系统
  12. Chrome浏览器截取网页生成图片
  13. nodejs-CentOS64下载安装配置
  14. 彻底销毁数据的4个方法
  15. 身份证里提取出生年月的方法(实用)
  16. Android 搜狗输入法-手表版对圆形手环/手表适配
  17. 微信小程序消息推送功能开发(java实现)
  18. aspx mysql 安全问题_ASP+access的安全问题及解决方法
  19. 程序员连续剧_每个程序员都应该看的5部最佳电视连续剧
  20. 达人评测 i5 1135g7和r7 6800h选哪个

热门文章

  1. 三合一剪弦器怎么用_吉他换弦时多余的弦用什么工具剪掉?
  2. java_异常_练习题:处理输入非数字异常和除数为0的异常。
  3. AVFI Carla安装踩坑记录
  4. 组合问题,用1元纸币兑换1分,2分和5分硬币,要求兑换总数为50枚,问组合方式多少种?
  5. 服务器系统升级方案,服务器系统升级方案
  6. 网页dom元素过多为什么会导致页面卡顿
  7. 2019上半年信息系统项目管理师-综合知识(简练整理解析)
  8. mac时间机器占用大量系统盘空间且在访达中无法找到
  9. 360抢夺“度娘”?
  10. Java 8 Update 25 (8u25)