玩转aws之(二)eks 设置efs(nfs)存储卷pvc

这篇具有很好参考价值的文章主要介绍了玩转aws之(二)eks 设置efs(nfs)存储卷pvc。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

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. 配置步骤

aws eks节点配置,云相关,aws,云计算

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

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

3.1.3 创建eks serviceaccount

# 运行下面的命令,以创建 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:。
eksctl create iamserviceaccount \
    --cluster my-cluster \
    --namespace kube-system \
    --name efs-csi-controller-sa \
    --attach-policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_EFS_CSI_Driver_Policy \
    --approve \
    --region region-code

3.2 安装CFS csi驱动

helm安装efs csi驱动

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

4. 创建EFS

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

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

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

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

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

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

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

security_group_id=$(aws ec2 create-security-group \
    --group-name MyEfsSecurityGroup \
    --description "My EFS security group" \
    --vpc-id $vpc_id \
    --output text)

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

aws ec2 authorize-security-group-ingress \
    --group-id $security_group_id \
    --protocol tcp \
    --port 2049 \
    --cidr $cidr_range

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

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

file_system_id=$(aws efs create-file-system \
    --region region-code \
    --performance-mode generalPurpose \
    --query 'FileSystemId' \
    --output text)

4.3 创建挂载目标

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

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

输出示例如下

|                           DescribeSubnets                          |
+------------------+--------------------+----------------------------+
| AvailabilityZone |     CidrBlock      |         SubnetId           |
+------------------+--------------------+----------------------------+
|  region-codec    |  192.168.128.0/19  |  subnet-EXAMPLE6e421a0e97  |
|  region-codeb    |  192.168.96.0/19   |  subnet-EXAMPLEd0503db0ec  |
|  region-codec    |  192.168.32.0/19   |  subnet-EXAMPLEe2ba886490  |
|  region-codeb    |  192.168.0.0/19    |  subnet-EXAMPLE123c7c5182  |
|  region-codea    |  192.168.160.0/19  |  subnet-EXAMPLE0416ce588p  |
+------------------+--------------------+----------------------------+

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

aws efs create-mount-target \
    --file-system-id $file_system_id \
    --subnet-id subnet-EXAMPLEe2ba886490 \
    --security-groups $security_group_id

5. 创建存储类

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

5.1 获取efs id

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

5.2 创建存储类

# 下载storageclass.yaml
curl -o storageclass.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/storageclass.yaml
#编辑文件,将 fileSystemId 的值替换为cfs ID
fileSystemId: fs-582a03f3
# 创建存储类
kubectl apply -f storageclass.yaml

kubectl get sc 
NAME            PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
efs-sc          efs.csi.aws.com         Delete          Immediate              false                  152m

6. 创建pvc

# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: efs-claim
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: efs-sc
  resources:
    requests:
      storage: 5Gi
      
kubectl apply -f pvc.yaml      

7. pod挂载pvc使用

#pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: efs-app
spec:
  containers:
    - name: app
      image: centos
      command: ["/bin/sh"]
      args: ["-c", "while true; do echo $(date -u) >> /data/out; sleep 5; done"]
      volumeMounts:
        - name: persistent-storage
          mountPath: /data
  volumes:
    - name: persistent-storage
      persistentVolumeClaim:
        claimName: efs-claim

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文章来源地址https://www.toymoban.com/news/detail-789914.html

到了这里,关于玩转aws之(二)eks 设置efs(nfs)存储卷pvc的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AWS EKS集群安装EBS CSI驱动程序,创建PVC动态存储卷

    开发测试环境需要创建redis,mysql等中间件,使用动态pvc存储并挂载卷。 什么是EBS CSI DRIVER Amazon Elastic Block Store (Amazon EBS) Container Storage Interface (CSI) 驱动程序允许 Amazon Elastic Kubernetes Service (Amazon EKS) 集群管理持久性卷的 Amazon EBS 卷的生命周期。 为什么要安装EBS CSI DRIVER EKS 1.24及

    2024年02月13日
    浏览(62)
  • AWS eks 用户授权

    背景: 国内使用阿里云惯了,点点就可以完成大部分的工作,国外的AWS 大都是命令行操作,且权限设置的特别细,在创建集群后,给用户授权的工作中走了很多弯路,特记录一下。 前置条件: 1. 安装aws cli 、eksctl 命令行工具 1. 把用户与k8s 中的Group组做映射 2.生成kubeconfig

    2024年02月07日
    浏览(29)
  • AWS创建EKS集群

    新钛云服已累计为您分享 738 篇技术干货 使用 Amazon EKS(Elastic Kubernetes Service)集群,以便能够轻松管理、部署和扩展应用程序容器。EKS提供了一个高度可扩展、弹性、安全和稳定的Kubernetes控制平面,并自动处理集群的部署、升级和维护。使用EKS集群可以让开发团队专注于构

    2024年02月10日
    浏览(29)
  • AWS CLI创建Amazon EKS服务

    Amazon EKS文档 前言: 创建ClusterRole需要选择一下的角色 AmazonEKSClusterPolicy 创建NodeRole需要选择一下的角色 AmazonEC2ContainerRegistryReadOnly AmazonEKSWorkerNodePolicy AmazonEKS_CNI_Policy 1、创建 Amazon EKS 集群 IAM 角色 1)创建json 2)创建 Amazon EKS 集群 IAM 角色 3)将名为 GamefiAmazonEKSClusterRole的 Am

    2024年02月11日
    浏览(38)
  • AWS EKS 集群自动扩容 Cluster Autoscaler

    Amazon EKS 是托管的 Kubernetes 服务,可以使用 HPA 和 Cluster Autoscaler 来在集群中实现弹性伸缩,以满足应用程序的需求并节省资源成本。 Kubernetes(K8s)提供了自动伸缩机制,旨在根据应用程序负载和资源需求的变化自动调整应用的副本数量或节点数量,以满足性能需求和优化资

    2024年02月12日
    浏览(34)
  • K8S NFS持久存储配置

    K8S NFS 持久存储配置 在 Kubernetes ( K8S )中配置 NFS ( Network File System )作为持久存储通常涉及以下步骤: 1. 准备 NFS 服务器 首先,你需要一个运行 NFS 服务的服务器。这可以是 Kubernetes 集群中的一个节点,也可以是集群外部的服务器。 1.1 安装 NFS 服务 在 NFS 服务器上,安装

    2024年03月20日
    浏览(46)
  • 【云原生】AWS创建EKS1.25(Kubernetes)集群

    我这里使用的是 eksctl 命令创建的,更多信息:https://eksctl.io/usage/schema/ 1、编写 yaml 文件 vim eks-cluster.yaml 2、创建集群 3、本地管理 获取 config 文件自动添加到 ~/.kube/config 使用 kubectl 工具管理集群,现在可以使用 kubectl 工具管理集群了

    2024年02月13日
    浏览(38)
  • k8s 配置hadoop集群,nfs作为存储

    目录 一、简介 二、nfs服务nfs-provisioner配置 1、k8S服务器需安装nfs客户端 2、nfs服务端安装配置 3、使用nfs-provisioner动态创建PV  (文件已修改) 三、hadoop配置文件 1、# cat hadoop.yaml 2、# cat hadoop-datanode.yaml 3、# cat yarn-node.yaml  4、执行文件并查看 5、联通性验证  四、报错解决

    2024年02月10日
    浏览(40)
  • AWS alb eks traefik realip后端真实IP

    亚马逊 eks 集群代理用了traefik alb绑定 traefik 在node 上面暴露的端口,对外提供服务。一直也没有在意是否能正常获取客户端IP(腾讯云 阿里云的traefik 后端应用都能正常获取客户端IP),后端php服务基础镜像基于https://github.com/richarvey/nginx-php-fpm构建,对日志进行了json格式化,

    2024年02月11日
    浏览(34)
  • 【区块链 | IPFS】IPFS节点搭建、文件上传、节点存储空间设置、节点上传文件chunk设置

    通过 ipfs init 在本地计算机建立一个 IPFS 节点 本文有些命令已经执行过了,就没有重新初始化。部分图片拷贝自先前文档,具体信息应以实物为准 执行ipfs init初始化节点之后,会生成一个.ipfs的文件夹,用于存储相关的信息,比如节点ID、环境配置信息、数据存储等 如果使用

    2024年02月07日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包