我们之前使用EBS作为k8s的动态pvc的pv,但是EBS不支持ReadWriteMany类型的声明。

所以尝试使用efs作为存储底层来声明pvc。

动态pvc声明方案

创建efs文件存储系统

使用命令

# 创建EFS Security group
VPC_ID=$(aws eks describe-cluster --name ${CLUSTER_NAME} --region ${AWS_REGION} --query "cluster.resourcesVpcConfig.vpcId" --output text)
VPC_CIDR=$(aws ec2 describe-vpcs --vpc-ids ${VPC_ID} --query "Vpcs[].CidrBlock"  --region ${AWS_REGION} --output text)
aws ec2 create-security-group --description ${CLUSTER_NAME}-efs-eks-sg --group-name efs-sg --vpc-id ${VPC_ID}
SGGroupID=上一步的结果访问
aws ec2 authorize-security-group-ingress --group-id ${SGGroupID}  --protocol tcp --port 2049 --cidr ${VPC_CIDR}# 创建EFS file system 和 mount-target, 请根据你的环境替换 FileSystemId, SubnetID, SGGroupID
aws efs create-file-system --creation-token eks-efs --region ${AWS_REGION}
aws efs create-mount-target --file-system-id FileSystemId --subnet-id SubnetID --security-group SGGroupID

也可以通过界面操作,步骤参考

利用 EFS 快速搭建 NFS 文件系统

安装efs驱动csi项目

这里需要借助 Amazon EFS CSI Driver项目,csi项目github地址

git clone https://github.com/kubernetes-sigs/aws-efs-csi-drivercd aws-efs-csi-driver-master/deploy/kubernetes/overlays/stablecat kustomization.yaml

当前版本内容如下:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
images:
- name: amazon/aws-efs-csi-drivernewName: 602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/aws-efs-csi-drivernewTag: v0.2.0
- name: quay.io/k8scsi/livenessprobenewName: 602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/csi-liveness-probenewTag: v1.1.0
- name: quay.io/k8scsi/csi-node-driver-registrarnewName: 602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/csi-node-driver-registrarnewTag: v1.1.0

需要修改如下:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
images:
- name: amazon/aws-efs-csi-drivernewTag: v0.3.0newName: amazon/aws-efs-csi-driver
- name: quay.io/k8scsi/livenessprobenewName: 602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/csi-liveness-probenewTag: v1.1.0
- name: quay.io/k8scsi/csi-node-driver-registrarnewName: 602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/csi-node-driver-registrarnewTag: v1.1.0

创建

kubectl create -k .kubectl get pods -n kube-systemNAME                                      READY   STATUS    RESTARTS   AGE
alb-ingress-controller-649b854d75-m8c75   1/1     Running   0          2d18h
aws-node-ct6rz                            1/1     Running   0          4d18h
aws-node-sfjtn                            1/1     Running   0          3d21h
aws-node-xzfx9                            1/1     Running   0          4d18h
coredns-6565755d58-pd5nm                  1/1     Running   0          4d18h
coredns-6565755d58-v9nl7                  1/1     Running   0          4d18h
ebs-csi-controller-6dcc4dc6f4-6k4s5       4/4     Running   0          2d17h
ebs-csi-controller-6dcc4dc6f4-vtklz       4/4     Running   0          2d17h
ebs-csi-node-2zmct                        3/3     Running   0          2d17h
ebs-csi-node-plljf                        3/3     Running   0          2d17h
ebs-csi-node-s9lbz                        3/3     Running   0          2d17h
efs-csi-node-5jtlc                        3/3     Running   0          10h
efs-csi-node-lqdz9                        3/3     Running   0          10h
efs-csi-node-snqmh                        3/3     Running   0          10h
kube-proxy-g4mcw                          1/1     Running   0          4d18h
kube-proxy-mb88w                          1/1     Running   0          4d18h
kube-proxy-tpx4x                          1/1     Running   0          3d21h
kubernetes-dashboard-5f7b999d65-dcc6h     1/1     Running   0          2d23h
metrics-server-7fcf9cc98b-rntrh           1/1     Running   0          44hkubectl exec -ti efs-csi-node-5jtlc -n kube-system -- mount.efs --version
# Make sure the version is > 1.19

