最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

  • 2020-04-12
  • 本文字数:3087 字

    阅读完需:约 10 分钟

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

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/longhorn/blob/master/README.md#google-kubernetes-engine


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



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


Longhorn 提供了 Kubernetes 的完全集成。


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


apiVersion: v1kind: Podmetadata:  name: volume-test  namespace: defaultspec:  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: StorageClassapiVersion: storage.k8s.io/v1metadata:  name: longhornprovisioner: rancher.io/longhornparameters:  numberOfReplicas: "3"  staleReplicaTimeout: "30"  fromBackup: ""
复制代码


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


apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: longhorn-volv-pvcspec:  accessModes:    - ReadWriteOnce  storageClassName: longhorn resources:    requests:      storage: 2Gi---apiVersion: v1kind: Podmetadata:  name: volume-test  namespace: defaultspec:  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/longhorn


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


2020-04-12 20:431144

评论

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

「趣学前端」开耍CSS的3D转换,不会玩滑板但能画滑板

叶一一

CSS 前端 10月月更

打造安全的Open RAN

俞凡

架构 安全 OpenRAN

「趣学前端」玩转CSS的2D转换,也许能有个代码纸片人

叶一一

CSS 前端 10月月更

Go RPC入门指南:RPC的使用边界在哪里?如何实现跨语言调用?

王中阳Go

php Go RPC RPC框架 10月月更

Python进阶(二十四)Python中函数的参数定义和可变参数

No Silver Bullet

Python 函数 可变参数 10月月更

「CSS畅想」有一天,我遇到了一个奇特的路灯,眼里一下子有了光

叶一一

CSS JavaScript 前端 10月月更

Java基础(七)| 类、对象、封装和构造详解

timerring

Java 对象 封装 构造 10月月更

【一Go到底】第十六天---跳转控制goto&return

指剑

Go golang 10月月更

【一Go到底】第十六天---函数

指剑

Go golang 10月月更

Linux 中 Grep 命令的常见示例,非常全面!

wljslmz

Linux grep 10月月更

致MonoCats社群的一封信:邀请您与我们在以太坊开启新篇章

股市老人

【LeetCode】用栈操作构建数组Java题解

Albert

算法 LeetCode 10月月更

「CSS畅想」当我拥有了一个小夜灯,我的CSS副属性被激活了

叶一一

CSS JavaScript 前端 10月月更

【ArchSummit】通过ArchSummit 全球架构师峰会对企业数字化转型的思考

小明Java问道之路

云原生 企业数字化转型 全球架构师峰会 ArchSummit 10月月更

架构师的十八般武艺:后记

agnostic

架构师

大数据ELK(二十七):数据可视化(Visualize)

Lansonli

10月月更 Visualize

PriorityQueue 源码解析(二)

知识浅谈

Priority Queue 10月月更

「趣学前端」提到布局,我第一个会想到的是flex

叶一一

CSS 前端 10月月更

什么时候用Goroutine?什么时候用Channel?

王中阳Go

Go 并发 channel goroutine 10月月更

可能的二分法

掘金安东尼

算法 10月月更

架构师的十八般武艺:架构治理

agnostic

架构治理

TSDB在高速公路大数据平台的应用

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

如何使用 CSS 提高页面性能?

CoderBin

CSS 面试 前端 优化 10月月更

STM32L0 系列 EEPROM 读写,程序卡死?

矜辰所致

EEPROM STM32L051 10月月更

Goroutine是什么?进程、线程、协程又是什么?有什么区别和联系?

王中阳Go

Go 线程 进程 协程 10月月更

如何在 SAP BTP Java 应用里使用 SAP HANA 数据库

Jerry Wang

云原生 Cloud SAP 10月月更 btp

新书上市|豆瓣8.6,首部全面披露中国游戏发展史的奇书!

图灵社区

新书上市|豆瓣8.6,首部全面披露中国游戏发展史的奇书!

图灵教育

游戏

Python还不会用日志模块?本文给你答案

芥末拌个饭吧

python 3.5+ logging模块 10月月更

python程序能打包吗?看这篇就知道了

芥末拌个饭吧

python 3.5+ pyinstaller 10月月更

架构实战训练营模块2-朋友圈复杂度分析

阿姆斯壮

#架构实战营 架构实战训练营9期

Longhorm:实现Kubernetes集群的持久化存储_文化 & 方法_Rancher_InfoQ精选文章