资讯专栏INFORMATION COLUMN

Longhorn:实现Kubernetes集群的持久化存储

孙吉亮 / 1827人阅读

摘要:近日,版本发布了,它可支持任何集群的持久化存储实现如今,基于云和容器的部署规模日益扩大,分布式块存储系统也正变得越来越复杂,单个存储控制器上的数量在不断增加。

Longhorn项目是Rancher Labs推出的开源的基于云和容器部署的分布式块存储新方式。Longhorn遵循微服务的原则,利用容器将小型独立组件构建为分布式块存储,并使用容器编排来协调这些组件,形成弹性分布式系统。

自2017年4月Longhorn项目发布以来,人们对在Kubernetes集群上运行Longhorn存储就产生了极大的兴趣。近日,Longhorn v0.2版本发布了,它可支持任何Kubernetes集群的持久化存储实现


Why Longhorn

如今,基于云和容器的部署规模日益扩大,分布式块存储系统也正变得越来越复杂,单个存储控制器上的volume数量在不断增加。2000年代初,存储控制器上的volume数量只有几十个,但现代云环境却需要数万到数百万的分布式块存储卷。存储控制器变成了高度复杂的分布式系统。

分布式块存储本身比其他形式的分布式存储(如文件系统)更简单。无论系统中有多少volume,每个volume只能由单个主机进行装载。正因如此,我们设想,是否可以将大型块存储控制器分割成多个较小的存储控制器?若想要如此分割,我们需要保证这些volume仍然是从公共磁盘池构建的,并且我们需要有办法来编排这些存储控制器,让它们可以协同工作。

为了将这一想法发挥到极限,我们创建了Longhorn项目。这是一个我们认为值得探索的方向,每个控制器上只有一个volume,这将大大简化存储控制器的设计。因为控制器软件的故障域仅限于单个volume,所以控制器若崩溃,也只会影响一个volume。

Longhorn充分利用了近年来关于如何编排大量的容器和虚拟机的核心技术。例如,Longhorn并没有构建一个可以扩展到100,000个volume的高度复杂的控制器,而是出于让存储控制器简单轻便的考虑,创建了100,000个多带带的控制器。然后,我们可以利用像Swarm、Mesos和Kubernetes这样的最先进的编排系统来调度这些独立的控制器,共享一组磁盘中的资源,协同工作,形成一个弹性的分布式块存储系统。

Longhorn基于微服务的设计还有很多其他优势。因为每个volume都有自己的控制器,在升级每个volume的控制器和replica容器时,是不会导致IO操作明显的中断的。 Longhorn可以创建一个长期运行的工作来编排所有live volume的升级,同时确保不会中断系统正在进行的操作。为确保升级不会导致意外的问题,Longhorn可以选择升级一小部分volume,并在升级过程中出现问题时回滚到旧版本。这些做法在现代微服务应用中已得到广泛应用,但在存储系统中并不常见。我们希望Longhorn可以助力于微服务在存储领域的更多应用。

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),以及保留多少个循环快照和备份集。

支持任何Kubernetes集群的持久性存储

Longhorn v0.2 支持任何Kubernetes集群的持久性存储。一旦被部署到Kubernetes集群上,Longhorn会自动地将Kubernetes集群中所有节点上全部可用的本地存储聚为集群,产生复制的以及分布式的块存储。你可以在Longhorn volume上执行快照和备份操作,并将它们同步复制到多个节点上。

我们已经移植了Longhorn Manager作为Kubernetes Controller。所有Longhorn状态都存储为Custom Resource Definitions(自定义资源定义,CRD)。Longhorn也不需要多带带的etcd服务器。另外,Longhorn Manager公开了执行Longhorn volume操作和快照 / 备份操作的API,这些API将在Longhorn UI和Kubernetes Flexvolume驱动程序执行操作的过程中使用。

运行下面的这条指令,就可以在你的Kubernetes集群上部署整个Longhorn存储系统:

kubectl create -f https://raw.githubusercontent.com/rancher/longhorn/v0.2/deploy/longhorn.yaml

如果你使用的是GKE,请参考这里:https://github.com/rancher/lo...

部署之后,你可以在UI界面通过查看Kubernetes服务找到适合的IP:kubectl -n longhorn-system get svc

现在你可以使用 100.200.200.123 或通过 :12345 访问UI。

Longhorn提供了Kubernetes的完全集成。

你可以像下面这样通过Longhorn用卷备份创建一个pod:

apiVersion: v1
kind: Pod
metadata:
  name: volume-test
  namespace: default
spec:
  containers:
  - name: volume-test
    image: nginx:stable-alpine
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: voll
      mountPath: /data
    ports:
    - containerPort: 80
  volumes:
  - name: voll
    flexVolume:
      driver: "rancher.io/longhorn"
      fsType: "ext4"
      options:
        size: "2Gi"
        numberOfReplicas: "3"
        staleReplicaTimeout: "20"
        fromBackup: ""

Longhorn还支持动态的provisioner。比如,你可以在Kubernetes像这样定义一个StorageClass:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: longhorn
provisioner: rancher.io/longhorn
parameters:
  numberOfReplicas: "3"
  staleReplicaTimeout: "30"
  fromBackup: ""

接着创建一个PVC(PersistentVolumeClaim)并在Pod中使用它:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: longhorn-volv-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: longhorn
 resources:
    requests:
      storage: 2Gi
---
apiVersion: v1
kind: Pod
metadata:
  name: volume-test
  namespace: default
spec:
  containers:
  - name: volume-test
    image: nginx:stable-alpine
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: volv
      mountPath: /data
    ports:
    - containerPort: 80
  volumes:
  - name: volv
    persistentVolumeClaim:
      claimName: longhorn-volv-pvc
一切开源

始终秉承开源理念的Rancher Labs,推出的Longhorn依然是100%的开源软件。您可以在GitHub上下载Longhorn:
https://github.com/rancher/lo...

直到今日,Longhorn依然在持续不断的优化更新之中。欢迎在GitHub上或Rancher微信群中为Rancher团队提供宝贵的意见与反馈❤️

微信号:RancherLabs

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/32639.html

相关文章

  • Longhorn全解析及快速入门指南

    摘要:项目现已正式发布这是一个基于云和容器部署的分布式块存储新方式。这可能是与大多数现有的分布式存储系统相比,最具特色的功能。快速入门指南易于安装和使用。使用或术语,管理器容器是一项全球性服务。目前,我们不保留额外的元数据来指示使用哪些。 Longhorn项目现已正式发布!这是一个基于云和容器部署的分布式块存储新方式。Longhorn遵循微服务的原则,利用容器将小型独立组件构建为分布式块存储...

    张春雷 评论0 收藏0
  • 推进企业容器化持续创新,Rancher ECIC千人盛典完美收官

    摘要:年月日,由以下简称主办的第三届企业容器创新大会以下简称在北京喜来登大酒店盛大举行。在未来,希望能为中国用户带来更多更实用的容器技术,推动中国企业容器化的持续创新。 2019年6月20日,由Rancher Labs(以下简称Rancher)主办的第三届企业容器创新大会(Enterprise Container Innovation Conference, 以下简称ECIC)在北京喜来登大...

    mengbo 评论0 收藏0
  • k8s in Rancher架构分析

    摘要:组件会给每个分配一个,则替代了的来实现服务发现,在的容器内部依然可以访问服务来获取元数据信息。的需要在中实现一个,目前只有,而则维护了自己的版本在其中提供了。 在Rancher 1.0版本开始,Rancher逐步增加了Kubernetes、Swarm、Mesos等多编排引擎的支持,很多朋友就此产生了疑惑,诸如Cattle引擎和这几个之间到底什么关系?每种引擎是如何支持的?自家的业务环境...

    kid143 评论0 收藏0
  • k8s in Rancher架构分析

    摘要:组件会给每个分配一个,则替代了的来实现服务发现,在的容器内部依然可以访问服务来获取元数据信息。的需要在中实现一个,目前只有,而则维护了自己的版本在其中提供了。 在Rancher 1.0版本开始,Rancher逐步增加了Kubernetes、Swarm、Mesos等多编排引擎的支持,很多朋友就此产生了疑惑,诸如Cattle引擎和这几个之间到底什么关系?每种引擎是如何支持的?自家的业务环境...

    Sourcelink 评论0 收藏0
  • k8s in Rancher架构分析

    摘要:组件会给每个分配一个,则替代了的来实现服务发现,在的容器内部依然可以访问服务来获取元数据信息。的需要在中实现一个,目前只有,而则维护了自己的版本在其中提供了。 在Rancher 1.0版本开始,Rancher逐步增加了Kubernetes、Swarm、Mesos等多编排引擎的支持,很多朋友就此产生了疑惑,诸如Cattle引擎和这几个之间到底什么关系?每种引擎是如何支持的?自家的业务环境...

    array_huang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<