导读

前一段时间研究了一下分布式块存储Longhorn这个项目,Longhorn是完全基于K8s实现的分布式块存储,最大的特性就是他通过以微服务的方式(engine_instance+replicas)来提供存储服务,所以可用性极高。但本质还是通过iscsi把存储目录映射为一个盘挂到节点上然后再mount给容器使用,所以运行效率本身不太高,看到网上说的要比nfs可能要好一点,但是肯定是比不上本地磁盘hostpath的。下面的内容大多数来源于Longhorn的官方文档,进行了一些翻译及自己的理解,跟大家一起学习。

一、 longhorn项目介绍

1.longhorn是什么

Longhorn 是用于 Kubernetes 的轻量级、可靠且功能强大的分布式块存储系统。

Longhorn使用容器(containers)和微服务(microservices)实现分布式块存储。

Longhorn 为每个块设备卷(device volume)创建一个专用的存储控制器(storage controller), 并跨存储在多个节点上的多个副本同步复制该卷。
存储控制器(storage controller)和副本(replicas)本身是使用 Kubernetes 编排的。

2.longhorn支持架构

AMD64
ARM64 (实验性的)

3.longhorn的特性

1.使用 Longhorn 卷作为 Kubernetes 集群中分布式有状态应用程序的持久存储
2.将块存储划分为 Longhorn 卷,这样无论是否有云提供商,都可以使用 Kubernetes卷
3.跨多个节点和数据中心复制块存储以提高可用性
4.将备份数据存储在 NFS 或 AWS S3 等外部存储上
5.创建跨集群灾难恢复卷,以便可以从第二个 Kubernetes 集群的备份中快速恢复来自主 Kubernetes 集群的数据
6.安排卷的定期快照,并安排定期备份到 NFS 或 S3 兼容的辅助存储
7.从备份恢复卷
8.在不中断持久卷的情况下升级 Longhorn

4.longhorn的设计

Longhorn 设计有两层:数据平面(data plane)和控制平面(control plane)。
Longhorn Engine 是存储控制器对应数据平面,Longhorn Manager 对应控制平面。

(1) Longhorn Manager 和 Longhorn Engine

Longhorn Manager Pod 作为 Kubernetes DaemonSet 在 Longhorn 集群中的每个节点上运行。它负责在 Kubernetes 集群中创建和管理卷,并处理来自 UI 或 Kubernetes 卷插件的 API 调用。
Longhorn Manager 与 Kubernetes API 服务器通信以创建新的 Longhorn 卷 CRD。然后 Longhorn Manager监测api-server的响应,当监测到k8s apiserver创建了一个新的 Longhorn volume CRD时,Longhorn Manager就创建一个新的卷。
当Longhorn Manager被要求创建一个卷时,它会在该卷所连接的节点上创建一个Longhorn Engine实例,并在每个将放置副本的节点上创建一个副本。副本应放置在不同的主机上以确保最大的可用性。
副本的多条数据路径确保了Longhorn卷的高可用性。即使某个副本或引擎出现问题,也不会影响所有副本或 Pod 对卷的访问,Pod 仍将正常运行。
Longhorn Engine始终在与使用Longhorn volume的 Pod 相同的节点中运行。它跨存储在多个节点上的多个副本同步复制卷。
引擎(Engine)和副本(replicas)使用 Kubernetes进行编排。

在下图中,

Longhorn volumes 有三个实例。

每个卷都有一个专用控制器,称为 Longhorn Engine 并作为 Linux 进程运行。
每个 Longhorn 卷有两个副本(replica),每个副本是一个 Linux 进程。
图中的箭头表示卷(volume)、控制器实例(controller instance)、副本实例(replica instances)和磁盘之间的读/写数据流。
通过为每个卷创建单独的 Longhorn Engine,如果一个控制器出现故障,其他卷的功能不会受到影响。

(2) 基于微服务的设计的优势
在 Longhorn中,每个 Engine只需要服务一个卷,简化了存储控制器的设计。由于控制器软件的故障域与单个卷隔离,因此控制器崩溃只会影响一个卷。

