在云原生环境中,非常重要的环节之一就是提供一个可以使用标准协议与客户端交互的存储系统。大家可能会马上联想到简单存储服务S3(SimpleStorageService)。S3是一个庞大的协议,涵盖了存储桶、对象、密钥、版本控制、ACL和区域等关键概念。
Longhorn是Kubernetes的分布式块存储系统,除了支持块存储以外,还提供了文件系统能力。那么,Longhorn能否充当S3的服务器,并提供单一的AWSS3API接口来访问后端数据存储呢?
当然可以!但是你可能需要一个S3网关来向外部客户端提供对数据的访问权限。
s3gw项目让这一切设想变的可行!
什么是s3gw?
s3gw是一项与S3兼容的服务,专注于在任何PVC支持的Kubernetes环境中进行部署,包括Longhorn。s3gw自成立以来,关注重点一直在云原生部署上。但是,如果附加了某种形式的存储,s3gw是可以部署在许多场景中的。
s3gw基于Ceph的RADOSGW(RGW),但它是作为独立服务运行的,没有RADOS集群,并且依赖于SUSE存储团队持续开发的存储后端。目前s3gw仍处于开发的早期阶段,但它已经可以用于测试和使用一些S3功能。
以上介绍来自s3gw官网的直译。大家可以把s3gw看作一个减配版的minio。只不过s3gw为了补充Rancher产品组合,目前将重心放在和Longhorn的适配上,但该工具不限于Rancher产品。另外,s3gw采用的是ApacheLicense,Version2.0,而minio部分组件采用的是GNUAGPLv3license。
接下来,本文将介绍如何安装和使用s3gw。
部署s3gw
s3gw依赖一个基础的Kubernetes集群和Longhorn。本次介绍将通过Rancher创建一个下游K3s集群,然后通过Rancher应用商店在下游K3s集群中安装Longhorn和s3gw。
部署Rancher和K3s
为了节省篇幅,部署Rancher和K3s的步骤就不在本文中详细描述,大家可参考Rancher和K3s文档进行部署。
操作系统:Ubuntu20.04.5LTS
Rancher版本:rancher/rancher:v2.7.0
下游K3s版本:v1.24.8+k3s1
s3gwchart:0.8.0
Longhornchart:101.1.0+up1.3.2
部署Longhorn
通过Rancher部署Longhorn非常简单,只需要进入下游K3s集群,在Rancher仪表板左侧Apps下的Charts选择Longhorn便可开始部署Longhorn:
安装非常简单,你不需要更改chart中的任何默认值。最后,如果一切顺利,你应该会看到Rancher的控制台显示:
安装Longhorn后,你只需单击左侧Rancher菜单中的Longhorn菜单即可重定向到Longhorn的仪表板:
新安装的Longhorn显示仍然没有应用程序使用持久卷。
部署s3gw
和Longhorn一样,你仍然可以使用Apps来安装S3gw,你会在合作伙伴存储库中找到可用的s3gw,如下所示:
你也可以为s3gw设置一些自定义的参数。
本次Demo取消了CreateStorageClass选项,并且修改StorageClass为longhorn。因为Longhorn已经通过RancherApp进行部署,并且名称为longhorn。
安装完成后,如果一切顺利,你应该会看到Rancher的控制台显示:
在Longhorn仪表板上,你可以验证应用程序是否正在使用Longhorn持久卷:
以上,我们就完成了s3gw的安装,接下来,我们就可以验证S3gw的使用!
验证s3gw
默认情况下,s3gwchart配置一个ingress,该ingress指向具有FQDN的S3网关:s3gw.local。因此,你必须在/etc/hosts中定义s3gw.local指向主机物理接口之一的IP地址。
如果部署s3gw时启用了S3UI,那么也需要将S3UI的FQDN加到映射文件中,例如:
s3gw.local
s3gw-ui.local
要测试S3 gateway,你可以依赖s3cmd,它是一个流行的命令行S3客户端。
接下来,你需要做的就是创建一个目录,将s3cmd.cfg 放入其中,最后调用s3cmd。
创建bucket
$ s3cmd -c s3cmd.cfg mb s3://foo
上传文件到bucket中
让我们创建一个1mb的文件,填充一些随机数据并将其放入存bucket中:
$ dd if=/dev/random bs=1k count=1k of=obj.1mb.bin
$ s3cmd -c s3cmd.cfg put obj.1mb.bin s3://foo
列出bucket中包含的对象
$s3cmd-c s3cmd.cfg ls s3://foo
s3://foo/obj.1mb.bin
删除bucket
$ s3cmd -c s3cmd.cfg rm s3://foo/obj.1mb.bin
Rancher备份对接S3gw
Rancher可以通过rancher-backup operator来备份和恢复任何Kubernetes集群上的Rancher,备份文件可以保存在S3兼容的对象存储中。这样我们就可以利用rancher-backup operator将Rancher备份通过s3gw存储在longhorn中。
要实现以上的需求,只需要在创建Rancher备份时选择Use an S3-compatible object store,并设置s3gw的连接参数即可,以下是示例:
备份创建成功后,可以通过s3cmd确认Rancher备份是否上传到s3gw:
$ s3cmd -c s3cmd.cfg ls s3://foo
s3://foo/obj.1mb.bin
s3://foo/rancher-backup-Z.tar.gz
S3gw UI
s3gw Web UI提供了一种与s3gw服务交互的直观方式,包括用户和存储桶管理,以及对象资源管理器。
要访问s3gw Web UI,可以使用在chart中配置的S3 UI FQDN访问S3 Web UI(本例为:s3gw-ui.local),并使用chart中设置的Access key和Secret key作为凭证登录S3 Web UI(本例为:test/test):
下面是当前UI版本的一些屏幕截图,但请记住,我们仍在积极开发它,它的功能还不完整。
总结
本文主要介绍了如何在Rancher中安装Longhorn/s3gw以及使用S3网关系统。K3s、Rancher和Longhorn是建立一个具有弹性和高性能存储环境的强大工具,如果你需要将存储暴露给外部客户端,那么s3gw是一个非常好的选择。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。