可能遇到的问题—Failed to resolve “fs-XXXXX.efs.cn-northwest-1.amazonaws.com” - check that your file system ID is correct

我们在创建efs的界面中其实可以看到 中国区的DNS是带有cn后缀的,比如:amazonaws.com.cn

eks-workshop-greater-china的文档中说v0.3.0不支持中国区,需要用v0.2.0。

https://github.com/kubernetes-sigs/aws-efs-csi-driver/issues/138 v0.2.0 image contains old version of efs-utils, efs-utils added China region support from v1.19 The v.0.3.0 does work, you can also build your image to use v.0.2.0 CSIv0.2.0版本的镜像中包含了老版本的efs-utils从v1.19增加对中国区的支持,但是v0.3.0是不起作用的,需要使用v0.2.0版本的镜像。

这个问题其实v0.3.0已经修复了,而且v0.2.0反而不支持中国区,目前下载的master的kustomization.yaml默认使用的就是v0.2.0,是会遇到问题的,无法转换出 带有cn后缀的 DNS路径,所以需要使用v0.3.0。

如上文使用v0.3.0的镜像即可

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
images:
- name: amazon/aws-efs-csi-drivernewTag: v0.3.0newName: amazon/aws-efs-csi-driver
- name: quay.io/k8scsi/livenessprobenewName: 602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/csi-liveness-probenewTag: v1.1.0
- name: quay.io/k8scsi/csi-node-driver-registrarnewName: 602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/csi-node-driver-registrarnewTag: v1.1.0

详情参考链接:
support EFS in china regions

解决方案
as v0.3.0 is released: https://github.com/kubernetes-sigs/aws-efs-csi-driver/releases/tag/v0.3.0
Please use amazon/aws-efs-csi-driver:v0.3.0

The endpoints in China region are different from others

部署样例测试

## Deploy app use the EFS
cd examples/kubernetes/multiple_pods/
aws efs describe-file-systems --query "FileSystems[*].[FileSystemId,Name]" --region ${AWS_REGION} --output text# 修改 the specs/pv.yaml file and replace the volumeHandle with FILE_SYSTEM_ID
# 例子:
#csi:
#    driver: efs.csi.aws.com
#    volumeHandle: fs-9c21a999# 部署 the efs-sc storage class, efs-claim pv claim, efs-pv, and app1 and app2 sample applications.
kubectl apply -f specs/kubectl describe storageclass efs-sc
kubectl get pv
kubectl describe pv efs-pv
kubectl get pods --watch
kubectl get events# 验证
kubectl exec -ti app1 -- tail /data/out1.txt
kubectl exec -ti app2 -- tail /data/out1.txt# 清理
kubectl delete -f specs/

静态pvc声明方案

pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:name: pv0001
spec:capacity:storage: 1GiaccessModes:- ReadWriteOncenfs:path: /tmpserver: 172.17.0.2persistentVolumeReclaimPolicy: Retain            #Here is policyclaimRef:                                        #Here is claim referencename: claim1namespace: default

pvc.yaml

apiVersion: "v1"
kind: "PersistentVolumeClaim"
metadata:name: "claim1"
spec:accessModes:- "ReadWriteOnce"resources:requests:storage: "1Gi"volumeName: "pv0001"

参考资料

步骤6 配置使用EFS

How do I use Amazon EFS with Amazon EKS

eks+ efs 在 Amazon EKS 上使用 Kubeflow 进行分布式 TensorFlow 训练

Persistent Volumes

pv and pvc - kube- efs