Longhorn Engine 足够简单和轻便,因此我们可以创建多达 100,000 个独立的引擎。 Kubernetes 调度这些独立的引擎,从一组共享的磁盘中提取资源,并与 Longhorn 合作形成一个弹性的分布式块存储系统。

因为每个卷都有自己的控制器,所以每个卷的控制器和副本实例也可以升级,而不会导致 IO 操作明显中断。

Longhorn 可以创建一个长时间运行的作业(long-running job)来协调所有实时卷的升级,而不会中断系统的持续运行。为确保升级不会导致不可预见的问题,Longhorn 可以选择升级一小部分卷,并在升级过程中出现问题时回滚到旧版本。

(3) CSI Driver

Longhorn CSI driver 获取块设备(block device),对其进行格式化,然后将其挂载到节点上。然后 kubelet 将设备绑定挂载到 Kubernetes Pod 中。这允许 Pod 访问 Longhorn volume。

所需的 Kubernetes CSI 驱动程序镜像将由 longhorn driver deployer 自动部署。

(4) CSI Plugin

Longhorn 通过 CSI Plugin 在 Kubernetes 中进行管理。这允许轻松安装 Longhorn 插件。

Kubernetes CSI plugin 调用 Longhorn 创建卷,为 Kubernetes 工作负载创建持久数据(persistent data)。 CSI plugin 使您能够创建(create)、删除(delete)、附加(attach)、分离(detach)、挂载(mount)卷,并对卷进行快照。Longhorn 提供的所有其他功能都是通过 Longhorn UI 实现的。

Kubernetes 集群内部使用 CSI interface 与 Longhorn CSI plugin 进行通信。Longhorn CSI plugin 使用 Longhorn API 与 Longhorn Manager 通信。

(5) Longhorn UI

Longhorn UI 通过 Longhorn API 与 Longhorn Manager 进行交互,并作为 Kubernetes 的补充。通过 Longhorn 界面可以管理快照(snapshots)、备份(backups)、节点(nodes)和磁盘(disks)。

二、longhorn部署

1.环境要求:

与 Kubernetes 兼容的容器运行时(Docker v1.13+、containerd v1.3.7+ 等)
Kubernetes v1.16+.
推荐 Kubernetes v1.17+
open-iscsi 已安装,并且 iscsid 守护程序正在所有节点上运行。这是必要的,因为 Longhorn 依赖主机上的 iscsiadm 为 Kubernetes 提供持久卷。
RWX support 要求每个节点都安装 NFSv4 client。
主机文件系统支持 file extents 功能来存储数据。

官方提供了一个环境检测脚本

curl -sSfL https://raw.githubusercontent.com/longhorn/longhorn/v1.2.2/scripts/environment_check.sh | bash

2.部署方式:

可以通过单独的yaml文件部署全部组件,也可以通过helm chart一键完成。

kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.2.2/deploy/longhorn.yaml
root@master1:~# kubectl get crd |grep longhorn
backingimagedatasources.longhorn.io          2021-12-23T08:16:00Z
backingimagemanagers.longhorn.io             2021-12-23T08:16:00Z
backingimages.longhorn.io                    2021-12-23T08:16:00Z
backups.longhorn.io                          2021-12-23T08:16:00Z
backuptargets.longhorn.io                    2021-12-23T08:16:00Z
backupvolumes.longhorn.io                    2021-12-23T08:16:00Z
engineimages.longhorn.io                     2021-12-23T08:15:59Z
engines.longhorn.io                          2021-12-23T08:15:59Z
instancemanagers.longhorn.io                 2021-12-23T08:15:59Z
nodes.longhorn.io                            2021-12-23T08:15:59Z
recurringjobs.longhorn.io                    2021-12-23T08:16:00Z
replicas.longhorn.io                         2021-12-23T08:15:59Z
settings.longhorn.io                         2021-12-23T08:15:59Z
sharemanagers.longhorn.io                    2021-12-23T08:15:59Z
volumes.longhorn.io                          2021-12-23T08:15:59Zroot@master1:~# kubectl get pod -n longhorn-system
NAME                                      READY   STATUS    RESTARTS   AGE
csi-attacher-854f8c65f7-8z8km             1/1     Running   0          112m
csi-attacher-854f8c65f7-fb4rl             1/1     Running   0          112m
csi-attacher-854f8c65f7-k62gk             1/1     Running   0          112m
csi-provisioner-5f68999455-d9q77          1/1     Running   0          112m
csi-provisioner-5f68999455-dnb7d          1/1     Running   0          112m
csi-provisioner-5f68999455-rn8jw          1/1     Running   1          112m
csi-resizer-9d8f9ffcd-6w864               1/1     Running   0          112m
csi-resizer-9d8f9ffcd-clhqg               1/1     Running   1          112m
csi-resizer-9d8f9ffcd-xhzbd               1/1     Running   0          112m
csi-snapshotter-5b9f69f5db-7466v          1/1     Running   0          112m
csi-snapshotter-5b9f69f5db-pcjzr          1/1     Running   0          112m
csi-snapshotter-5b9f69f5db-zqdfg          1/1     Running   1          112m
engine-image-ei-9c4e77c5-qn2hv            1/1     Running   0          143m
engine-image-ei-9c4e77c5-s7wzq            1/1     Running   0          143m
instance-manager-e-30384430               1/1     Running   0          22m
instance-manager-e-34d95857               1/1     Running   0          22m
instance-manager-e-631e4e7f               1/1     Running   0          22m
instance-manager-e-c9bdc485               1/1     Running   0          14m
instance-manager-e-e5674086               1/1     Running   0          22m
instance-manager-r-1b468bc2               1/1     Running   0          22m
instance-manager-r-1e3b38c4               1/1     Running   0          22m
instance-manager-r-42080294               1/1     Running   0          22m
instance-manager-r-6200bc5f               1/1     Running   0          14m
longhorn-csi-plugin-56g84                 2/2     Running   0          112m
longhorn-csi-plugin-jcftf                 2/2     Running   0          112m
longhorn-driver-deployer-6d959bb8-4ntd6   1/1     Running   0          129m
longhorn-manager-c5ljt                    1/1     Running   1          143m
longhorn-manager-ghcml                    1/1     Running   1          143m
longhorn-manager-lh5wt                    1/1     Running   0          143m
longhorn-manager-vs8lp                    1/1     Running   1          143m
longhorn-manager-zxxl9                    1/1     Running   0          143m
longhorn-ui-67c8476986-pzw4f              1/1     Running   0          143m

3.验证部署

官方提供了sc,pvc等资源。

kubectl create -f https://raw.githubusercontent.com/longhorn/longhorn/v1.2.2/examples/storageclass.yaml
 kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:name: longhorn
provisioner: driver.longhorn.io
allowVolumeExpansion: true
parameters:numberOfReplicas: "3"staleReplicaTimeout: "2880" # 48 hours in minutesfromBackup: ""
#  diskSelector: "ssd,fast"
#  nodeSelector: "storage,fast"
#  recurringJobSelector: '[
#   {#     "name":"snap",
#     "isGroup":true,
#   },
#   {#     "name":"backup",
#     "isGroup":false,
#   }
#  ]'
kubectl create -f https://raw.githubusercontent.com/longhorn/longhorn/v1.2.2/examples/pod_with_pvc.yaml

pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: longhorn-volv-pvc
spec:accessModes:- ReadWriteOncestorageClassName: longhornresources:requests:storage: 2Gi

4.longhorn配置

apiVersion: v1
kind: ConfigMap
metadata:name: longhorn-default-settingnamespace: longhorn-system
data:default-setting.yaml: |-backup-target:backup-target-credential-secret:allow-recurring-job-while-volume-detached:create-default-disk-labeled-nodes:default-data-path:replica-soft-anti-affinity:replica-auto-balance:storage-over-provisioning-percentage:storage-minimal-available-percentage:upgrade-checker:default-replica-count:default-data-locality:default-longhorn-static-storage-class:backupstore-poll-interval:taint-toleration:system-managed-components-node-selector:priority-class:auto-salvage:auto-delete-pod-when-volume-detached-unexpectedly:disable-scheduling-on-cordoned-node:replica-zone-soft-anti-affinity:node-down-pod-deletion-policy:allow-node-drain-with-last-healthy-replica:mkfs-ext4-parameters:disable-replica-rebuild:replica-replenishment-wait-interval:concurrent-replica-rebuild-per-node-limit:disable-revision-counter:system-managed-pods-image-pull-policy:allow-volume-creation-with-degraded-availability:auto-cleanup-system-generated-snapshot:concurrent-automatic-engine-upgrade-per-node-limit:backing-image-cleanup-wait-interval:backing-image-recovery-wait-interval:guaranteed-engine-manager-cpu:guaranteed-replica-manager-cpu:

longhorn的配置可能在部署时修改longhorn-default-setting的configmap来进行修改。

默认replica存放在/var/lib/longhorn/replicas目录下

可以通过修改configmap里的default-data-path修改

如果想要不同节点配置不同的replica路径,可以通过修改参数create-default-disk-labeled-nodes: true,同时给节点加label

node.longhorn.io/create-default-disk: 'config'

并配置节点的annotation

node.longhorn.io/default-disks-config: '[ { "path":"/var/lib/longhorn", "allowScheduling":true}, { "name":"fast-ssd-disk", "path":"/mnt/extra", "allowScheduling":false, "storageReserved":10485760,"tags":[ "ssd", "fast" ] }]'

如果添加任何其他磁盘,您需要:

1.将主机上的磁盘挂载到某个目录。
2.将挂载磁盘的路径添加到节点的磁盘列表中。

三、优缺点

1.优点

对于每个longhornvolume提供一个控制器,简化了存储控制器的设计,减小控制面的体积。
同时由于控制器软件的故障域与单个卷隔离,因此控制器崩溃只会影响一个卷。

k8s原生支持,部署使用方便(kubectl,helm)

微服务的存储控制器 高可用

支持定时备份跟快照,支持远端备份(NFS,S3)

longhorn-ui,可以方便查看所有资源情况,方便设置

2.缺点

不能直接管理裸盘,位于底层文件系统之上,性能不如本地盘。

