当前位置:   article > 正文

玩转aws之(二)eks 设置efs(nfs)存储卷pvc_aws eks节点配置

aws eks节点配置

目录

1. 前言

2. 配置步骤

3. 安装csi驱动

3.1 创建iam policy

3.2 安装CFS csi驱动

4. 创建EFS

4.1 创建EFS访问安全组及放通EKS访问

4.2 根据EKS集群创建对应的EFS文件系统

4.3 创建挂载目标

5. 创建存储类

5.1 获取efs id

5.2 创建存储类

6. 创建pvc

7. pod挂载pvc使用

8. 总结  


1. 前言

EKS支持两种持久性存储:

Amazon Elastic Block Store(Amazon EBS):硬盘

Amazon Elastic File System (Amazon EFS):提供简单、无服务器、 set-and-forget 弹性文件系统用于AWS Cloud服务和本地资源,支持网络文件系统版本 4(NFSv4.1 和 NFSv4.0)协议。

使用场景,部署服务多副本,多个pod需共享访问文件,因此通过nfs存储挂载pvc,实现文件共享访问。

2. 配置步骤

3. 安装csi驱动

这里分为两个步骤(授权访问EFS)

  • 创建iam policy和eks serviceaccount
  • EKS安装CFS csi驱动

3.1 创建iam policy

3.1.1 下载 IAM policy json文件

curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/docs/iam-policy-example.json

3.1.2 创建iam policy

  1. # 策略名可自定义,替换AmazonEKS_EFS_CSI_Driver_Policy 即可
  2. aws iam create-policy \
  3. --policy-name AmazonEKS_EFS_CSI_Driver_Policy \
  4. --policy-document file://iam-policy-example.json

3.1.3 创建eks serviceaccount

  1. # 运行下面的命令,以创建 IAM 角色和 Kubernetes 服务账户。它还将策略附加到角色,用 IAM 角色 ARN 对 Kubernetes 服务账户添加注释,并将 Kubernetes 服务账户名称添加到 IAM 角色的信任策略中。请将 my-cluster 替换为您的集群名称,并将 111122223333 替换为您的账户 ID。将 region-code 替换为集群所在的 AWS 区域。如果您的集群位于 AWS GovCloud(美国东部)或 AWS GovCloud(美国西部)AWS 区域,则将 arn:aws: 替换为 arn:aws-us-gov:。
  2. eksctl create iamserviceaccount \
  3. --cluster my-cluster \
  4. --namespace kube-system \
  5. --name efs-csi-controller-sa \
  6. --attach-policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_EFS_CSI_Driver_Policy \
  7. --approve \
  8. --region region-code

3.2 安装CFS csi驱动

helm安装efs csi驱动

  1. helm repo add aws-efs-csi-driver https://kubernetes-sigs.github.io/aws-efs-csi-driver/
  2. helm repo update
  3. # 使用 Helm Chart 安装驱动程序的版本。请将存储库地址替换为集群的容器镜像地址,即集群所在可用区
  4. # 镜像地址参考:https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/add-ons-images.html
  5. helm upgrade -i aws-efs-csi-driver aws-efs-csi-driver/aws-efs-csi-driver \
  6. --namespace kube-system \
  7. --set image.repository=602401143452.dkr.ecr.region-code.amazonaws.com/eks/aws-efs-csi-driver \
  8. --set controller.serviceAccount.create=false \
  9. --set controller.serviceAccount.name=efs-csi-controller-sa

4. 创建EFS

  • 根据EKS集群创建对应的EFS文件系统
  • 创建EFS访问安全组及放通EKS访问
  • 根据集群节点可用区网络创建挂载目标

4.1 创建EFS访问安全组及放通EKS访问

检索EKS集群所在的 VPC ID,并将其存储在变量中,以便在后续步骤中使用。将 my-cluster 替换为您的集群名称

  1. vpc_id=$(aws eks describe-cluster \
  2. --name my-cluster \
  3. --query "cluster.resourcesVpcConfig.vpcId" \
  4. --output text)

检索您的集群的 VPC 的 CIDR 范围,并将其存储在变量中,以便在后续步骤中使用

  1. cidr_range=$(aws ec2 describe-vpcs \
  2. --vpc-ids $vpc_id \
  3. --query "Vpcs[].CidrBlock" \
  4. --output text)

