什么是 CloudLab
OSDI、FAST 或者 SOSP 顶会文章里经常能看到作者是在 CloudLab 上做实验的。这是美国的大学和科研机构联合搭建的裸金属服务器集群,对科研工作者是免费开放使用的。和普通的云服务器不同的是,在上面申请的节点都是裸金属的,没有任何虚拟化,研究人员可以直接以 root 权限操控物理硬件。而且在 CloudLab 机型文档可以看到,它提供的硬件种类多样,有带 GPU 的也有带 FPGA 的机型,甚至还有带 BlueField 智能网卡的机器,方便科研人员探索不同的计算机系统架构。每次申请新的节点时都会恢复机器上硬件和软件的配置,所以也不用担心研究过程会对其他人造成影响。如果自己不小心搞砸了配置,也可以直接重新创建节点来恢复初始实验环境。
由于 CloudLab 提供了统一的硬件配置,所以在上面提供可复现的完整系统也很方便。其他研究人员可以直接在网站上用相同的机型配置创建相同的实验集群,然后使用预设好的磁盘镜像或者脚本就能方便地复现实验了。这样也不需要自己提供服务器让别人连进来做实验了。
如果你们实验室也有裸金属服务器想像 CloudLab 一样管理,可以参考我之前发布的OpenStack Ironic 裸金属服务器集群搭建指南用 OpenStack 搭建自己的集群。
注册使用 CloudLab
使用 CloudLab 之前需要注册账号。在 Personal Information 填个人信息,上传 SSH 秘钥方便之后连接服务器,然后在 Project Information 填入需要加入/创建 Project 的信息。建议使用 edu 邮箱。
CloudLab 不是自由注册的,而是需要加入 Project。每个 Project 都有自己的管理员,需要管理员审批之后账号才能生效。如果你所在的实验室已经有人是 Project 的管理员,那么选择 Join Existing Project 然后填上 Project 的名称,通知管理员审批通过即可。
如果还没有 Project,则选择 Start New Project 创建新的 Project,之后会有 CloudLab 的管理员来审核你的注册请求。ID 填 Project 的名称,以后别人就可以用这个 ID 加入你的 Project。Title 则简单描述你的 Project,比如实验室的名称,或者研究的课题。URL 可以填实验室组织的主页,或者 Github 地址都可以。Description 则是需要详细描述你的 Project 的用途,这里可以简单介绍下你的研究方向或者工作,打算用 CloudLab 做什么研究等等。
第一个创建 Project 的账户默认就是管理员,可以审批其他加入 Project 的请求。CloudLab 建议是教授或者长期在职的人来创建 Project,否则可能不会通过创建 Project 的申请。
开始使用 CloudLab
账号注册并审核通过后就可以登录并使用 CloudLab 的硬件资源了。需要注意的是 CloudLab 不太适合炼丹之类的应用,更多地还是适合系统方向的研究者使用。而且由于 CloudLab 提供了对底层硬件的控制权,有可能你的操作会波及到同一个交换机或者集群的其他用户(比如不小心搞挂了网络或者发起了 DDoS),如果造成严重后果的话会封号。同时 CloudLab 也不能拿来运行 Web 服务或者挖矿等,违规者也会封号。
CloudLab 上申请节点是通过创建 Experiment 来实现的。在新建实验界面可以选择需要使用的 Profile。Profile 可以理解为对集群的一系列预创建的配置,比如网络拓扑,硬件配置等,想要快速体验的话可以选默认的 small-lan 配置文件,这个是数个节点连接到同一个局域网的配置。
不同 Profile 有不同可以配置的参数。small-lan 提供了一些基本参数,例如节点数量,系统镜像,指定物理节点机型等。
图里是启动 1 个节点,镜像使用 CentOS 8 Stream,并且指定使用 c6525-25g 这个机型。可用机型在 CloudLab 机型文档可以查到。由于集群资源有限,可能你指定的节点类型不一定有空闲机器,需要到集群资源状态页面查询你想要的机器有没有空闲节点。如果当前时间没有,可以使用预约的功能来预留资源。
这里可以填实验的名称,还有针对单独的节点定制一些参数等。确认无误之后就可以点下一步开始实验了。
实验可以在指定时间之后开始(通常是配合预约资源功能使用)也可以马上开始,实验时长默认最长是 16 小时,如果需要更长需要在实验开始之后申请延长。
之后就会开始实验,分配节点,初始化机器。
初始化的时间会比较长,一般在 5~10 分钟。启动的时候可以进入节点的 Console 查看启动进程:
如果有别的需要可以在 Console 界面和启动过程交互。
节点启动完成之后可以直接在 Console 登录到 root 账户操作,或者使用列表里的 ssh 命令连接到服务器。sudo 默认是免密的。之后就可以自由的进行实验了。
实验在到期之后就会默认释放所有机器,并删除磁盘上的内容,所以如果有代码或者实验结果需要保存的,需要自行上传到云服务或者用 scp 保存下来。在 /proj
目录下也有网络挂载的持久化共享存储可以使用。
节点默认是连通外网的,下载 Github 或者装 RPM 什么的都飞快。装好软件包之后,为了节省时间,可以创建磁盘镜像,下次启动的时候就可以用这个磁盘镜像快速拉起相同的环境了:
创建磁盘镜像之后可以在镜像列表查到自己创建的所有镜像,并且会有一个 URN 全局资源标识符(类似 urn:publicid:IDN+utah.cloudlab.us+image+xxxx-PG0:lustre-2.15.3
)
在创建实验的时候,我们可以 Copy Profile,然后修改 small-lan 这个 Profile 的代码,把自己的镜像的 URN 添加进去,之后就能在创建实验的时候使用了: