Longhorn项目是Rancher Labs推出的开源的基于云和容器部署的分布式块存储新方式。Longhorn遵循微服务的原则,利用容器将小型独立组件构建为分布式块存储,并使用容器编排来协调这些组件,造成弹性分布式系统。前端
2017年4月Longhorn初发布。2018年3月Longhorn v0.2发布,支持任何Kubernetes集群的持久化存储实现。过去一个多季度以来,Longhorn研发团队基于用户的反馈与建议,进一步打磨Longhorn,并于今天正式发布Longhorn v0.3,在新版本中带来了新UI、CSI支持、S3备份目标、在多磁盘上提供基于容量的调度、基础镜像功能、iSCSI前端支持、零停机升级等酷炫功能。git
Why Longhorngithub
现在,基于云和容器的部署规模日益扩大,分布式块存储系统也正变得愈来愈复杂,单个存储控制器上的volume数量在不断增长。2000年代初,存储控制器上的volume数量只有几十个,但现代云环境却须要数万到数百万的分布式块存储卷。存储控制器变成了高度复杂的分布式系统。web
分布式块存储自己比其余形式的分布式存储(如文件系统)更简单。不管系统中有多少volume,每一个volume只能由单个主机进行装载。正因如此,咱们设想,是否能够将大型块存储控制器分割成多个较小的存储控制器?若想要如此分割,咱们须要保证这些volume仍然是从公共磁盘池构建的,而且咱们须要有办法来编排这些存储控制器,让它们能够协同工做。c#
为了将这一想法发挥到极限,咱们建立了Longhorn项目。这是一个咱们认为值得探索的方向,每一个控制器上只有一个volume,这将大大简化存储控制器的设计。由于控制器软件的故障域仅限于单个volume,因此控制器若崩溃,也只会影响一个volume。后端
Longhorn充分利用了近年来关于如何编排大量的容器和虚拟机的核心技术。例如,Longhorn并无构建一个能够扩展到100,000个volume的高度复杂的控制器,而是出于让存储控制器简单轻便的考虑,建立了100,000个单独的控制器。而后,咱们能够利用像Kubernetes这样的最早进的编排系统来调度这些独立的控制器,共享一组磁盘中的资源,协同工做,造成一个弹性的分布式块存储系统。微信
Longhorn基于微服务的设计还有不少其余优点。由于每一个volume都有本身的控制器,在升级每一个volume的控制器和replica容器时,是不会致使IO操做明显的中断的。Longhorn能够建立一个长期运行的工做来编排全部live volume的升级,同时确保不会中断系统正在进行的操做。为确保升级不会致使意外的问题,Longhorn能够选择升级一小部分volume,并在升级过程当中出现问题时回滚到旧版本。这些作法在现代微服务应用中已获得普遍应用,但在存储系统中并不常见。咱们但愿Longhorn能够助力于微服务在存储领域的更多应用。websocket
Longhorn功能概述网络
共享资源池:将本地磁盘或安装在计算或专用存储主机中的网络存储造成共享资源池。框架
为容器和虚拟机建立块存储卷:你能够指定volume的大小,IOPS的需求,以及你想要的跨主机的同步replica的数量(这里的主机是指那些为volume提供存储资源的主机)。replica是在底层磁盘或网络存储上精简配置的。
为每一个volume建立一个专用的存储控制器:这多是与大多数现有的分布式存储系统相比,Longhorn最具特点的功能。大多数现有的分布式存储系统一般采用复杂的控制器软件来服务于从数百到数百万不等的volume。但Longhorn不一样,每一个控制器上只有一个volume,Longhorn将每一个volume都转变成了微服务。
跨计算或存储主机调度多个replica:Longhorn会监测每个replica的健康情况,对问题进行维修,并在必要时从新生成replica。
以Docker容器的形式操做存储控制器和replica:例如,一个volume有三个replica,就意味着有四个容器。
为每一个volume分配多个存储“前端”:常见的前端包括Linux内核设备(映射到/ dev / longhorn)和iSCSI目标。 Linux内核设备适用于支持Docker volume,而iSCSI目标更适合支持QEMU / KVM和VMware volume。
建立volume快照和AWS EBS风格的备份:您能够为每一个volume建立多达254个快照,这些快照能够逐个备份到NFS或S3兼容的辅助存储中。只有更改的字节会在备份操做期间被复制和存储。
指定按期快照和备份操做的计划:您能够指定这些操做的频率(每小时,天天,每周,每个月和每一年)、执行这些操做的确切时间(例如,每一个星期日凌晨3:00),以及保留多少个循环快照和备份集。
Longhorn v0.3新功能
全新设计的UI
Longhorn v0.3的UI获得了极大的优化,为用户提供了更为优异的操做体验:
用户能够在仪表板中查看系统的状态
为volume添加了多选和组操做
支持websocket支持,用户再也不须要刷新页面来更新UI。当后端状态发生变化时,UI会自动更新
容器存储接口(CSI)
在Longhorn v0.2中,有很多用户反馈Flexvolume driver目录位置的配置错误问题,这可能致使Kubernetes没法链接到Longhorn Driver。Kubernetes不提供有关Flexvolume driver位置的信息,用户须要手动操做识别。在v0.3中,咱们添加了对最新Container Storage Interface的支持,该接口无需事先进行配置便可安装。关于如何使用CSI驱动程序安装Longhorn的详细信息,可参见此连接:
https://github.com/rancher/longhorn/tree/v0.3-rc#kubernetes-driver-requirements。
若您计划继续使用Flexvolume而且必须弄清楚volume插件的位置,咱们为您准备的这个脚本能够提供一些帮助:
https://github.com/rancher/longhorn/tree/v0.3-rc#kubernetes-driver-requirements
以S3做为备份目标
Longhorn的一个很关键的功能就是volume备份,它能够备份本地快照并将其传输到辅助存储,如NFS。v0.2发布以后,用户呼声最高的、但愿能在下一版本中实现的功能之一,就是支持使用S3做为备份目标。v0.3中,这一功能已实现!请参阅此处了解如何使用S3做为Longhorn的备份目标:
https://github.com/rancher/longhorn/blob/v0.3-rc/README.md#backup。
在多磁盘上提供基于容量的调度
在Longhorn v0.2中,不管可用的磁盘空间如何,Longhorn v0.2都会在磁盘上随机放置volume。而v0.3支持每一个节点多个磁盘,而且咱们重写了调度程序,现提供基于容量的调度。用户如今能够启用/禁用任何节点或磁盘的调度,并知晓有多少磁盘正在使用。咱们还为用户提供了各类选项,以自定义Longhorn如何在可用磁盘空间之上调度卷。请参阅此处了解详情:
https://github.com/rancher/longhorn/blob/v0.3-rc/docs/multidisk.md
基础镜像功能
v0.3支持基础镜像功能。Longhorn中的基础镜像是一个打包的Docker镜像,遵循RancherVM(https://github.com/rancher/vm )镜像规范。所以,若是用户有一些只读镜像,但愿其在多个卷之间共享,则可使用基础镜像功能来完成。请参阅此处了解如何建立和使用基础镜像功能:
https://github.com/rancher/longhorn/blob/v0.3-rc/docs/base-image.md。
iSCSI前端
Longhorn v0.3支持iSCSI前端。之前咱们只支持使用块设备做为前端来访问volume内容。咱们相信添加对iSCSI前端的支持,将有利于将iSCSI做为块设备接口的传统虚拟机管理程序。有关iSCSI前端支持的详细信息,请参见此处:
https://github.com/rancher/longhorn/blob/v0.3-rc/docs/iscsi.md。
零停机的引擎升级
在v0.3中,咱们设置了一个框架,在升级Longhorn引擎时能够不影响volume。Longhorn引擎包括一个控制器和多个副本。如今,当volume运行时,咱们能够换掉旧版本的控制器和副本,并在运行中添加新版本。如此一来,您能够实如今volume零停机的状况下部署新版本的Longhorn存储软件。
但须要注意的是,零停机升级适用于从v0.3升级至将来的因此新版本,但不适用于从v0.2升级到v0.3。
如何升级Longhorn
利用Kubernetes的特性,Longhorn v0.3的全部软件组件均可以升级。请在此处查看升级说明:https://github.com/rancher/longhorn/blob/v0.3-rc/docs/upgrade.md。
使用Rancher Catalog安装了Longhorn v0.1的用户请务必注意,请勿在UI中使用upgrade按钮。目前暂没法经过Rancher Catalog为早期版本的Longhorn进行一键自动升级,请按照上面的说明来手动升级旧的Longhorn系统。
一切开源,欢迎体验
始终秉承开源理念的Rancher Labs,推出的Longhorn依然是100%的开源软件。您能够在GitHub上下载Longhorn:https://github.com/rancher/longhorn ,也能够经过Rancher Catalog部署它。
直到今日,Longhorn依然在持续不断的优化更新之中,咱们暂不倡议您将其用于生产环境。欢迎在GitHub上或Rancher微信群中为Rancher团队提供宝贵的意见与反馈❤️