创建一个安全组,将 example values 替换为您自己的值

  1. security_group_id=$(aws ec2 create-security-group \
  2. --group-name MyEfsSecurityGroup \
  3. --description "My EFS security group" \
  4. --vpc-id $vpc_id \
  5. --output text)

 创建一条入站规则,该入站规则允许来自您的集群 VPC 的 CIDR 的入站 NFS 流量

  1. aws ec2 authorize-security-group-ingress \
  2. --group-id $security_group_id \
  3. --protocol tcp \
  4. --port 2049 \
  5. --cidr $cidr_range

4.2 根据EKS集群创建对应的EFS文件系统

创建文件系统。将 region-code 替换为集群所在的 AWS 区域

  1. file_system_id=$(aws efs create-file-system \
  2. --region region-code \
  3. --performance-mode generalPurpose \
  4. --query 'FileSystemId' \
  5. --output text)

4.3 创建挂载目标

确定 VPC 中子网的 ID 以及子网所在的可用区

  1. aws ec2 describe-subnets \
  2. --filters "Name=vpc-id,Values=$vpc_id" \
  3. --query 'Subnets[*].{SubnetId: SubnetId,AvailabilityZone: AvailabilityZone,CidrBlock: CidrBlock}' \
  4. --output table

输出示例如下

  1. | DescribeSubnets |
  2. +------------------+--------------------+----------------------------+
  3. | AvailabilityZone | CidrBlock | SubnetId |
  4. +------------------+--------------------+----------------------------+
  5. | region-codec | 192.168.128.0/19 | subnet-EXAMPLE6e421a0e97 |
  6. | region-codeb | 192.168.96.0/19 | subnet-EXAMPLEd0503db0ec |
  7. | region-codec | 192.168.32.0/19 | subnet-EXAMPLEe2ba886490 |
  8. | region-codeb | 192.168.0.0/19 | subnet-EXAMPLE123c7c5182 |
  9. | region-codea | 192.168.160.0/19 | subnet-EXAMPLE0416ce588p |
  10. +------------------+--------------------+----------------------------+

根据eks节点所在子网添加挂载目标,节点是多可用区,则每个可用区的子网都将运行一次命令,将 subnet-EXAMPLEe2ba886490 替换为相应的子网 ID

  1. aws efs create-mount-target \
  2. --file-system-id $file_system_id \
  3. --subnet-id subnet-EXAMPLEe2ba886490 \
  4. --security-groups $security_group_id

5. 创建存储类

这里使用存储类动态生成pvc的方式

5.1 获取efs id

  1. aws efs describe-file-systems --query "FileSystems[*].FileSystemId" --output text
  2. # 输出示例如下
  3. fs-582a03f3

5.2 创建存储类

  1. # 下载storageclass.yaml
  2. curl -o storageclass.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/storageclass.yaml
  3. #编辑文件,将 fileSystemId 的值替换为cfs ID
  4. fileSystemId: fs-582a03f3
  5. # 创建存储类
  6. kubectl apply -f storageclass.yaml
  7. kubectl get sc
  8. NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
  9. efs-sc efs.csi.aws.com Delete Immediate false 152m

6. 创建pvc

  1. # pvc.yaml
  2. apiVersion: v1
  3. kind: PersistentVolumeClaim
  4. metadata:
  5. name: efs-claim
  6. spec:
  7. accessModes:
  8. - ReadWriteMany
  9. storageClassName: efs-sc
  10. resources:
  11. requests:
  12. storage: 5Gi
  13. kubectl apply -f pvc.yaml

7. pod挂载pvc使用

  1. #pod.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5. name: efs-app
  6. spec:
  7. containers:
  8. - name: app
  9. image: centos
  10. command: ["/bin/sh"]
  11. args: ["-c", "while true; do echo $(date -u) >> /data/out; sleep 5; done"]
  12. volumeMounts:
  13. - name: persistent-storage
  14. mountPath: /data
  15. volumes:
  16. - name: persistent-storage
  17. persistentVolumeClaim:
  18. claimName: efs-claim
  19. kubectl apply -f pod.yaml

8. 总结  

efs csi驱动和efs创建、安全组配置须根据步骤一一进行,否则pod挂载pvc使用时,有可能出现问题,如:Stale file handlers for EFS ,Stale file handlers for EFS mounts · Issue #614 · kubernetes-sigs/aws-efs-csi-driver (github.com)

觉得好用就收藏吧~ a~w~s~t~u~i

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/467536
推荐阅读
相关标签
  

闽ICP备14008679号