分布式块存储Longhorn简介相关推荐

  1. 分布式存储--理解分布式文件系统、分布式块存储、分布式对象存储、分布式数据库

    1. 单机文件系统 vs 分布式文件系统 传统单机文件系统是计算机中一个非常重要的组件,为存储设备提供一致的访问和管理方式.在不同的操作系统中,文件系统会有一些差别,但也有一些共性几十年都没怎么变化: ...

  2. 达沃时代发布分布式块存储服务系统 启动存储生态圈

    10月27日,达沃时代在北京召开主题为"打造数据沃土,营造千亿生态"的新闻发布会,发布存储新品逸存B系列(YeeStor B serials)分布式块存储服务系统,同时宣告了&qu ...

  3. 分布式块存储QoS限速算法介绍与实践以及对上层应用的影响

    分布式块存储QoS限速算法以及对上层应用的影响 QoS限速算法介绍 令牌桶 Token Bucket 漏桶 Leaky Bucket Leaky bucket as a meter Leaky buc ...

  4. Ceph分布式存储工作原理(Ceph分布式块存储)

    一.什么是块存储? 单机块设备光盘磁盘分布式块存储cephcinder ceph块设备也叫做RADOS块设备 RADOS block device : RBD 二.当集群osd节点成千上万时,管理节点 ...

  5. Anolis OS8.6QU1通过cephadm部署ceph17.2.0分布式块存储(三)添加其它主机和添加mgr节点

    本文尝试在龙蜥Anolis OS8.6QU1上通过cephadm部署ceph17.2.0分布式块存储,实现国产化操作系统上的存储系统构建,本步骤为完成首节点mon节点和图形界面,完成其它节点的基础安装 ...

  6. 鹏云网络分布式块存储社区版问世,首发开源存储解决方案

    2023年1月,南京鹏云网络科技有限公司(简称:鹏云网络)正式宣布开源ZettaStor DBS分布式块存储系统,开放了自研10余年的分布式块存储技术,自此踏上了"自研"与&quo ...

  7. Anolis OS8.6QU1通过cephadm部署ceph17.2.0分布式块存储(六)部署iscsi服务

    本文尝试在龙蜥Anolis OS8.6QU1上通过cephadm部署ceph17.2.0分布式块存储,实现国产化操作系统上的存储系统构建,本步骤为完成首节点mon节点和图形界面,完成其它节点的基础安装 ...

  8. 中国移动分布式块存储最大单揭晓,浪潮等中标

    中国移动采购与招标网11月1日消息,中国移动2019年至2020年分布式块存储产品集中采购中标候选人正式公示,按照公布的中标信息总体统计来看,该项目分布式块存储产品共计采购910套.这成为了中国移动和 ...

  9. 这家十年磨剑的企业级存储厂商,为什么将分布式块存储也开源了?

    只要提到企业级存储,任何成功的厂商无不以十年为单位的积累,才能实现真正的创新. 当然,作为存储领域相对更为复杂的分布式块存储,存储创新公司一般都不太愿意碰它.原因很简单,在技术自研的道路上,更需要坐得 ...

  10. 华为分布式块存储Fusion Storage知识总结(二)

    目录 一.华为分布式存储Fusion Storage介绍 二.Fusion Storage优势(特点) 1.高弹性和扩展性 2.高性能 3.高可靠性 4.高安全性 5.数据保护 6.高易用性 Fusi ...

最新文章

  1. 【学习笔记】高斯整数、高斯素数、费马平方和(全部相关概念及例题详解)《初等数论及其应用》
  2. 让你知道什么才是firefox4的速度.
  3. cxf实现webservice
  4. jquery动态加载JS【方法getScript】的改进
  5. Web Services 详解
  6. 史上最变态高考数学题,让99%的考生献上膝盖,看完我惊了......
  7. 计算机应用技术一级考试成绩,《计算机应用基础》课程与等级考试成绩的关系...
  8. php十六进制字符串转成字节数组_10 天 5 千 Star!21 岁本科生给程序员开发的十六进制编辑器...
  9. 信息学奥赛C++语言:蛋糕盒子
  10. pycharm -- 小技巧1 (显示文件的代码结构以及错误提示)
  11. 300 万行核心代码全部开源!OceanBase 开启 3.0 时代
  12. 【浙江大学PAT真题练习乙级】1003 我要通过!(20分) 真题解析
  13. Docker学习总结之docker入门(转自:Vikings翻译)
  14. Matlab一元函数绘图方法
  15. html5妇女节游戏,适合妇女节玩的小游戏
  16. 协同编辑--OT算法之外的世界
  17. UML 核心元素之参与者
  18. java+mysql ssm基于协同过滤算法的演唱会平台
  19. USB CCID理解
  20. Coursera | Andrew Ng (01-week-2-2.6)—更多导数的例子

热门文章

  1. linux磁盘阵列 启动盘,Linux RAID磁盘列阵完全攻略
  2. 软件测试行业到底有没有前景和出路?软件测试职业发展方向总结
  3. 两个域名指向同一服务器的非80端口
  4. leetcode剑指Offer2
  5. 3D语义场景图论文小记
  6. Erlang 游戏开发经验总结
  7. 屏幕录制专家linux版,Linux平台好用的十款屏幕录制工具
  8. 本项目基于paddlex实现目标检测
  9. 完美解决No files matched pattern
  10. Leetcode 312 打气球 Burst Balloons C++ 史上最详细题解系列