写点什么

将 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:54913
用户头像

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

关注

评论

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

orbeon form 的架构简介 - 如何访问用户通过 form 存储的数据

汪子熙

SAP Hybris commerce form 9月月更

Github星标百万!终于有人将Spring技术精髓收录成册

Geek_0c76c3

Java 数据库 开源 程序员 开发

每日算法刷题Day3-起始时间转换、二次方根、while连续输入、斐波那契思路

timerring

刷题 算法题 9月月更

每日算法刷题Day6-循环相克令,字符串插入,单次字符出现

timerring

算法 刷题 9月月更

回归理性,直面低代码

华为云开发者联盟

云计算 后端 软件开发 低代码 企业号九月金秋榜

Java进阶(三十六)深入理解Java的接口和抽象类

No Silver Bullet

Java 接口 抽象类 9月月更

极狐GitLab 15.4 | 四大专享更新、更能打的CI/CD,近 50 项更新全面来袭!

极狐GitLab

DevOps 运维 Harbor CI/CD 极狐GitLab

每日算法刷题Day4-完全数、分情况输出、平方矩阵、斐波那契数列匹配输出

timerring

刷题 算法题 9月月更

移动应用平台有哪些优势?能为企业带来什么好处?

BeeWorks

参加前端培训哪种方式比较靠谱

小谷哥

每日算法刷题Day5-平方矩阵II和III、蛇形矩阵图解

timerring

刷题 算法题 9月月更

面试中经常问到的几个问题,快来看看能答对几道吧(Java)

钟奕礼

编程 java;

再添重磅理事成员!麒麟软件、浪潮信息、中科曙光、新华三加入龙蜥

OpenAnolis小助手

龙蜥社区 新华三 中科曙光 麒麟软件 浪潮信息

参加java培训学习难不难?

小谷哥

web前端开发技术培训需要学习多久

小谷哥

MSE 结合 Dragonwell,让 Java Agent 更好用

钟奕礼

编程 java; MSE

安全、可靠、稳定的企业IM,WorkPlus是政企工作的首选

BeeWorks

膜拜大佬!分享一份京东T9大牛私藏文档:从NIO一直学到Netty

Geek_0c76c3

Java 数据库 开源 程序员 开发

java技术线下面授培训学习好还是自学好

小谷哥

得物基于 StarRocks 的 OLAP 需求实践

得物技术

数据库 开源 OLAP 开发工具 StarRocks

Java面试:你了解HashMap吗?

钟奕礼

编程 面试 java;

每日算法刷题Day2-向上取整、三角形条件、字符串拼接匹配、三数排序思路

timerring

算法 刷题 9月月更

MASA Stack 第五期社区例会

MASA技术团队

MASA Framewrok MASA MASA Blazor

阿里P9师傅亲传98K+星的MySQL性能优化金字塔法则手册助我升职P7

Geek_0c76c3

Java 数据库 开源 程序员 架构

Java开发学习----SpringBoot三种配置文件解析

钟奕礼

编程 Spring Boot java;

每日算法刷题Day1-隐式转换与精度丢失

timerring

算法 刷题笔记 9月月更

文科生大数据培训需要注意的问题

小谷哥

Redis进阶知识点(可学习,可复习,可面试)

钟奕礼

编程 redis 底层原理

爱番番企业查询结果优化实践

百度Geek说

大数据 搜索引擎 elasticsearch

每日算法刷题Day7-比较字符串大小,去掉多余的空格,单词替换

timerring

算法 刷题 9月月更

从 0 到 1 上手阿里云服务器 ECS(三)

六月的雨在InfoQ

MySQL RDS ECS 云数据库RDS for MySQL 9月月更

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