写点什么

将 FSx for Lustre CSI 驱动程序与 Amazon EKS 结合使用

  • 2019-10-04
  • 本文字数:4133 字

    阅读完需:约 14 分钟

将 FSx for Lustre CSI 驱动程序与 Amazon EKS 结合使用

容器存储接口 (CSI)是在 Mesos 或 Kubernetes 等容器协调器上暴露存储的标准。CSI 为 AWS 等存储提供商提供了创建精简封套的机会,该封套允许 Kubernetes 集群自动预置和管理存储类的整个生命周期。

Kubernetes 中的存储

最初,Kubernetes 试图通过一系列计算来减轻运行容器化应用程序的低水平重复的繁重工作。早期,它引入了卷的概念(类似于当时的 Docker 卷)。通过添加生命周期管理,在配置 Pod 时,可连接 PersistentVolume,这将与内部 Cloud Controller 代码通信,而后者又反过来预置了开箱即用的必要存储机制。对于 AWS,此存储使用 Amazon Elastic Block Store (EBS) 构建。


大约在 2015 年的同一时间,Dell/EMC 的 {code} 团队开始开发一个名为 REX-Ray 的开源项目。REX-Ray 的目标是创建一个与协调器无关的存储解决方案。在 Kubernetes 社区增加支持之前,REX-Ray 在 Mesos 社区中成为热门,并且是 Mesosphere DC/OS 集群的受支持附加组件。在它流行之后,使用 REX-Ray 的经验重新编写该项目,并将其命名为容器存储接口 (CSI)。


Amazon Elastic Container Service for Kubernetes (Amazon EKS) 团队一直忙于为我们的所有存储解决方案构建 CSI 驱动程序,包括 Amazon FSx for Lustre:一个完全托管的文件系统,与 S3 集成并针对高性能计算 (HPC) 和机器学习等计算密集型工作负载进行了优化。由于 AWS FSx CSI 驱动程序可能对任何 Kubernetes 用户有用,因此我们已将其捐赠给 Kubernetes SIG-AWS。本文的其余部分将重点介绍如何将 AWS FSx CSI 驱动程序部署到 Amazon EKS 集群。

先决条件

在开始之前,您需要设置 Amazon EKS 集群。对于此博文,我们将在集群配置文件机制中使用 eksctl。首先,必须下载以下工具:


  • eksctl

  • kubectl

  • 安装所有必需的工具后,即可以开始启动 Amazon EKS 集群。在此示例中,您将在我们位于俄勒冈州的 us-west-2 中部署集群; 您可以将 AWS_REGION 替换为支持 Amazon EKS 的任何区域,并且还支持 Amazon FSx for Lustre。

步骤

部署集群

export AWS_REGION=us-west-2


在导出区域后,按照如下所示创建 ClusterConfig:


cat >cluster.yaml <<EOFapiVersion: eksctl.io/v1alpha4kind: ClusterConfigmetadata:  name: fsx-csi-driver  region: $AWS_REGION  version: 1.12
nodeGroups: - name: ng-1 desiredCapacity: 2EOF
复制代码


在创建 ClusterConfig 文件后,可使用 eksctl create cluster 命令创建集群:


eksctl create cluster -f cluster.yaml
复制代码


完成此操作大约需要 10 – 15 分钟时间,之后,便可获得可供使用的 Amazon EKS 集群。

AWS IAM 策略

首先,需要将 Amazon EKS 工作线程节点配置为具有管理 FSx 文件系统的适当权限。为此,请创建 policy.json 并将其添加到我们的工作线程节点 IAM 角色:


cat >policy.json <<EOF{  "Version": "2012-10-17",  "Statement": [    {      "Effect": "Allow",      "Action": [        "iam:CreateServiceLinkedRole",        "iam:AttachRolePolicy",        "iam:PutRolePolicy"       ],      "Resource": "arn:aws:iam::*:role/aws-service-role/s3.data-source.lustre.fsx.amazonaws.com/*"    },    {      "Effect": "Allow",      "Action": [        "fsx:*"      ],      "Resource": ["*"]  }]}EOF
复制代码


现在,您已编写 policy.json ,您可以使用 aws 命令行界面 (CLI) 创建 IAM 策略:


POLICY_ARN=$(aws iam create-policy --policy-name fsx-csi --policy-document file://./policy.json --query "Policy.Arn" --output text)
复制代码


接下来,将此策略添加到您的工作线程节点 IAM 角色:


INSTANCE_ROLE_NAME=$(aws cloudformation describe-stacks --stack-name eksctl-fsx-csi-driver-nodegroup-ng-1 --output text --query Stacks[0].Outputs[1].OutputValue | sed -e 's/.*\///g')aws iam attach-role-policy --policy-arn ${POLICY_ARN} --role-name ${INSTANCE_ROLE_NAME}
复制代码

安装 FSx CSI 驱动程序

将策略添加到实例 IAM 角色后,即可开始部署 FSx CSI 驱动程序。这将部署 StatefulSet、DaemonSet 以及允许 FSx CSI 驱动程序管理存储所需的所有 RBAC 规则:


kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/deploy/kubernetes/manifest.yaml
复制代码


您现在可以列出 kube-system 命名空间中的所有 Pod,并验证 fsx-csi-controller-0 和 fsx-csi-node-* Pod 是否正在运行:


kubectl get pods -n kube-system
复制代码


然后,您可以部署 StorageClass、PersistentVolumeClaim 和 Pod,以使用新的 FSx for Lustre 文件系统。

配置存储类

在部署 FSx StorageClass 之前,您需要收集并设置一些组件:


  1. 查找要预置进的 FSx for Lustre 文件系统的子网 ID。

  2. 创建一个允许集群访问 FSx 文件系统的安全组。

  3. 获取集群的 VPC ID:


VPC_ID=$(aws ec2 describe-vpcs --filters "Name=tag:Name,Values=eksctl-fsx-csi-driver/VPC" --query "Vpcs[0].VpcId" --output text)
复制代码


接下来,获取您的一个 Amazon EKS 集群子网 ID; 您的 Lustre 文件系统将在此子网内预置:


SUBNET_ID=$(aws ec2 describe-subnets --filters "[{\"Name\": \"vpc-id\",\"Values\": [\"$VPC_ID\"]},{\"Name\": \"tag:aws:cloudformation:logical-id\",\"Values\": [\"SubnetPrivateUSWEST2A\"]}]"  --query "Subnets[0].SubnetId" --output text)
复制代码


使用子网 ID,为 FSx 文件系统创建安全组,并添加从 192.168.0.0/16 CIDR 范围打开端口 988 的入站规则:


SECURITY_GROUP_ID=$(aws ec2 create-security-group --group-name eks-fsx-security-group --vpc-id ${VPC_ID} --description "FSx for Lustre Security Group" --query "GroupId" --output text)aws ec2 authorize-security-group-ingress --group-id ${SECURITY_GROUP_ID} --protocol tcp --port 988 --cidr 192.168.0.0/16
复制代码


一旦设置了子网 ID 和安全组 ID,就可以创建 StorageClass:


cat >storage-class.yaml <<EOFkind: StorageClassapiVersion: storage.k8s.io/v1metadata:  name: fsx-scprovisioner: fsx.csi.aws.comparameters:  subnetId: ${SUBNET_ID}  securityGroupIds: ${SECURITY_GROUP_ID}EOF
复制代码


然后将 StorageClass 部署到集群中:


kubectl apply -f storage-class.yaml
复制代码

配置持久卷声明

使用 CSI 驱动程序时,您仍将使用本机 Kubernetes PersistentVolumeClaim 执行此操作,但您将通过 storageClassName 键配置 StorageClass:


cat >claim.yaml <<EOFapiVersion: v1kind: PersistentVolumeClaimmetadata:  name: fsx-claimspec:  accessModes:    - ReadWriteMany  storageClassName: fsx-sc  resources:    requests:      storage: 3600GiEOF
复制代码


此新文件系统允许 accessMode 或 ReadWriteMany ,其大小为 3600Gi(此值可以是任何整数,最终值将四舍五入,扩展增量为 3,600 GiB)。然后将 PersistentVolumeClaim 部署到集群中:


kubectl apply -f claim.yaml
复制代码


在应用 PersistentVolumeClaim 之后,CSI 驱动程序会收到此资源的通知,并使用 Amazon FSx API 预置新的 FSx for Lustre 文件系统。在部署 Pod 之前,可以观察 PersistentVolumeClaim 资源并等待声明变为 Bound:


kubectl get persistentvolumeclaims fsx-claim -w
复制代码


使用 FSx for Luster 部署 Pod

虽然不必严格等待 PersistentVolumeClaim 变为 Bound 再部署 Pod,但很高兴看到每个步骤都有效。现在您可以创建将使用 FSx 文件系统的 Pod 清单:


cat >pod.yaml <<EOFapiVersion: v1kind: Podmetadata:  name: fsx-appspec:  containers:  - name: app    image: centos    command: ["/bin/sh"]    args: ["-c", "while true; do echo \"hello from FSx\" >> /data/out.txt; sleep 5; done"]    volumeMounts:    - name: persistent-storage      mountPath: /data  volumes:  - name: persistent-storage    persistentVolumeClaim:      claimName: fsx-claimEOF
复制代码


最后,您可以部署 Pod,它将每隔五秒将字符串 hello from FSx 写入 /data/out.txt:


kubectl apply -f pod.yaml

在 FSx for Lustre 中查看数据

通过部署 StorageClass、PersistentVolumeClaim 和 Pod,您可以查看正在写入 Lustre 文件系统的数据:


kubectl exec -ti fsx-app -- tail -f /data/out.txt
复制代码


如您所见,此操作每隔五秒将 hello from FSx 写入 FSx for Luster 文件系统中的 out.txt 文件:


清理

要清理集群,您需要执行以下步骤:


kubectl delete -f pod.yamlkubectl delete -f claim.yamlkubectl delete -f storage-class.yamlkubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/deploy/kubernetes/manifest.yamlaws ec2 delete-security-group --group-id ${SECURITY_GROUP_ID}aws iam detach-role-policy --role-name ${INSTANCE_ROLE_NAME} --policy-arn ${POLICY_ARN}eksctl delete cluster -f cluster.yaml
复制代码

总结

通过此集成,您现在可以为高性能计算工作负载动态预置 FSx for Lustre 文件系统,并将容器自动连接到此文件系统。您还可以使用动态预置从不同节点的多个 Pod 消耗相同的持久卷声明。如果您需要使用自动可用的数据集启动容器,例如加载机器学习培训数据集,您甚至可以使用 Dynamic Provisioning with Data Repository 将 StorageClass 连接到现有的 Amazon S3 存储桶。其他示例可以在 FSx for Lustre CSI 驱动程序文档中找到。


如果您有任何问题或功能请求,请在 Kubernetes SIG 存储库上为 AWS FSx CSI 驱动程序创建一个问题 – 欢迎您建言献策!


作者介绍:


Chris Hein


Chris Hein 是一位资深的开发者,倡导 Amazon Web Services 的 Kubernetes/EKS。加入 Amazon 之前,Chris 曾就职于众多规模不等的公司,如 GoPro、Sproutling 和 Mattel。有关 Chris 的更多信息,请访问 https://aws.amazon.com/blogs/opensource/author/heichris/,并通过 @christopherhein 关注他


阅读 Chris 撰写的更多博文。


Cheng Pan


cheng 是 AWS EKS 团队的软件开发工程师,是 EFS 和 FSX 等的 KubNETES CSI 驱动程序的主要维护者。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/using-fsx-lustre-csi-driver-amazon-eks/


2019-10-04 20:54901
用户头像

发布了 1855 篇内容, 共 123.9 次阅读, 收获喜欢 81 次。

关注

评论

发布
暂无评论
发现更多内容

一辈子也不容错过学习的微服务网关与用户身份识别,Zuul过滤器

Java 程序员 后端

不是吧阿sir!System,java面试问项目中遇到的技术难点

Java 程序员 后端

上线GitHub七天后就标星87,并发知识体系大全

Java 程序员 后端

不是吧工作3年你都不知道这份超详细JVM内存结构,怎么涨薪?

Java 程序员 后端

两道面试题,带你解析Java类加载机制,零基础也能看得懂

Java 程序员 后端

为了你们不错过金三银四,我真是操碎了心!RabbitMQ面试真题来了

Java 程序员 后端

为什么说简历很重要?怎么才能写出一份完美的简历?这篇文章你值得拥有

Java 程序员 后端

七、Redis持久化的两种方式RDB和AOF理解,mybatis接口实现原理

Java 程序员 后端

世界顶级SQL技术专家呕心沥血半年才整理出这份:SQL优化核心思想笔记,手慢无

Java 程序员 后端

两年Java开发经验,混迹“中浩科技,java全套百度云视频

Java 程序员 后端

明道云在保险经纪公司中的应用场景例举

明道云

不是吧阿sir,你这业务太熟了吧,震惊面试官第八年,献给真心想学Java的打工人

Java 程序员 后端

15个问题自查真的了解java编译优化吗

华为云开发者联盟

Java 编译 对象 语义 符号表

为什么分布式一定要有Redis?,java面试逻辑题三个开关三盏灯

Java 程序员 后端

为什么要谨慎使用Arrays-asList、ArrayList的subList?

Java 程序员 后端

一见面就脱裤子?这份Spring Cloud微服务笔记应对面试怎么这么骚?

Java 程序员 后端

三年Java开发经验,四面阿里成功斩获offer,分享面经,java面试问项目部署

Java 程序员 后端

不能错过的分布式ID生成器(Leaf-),积累总结

Java 程序员 后端

为了进大厂,我深扒了阿里字节等大厂面经,总结了50道必考题

Java 程序员 后端

丹丹学妹哭着对我说:学长,JVM如何实现动态类型语言支持的呢

Java 程序员 后端

为什么建议大家使用 Linux 开发?爽(外加七个感叹号,java高级编程实训总结

Java 程序员 后端

三年Java开发每天增删改查,终于靠着这份面试题,成功上岸京东

Java 程序员 后端

不是吧工作3年你都不知道这份超详细JVM内存结构,怎么涨薪?(1)

Java 程序员 后端

世界顶级Linux技术大神,耗时一年力作1300页Linux开发实战

Java 程序员 后端

两年半,50W的offer,三本,springboot运行原理生命周期

Java 程序员 后端

三面美团Java岗,HR现场直接发offer,他是横着走出来的

Java 程序员 后端

三面阿里被灵魂追问,出门就被Java面试官逼哭!,java虚拟机的运行原理

Java 程序员 后端

为什么大公司要使用微服务?(建议收藏),java基础案例教程第二版答案

Java 程序员 后端

三、Redis在SpringBoot中使用案例,java程序员面试笔试真题与解析

Java 程序员 后端

不是吧阿sir,你这计算机网络也太熟了,震惊面试官一整年

Java 程序员 后端

业务中台的困境、及可能的解,java基础笔试题判断题

Java 程序员 后端

将 FSx for Lustre CSI 驱动程序与 Amazon EKS 结合使用_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章