aws--efs---使用efs创建k8s的动态pvc相关推荐

  1. AWS EKS 创建k8s生产环境实例

    #AWS EKS 创建k8s生产环境实例 在AWS部署海外节点, 图简单使用web控制台创建VPC和k8s集群出错(k8s), 使用cli命令行工具创建成功 本实例为复盘, 记录aws命令行工具创建e ...

  2. kubeadm创建k8s集群(1.14.2版本)

    kubeadm创建k8s集群 1,环境准备 1.1,网络规划 节点名称 IP地址 角色 安装工具 k8s-master-01 172.16.2.101 master kubeadm.kubelet.k ...

  3. 在AWS中国区使用kops安装k8s完全指南

    原文链接:http://blog.geekidentity.com/k8s/kops/install-k8s-with-kops-in-china/ 因为一些众所周知的原因,AWS中国区并没有k8s集 ...

  4. eclipse 创建maven 项目 动态web工程完整示例

    需求表均同springmvc案例 此处只是使用maven 注意,以下所有需要建立在你的eclipse等已经集成配置好了maven了,说白了就是新建项目的时候已经可以找到maven了 没有的话需要安装m ...

  5. linux 动态链接库的创建和使用--动态连接

    linux 动态链接库的创建和使用--动态连接 分类: C 编程 2012-03-25 17:01 568人阅读 评论(0) 收藏 举报 linuxreferencefunctiondatec /* ...

  6. c 调用c语言写的dll文件路径,手把手教你用C/C++语言创建及调试动态库DLL程序

    引子 动态链接库DLL文件不仅可以实现代码.资源和数据的共享,同时也可以对源代码起保护作用,对于开发者来讲,DLL的生成及调试是程序员必须掌握的一种技术,下面通过一个具体的例子,演示使用C/C++语言 ...

  7. 使用Kubeadm创建k8s集群之节点部署(三十二)

    前言 由于上次忘开申明原创,特再发一次. 本篇部署教程将讲述k8s集群的节点(master和工作节点)部署,请先按照上一篇教程完成节点的准备.本篇教程中的操作全部使用脚本完成,并且对于某些情况(比如镜 ...

  8. 使用Kubeadm创建k8s集群之部署规划(三十一)

    前言 上一篇我们讲述了使用Kubectl管理k8s集群,那么接下来,我们将使用kubeadm来启动k8s集群. 部署k8s集群存在一定的挑战,尤其是部署高可用的k8s集群更是颇为复杂(后续会讲).因此 ...

  9. C++中使用模板,new创建2维动态数组

    1 // 使用模板和new创建2维动态数组 2 3 #include<iostream> 4 #include<exception> 5 #include<cstdlib ...

最新文章

  1. 2021全国高校计算机能力挑战赛(初赛)C语言试题四
  2. 编程中python怎么读-对Python新手编程过程中如何规避一些常见问题的建议
  3. 【组合数学】组合恒等式 ( 变上项求和 1 组合恒等式 | 三种组合恒等式证明方法总结 | 证明变上项求和 1 组合恒等式 )
  4. 第7章 PCA与梯度上升法
  5. python学习笔记(六)——函数的作用域和装饰器
  6. 加密托管服务商Unchained Capital完成550万美元融资,NYDIG领投
  7. 2021年中国云无线接入网(C-RAN)市场趋势报告、技术动态创新及2027年市场预测
  8. 设计模式的征途—4.抽象工厂(Abstract Factory)模式
  9. 引入react文件报错_React Native常见问题(一)
  10. ASA REST API安装步骤
  11. 关于翻译书籍版权的讨论
  12. xsd文件转图片_原来华为手机能一键将图片转为PDF,实在太方便啦!你还不会吗?...
  13. vector容器——赋值操作
  14. VS2008 ~ VS2019下载地址
  15. 微型计算机控制赖寿宏pdf,微型计算机控制技术答案(赖寿宏).pdf
  16. 【推荐】四款数据库可视化操作工具
  17. 利用stm32串口中断进行数码管显示
  18. 软件使用-历史足迹-01
  19. 年薪50万的程序员_2018年这类程序员工资最高!年薪50万只能算一般
  20. MATLAB求解导弹运动的一些基础方法

热门文章

  1. Python教你秒懂:啥是佩奇?
  2. RuntimeWarning: Glyph 35745 missing from current font
  3. FAQ and discussed with adam
  4. C语言中双下划线的用法__FILE__
  5. mysql chroot_centos构建chroot环境
  6. 工作多年一直无法晋升,有啥破解之道?
  7. [Golang]搭建gdb调试go程序
  8. 详解java中println输出字符串
  9. 人工智能体验之为你写诗应用
  10. 数据透视表 筛选_筛选器选择中的数据透视图标题