NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

发布了 1836 篇内容, 共 92.5 次阅读, 收获喜欢 73 次。

关注

评论

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

To B第六年,腾讯过分温柔

脑极体

腾讯

软件测试/测试开发/接口测试丨Android 高版本无法抓取 HTTPS

测试人

软件测试 自动化测试 接口测试 测试开发

消息队列常见的使用场景

程序员大彬

Java、 消息队列

软件测试/测试开发丨接口测试用例之间参数调用

测试人

软件测试 自动化测试 接口测试 测试开发 测试用例

网站SEO排名不稳定怎么办?

海拥(haiyong.site)

三周年连更

Kubernetes 多集群网络方案系列 2 -- Submariner 监控

Se7en

StoreKit:iOS应用内推广其他App

珲少

软件测试/测试开发丨Python 算法与数据结构面试题

测试人

Python 软件测试 面试题 自动化测试 测试开发

企业过等保不再难,华为云提供一站式安全解决方案

秃头也爱科技

架构实战营-模块2-作业

Geek_e948d4

Claude,一个可以无需魔法访问的ChatGPT

派大星

ChatGPT Claude

如何成为一名数据分析师(二)——统计学之描述性统计

Data 探险实验室

数据分析 数据 数据分析师

是什么影响了MySQL索引B+树的高度?

架构精进之路

MySQL 数据库 三周年连更

AI日课@20230415:Stable Diffusion入门学习;ChatGPT的成本计算

无人之路

ChatGPT

【坚果派-坚果】OpenHarmony Native开发【一】

坚果

OpenHarmony 三周年连更 napi

JS字符串的截取出现的bug

格斗家不爱在外太空沉思

JavaScript ES6 三周年连更

这一次,带你玩转gRPC框架

海风极客

gRPC Go 语言 三周年连更

浅谈你对单例类中使用volatile关键字的理解 | 超级详细,建议收藏

bug菌

volatile volatile原理 三周年征文 三周年连更

Java面向对象编程中级

timerring

Java

【云原生】Docker—Dockerfile写法与用法以及dockerfile简介与构建镜像详解【附加实战】

A-刘晨阳

Linux Dockerfile 三周年连更

分布式事务的21种武器 - 2

俞凡

架构

3d渲染和动画制作:KeyShot Pro mac中文版

真大的脸盆

Mac Mac 软件 渲染器 动画制作 渲染工具

Java房屋出租系统

timerring

Java

为数据安全保驾护航,华为云助力企业快速安全过“等保”

秃头也爱科技

软件测试丨Selenium 自动侦测浏览器版本并下载对应的浏览器驱动

测试人

软件测试 自动化测试 测试开发 selenium

一文上手文档智能Document Mind

六月的雨在InfoQ

OCR 文档理解 文档转换 三周年连更 Document Mind

挑战 30 天学完 Python:Day7 数据类型 - 集合 set

MegaQi

Python 挑战30天学完Python 三周年连更

iOS MachineLearning系列(1)——简介

珲少

Hyperledger(超级账本)的worldstate和SAP CRM的CRMD_CUMULAT_H

Jerry Wang

超级账本 hyperledger 三周年连更

NoClassDefFoundError 和 ClassNotFoundException 有什么区别 | 社区征文

共饮一杯无

NoClassDefFoundError 三周年连更 ClassNotFoundException

Vue3 响应式语法糖

程序员海军

Vue 3 三周年连更

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