【云原生系列--Longhorn的部署】
Longhorn部署手册
1.部署longhorn
longhorn架构图:

1.1部署环境要求
-
kubernetes版本要大于v1.21
-
每个节点都必须装open-iscsi ,Longhorn依赖于 iscsiadm主机为 Kubernetes 提供持久卷。
apt-get install -y open-iscsi -
RWX 支持要求每个节点都安装 NFSv4 客户端
-
主机文件系统支持file extents存储数据的功能
- ext4
- xfs
-
bash,curl,findmnt,grep,awk,blkid,lsblk必须安装 -
Mount propagation必须启用,它允许将一个容器挂载的卷与同一 pod 中的其他容器共享,甚至可以与同一节点上的其他 pod 共享
1.2 环境检查
root@master01:~/Longhorn# wget https://github.com/longhorn/cli/releases/download/v1.7.1/longhornctl-linux-amd64
root@master01:~/Longhorn# ll
total 192552
-rwxr-xr-x 1 root root 40878232 Nov 15 10:16 longhornctl-linux-amd64
root@master01:~/Longhorn# chmod a+x longhornctl-linux-amd64
root@master01:~/Longhorn# export KUBECONFIG=/root/.kube/config
root@master01:~/Longhorn# ./longhornctl-linux-amd64 check preflight #这个是每个节点启动pod来检查环境是否合格

1.3 使用helm部署longhorn
注意事项:longhorn默认的数据存放路径是/var/lib/longhorn,根据实际情况修改,可以在values.yaml文件里修改,但是我修改时没有生效,故采用传参的方式修改
1、添加helm仓库
helm repo add longhorn https://charts.longhorn.io
helm repo update
2、创建命名空间longhorn-system(在chart包中写死了命名空间必须是longhorn)
kubectl create ns longhorn-system
3、安装longhorn
(1)在线安装
helm install longhorn longhorn/longhorn --namespace longhorn-system --set defaultDataPath=/data/longhorn --create-namespace --version 1.7.1
(2)离线安装
wget https://github.com/longhorn/longhorn/releases/download/v1.7.1/charts.tar.gz
helm install longhorn longhorn --namespace longhorn-system --set defaultDataPath=/data/longhorn
root@master01:~/Longhorn/longhorn# kubectl get pod -n longhorn-system
NAME READY STATUS RESTARTS AGE
csi-attacher-644c7b7568-495hh 1/1 Running 0 56m
csi-attacher-644c7b7568-cqb66 1/1 Running 0 56m
csi-attacher-644c7b7568-v9p4r 1/1 Running 1 (71m ago) 89m
csi-provisioner-58cc84b487-24gc4 1/1 Running 0 56m
csi-provisioner-58cc84b487-hqtds 1/1 Running 1 (71m ago) 89m
csi-provisioner-58cc84b487-jj8z5 1/1 Running 0 56m
csi-resizer-6d5c898684-gk5kx 1/1 Running 0 56m
csi-resizer-6d5c898684-lmln4 1/1 Running 0 89m
csi-resizer-6d5c898684-rmwrs 1/1 Running 0 56m
csi-snapshotter-68b686dc4-fgm4f 1/1 Running 0 56m
csi-snapshotter-68b686dc4-lfgx5 1/1 Running 0 56m
csi-snapshotter-68b686dc4-r552m 1/1 Running 0 89m
engine-image-ei-f4f7aa25-54kmw 1/1 Running 0 89m
engine-image-ei-f4f7aa25-bfnbt 1/1 Running 0 89m
engine-image-ei-f4f7aa25-w4pmj 1/1 Running 0 89m
instance-manager-2b871e5c27104071c7f8ae34c9384354 1/1 Running 0 54m
instance-manager-6d8ba5e2d6850b4dbd6df7e2bf4f9c16 1/1 Running 0 54m
instance-manager-95de354c4f2e1d5c13376714640f455c 1/1 Running 0 89m
longhorn-csi-plugin-2b2xc 3/3 Running 0 89m
longhorn-csi-plugin-5zb6x 3/3 Running 0 89m
longhorn-csi-plugin-9ccmx 3/3 Running 0 89m
longhorn-driver-deployer-795c448b6c-vcg46 1/1 Running 0 56m
longhorn-manager-4pg48 2/2 Running 5 (91m ago) 103m
longhorn-manager-dvjmd 2/2 Running 0 87m
longhorn-manager-jgmhw 2/2 Running 5 (91m ago) 103m
longhorn-ui-75f6f6bc8b-b5vkp 1/1 Running 4 (90m ago) 91m
longhorn-ui-75f6f6bc8b-ktkfz 1/1 Running 2 (56m ago) 56m#注意:部署longhorn需要拉取镜像
root@master01:~/Longhorn# cat pull-image.sh
nerdctl pull longhornio/longhorn-manager:v1.7.1 --namespace=k8s.io
nerdctl pull longhornio/longhorn-share-manager:v1.7.1 --namespace=k8s.io
nerdctl pull longhornio/longhorn-ui:v1.7.1 --namespace=k8s.io
nerdctl pull longhornio/csi-attacher:v4.6.1 --namespace=k8s.io
nerdctl pull longhornio/csi-provisioner:v4.0.1 --namespace=k8s.io
nerdctl pull longhornio/csi-resizer:v1.11.1 --namespace=k8s.io
nerdctl pull longhornio/csi-snapshotter:v7.0.2 --namespace=k8s.io
nerdctl pull longhornio/longhorn-engine:v1.7.1 --namespace=k8s.io
nerdctl pull longhornio/longhorn-instance-manager:v1.7.1 --namespace=k8s.io
nerdctl pull longhornio/csi-node-driver-registrar:v2.12.0 --namespace=k8s.io
nerdctl pull longhornio/livenessprobe:v2.14.0 --namespace=k8s.io
nerdctl pull longhornio/longhorn-cli:v1.7.1 --namespace=k8s.io
nerdctl pull registry.k8s.io/pause:3.1 --namespace=k8s.io
nerdctl pull alpine:3.17 --namespace=k8s.io
1.4 检查longhorn
1.4.1查看storageclass存储卷
root@master01:~/Longhorn# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
longhorn (default) driver.longhorn.io Delete Immediate true 92m
longhorn-static driver.longhorn.io Delete Immediate true 21m
nfs-client k8s-sigs.io/nfs-subdir-external-provisioner Delete Immediate false 49d#可以看出longhorn自动给集群创建两个Storageclass动态分配卷且会自动给longhorn设置为default,longhorn-static这个Storageclass是手动创建pv、pvc卷,手动将pvc和Storageclass绑定
1.4.2创建pod

因为我的集群只有三个节点,而longhorn是三副本存储机制,故我每个节点都存有pod的数据,如果你是四个node节点,你就会发现有个节点是没有mongodb-0 pod的数据

2.Longhorn组件的概念
2.1csi-attacher
- 作用:
csi-attacher负责将 Kubernetes 的持久卷(Persistent Volume, PV)与容器(Pod)关联。它会确保在 Pod 被调度到节点时,正确地挂载相关的卷。 - 功能:主要处理 CSI 卷的挂载操作,即在 pod 创建时将卷“附加”(attach)到节点,或者在 pod 被删除时,卸载卷。
2.2csi-provisioner
- 作用:
csi-provisioner是 Longhorn 的自动存储卷创建控制器,它负责动态创建存储卷。它与 Kubernetes 的 PersistentVolumeClaim(PVC)资源配合使用,当 PVC 创建时,如果没有匹配的持久卷,csi-provisioner会调用 CSI 驱动去创建一个新的 Longhorn 卷。 - 功能:监听 PVC 事件,基于用户请求自动创建或删除卷。这个组件使得卷的动态供应成为可能。
2.3csi-resizer
- 作用:
csi-resizer负责在需要时调整卷的大小(即扩容或缩容),当用户通过 PVC 调整卷大小时,csi-resizer会触发 Longhorn 进行相应的卷扩展或缩减。 - 功能:监听 PVC 的
spec.resources.requests.storage变化,并根据 PVC 的请求对卷进行扩展。它与 Longhorn 的存储引擎交互,确保实际存储卷的大小和请求一致。
2.4csi-snapshotter
- 作用:
csi-snapshotter负责对卷进行快照操作。它允许用户创建卷的快照,以便进行数据备份、恢复或克隆操作。 - 功能:监听 Kubernetes 中的 VolumeSnapshot 资源,并与 Longhorn 交互来创建、删除和恢复卷快照。通过这个组件,用户可以在 Kubernetes 中管理 Longhorn 卷的快照。
2.5engine-image-ei
- 作用:
engine-image-ei负责管理 Longhorn 存储引擎的镜像版本。在 Longhorn 中,每个存储引擎(例如,块存储的实现)都与一个“引擎镜像”相关联,这些镜像包括特定版本的存储引擎和驱动程序。 - 功能:通过这个组件,Longhorn 可以管理和更新其存储引擎的版本,确保引擎镜像正确地加载和部署。
2.6instance-manager
- 作用:
instance-manager管理 Longhorn 中的数据卷和节点之间的连接。它负责为每个卷启动和管理虚拟机实例(或容器)来进行数据管理和 I/O 操作。 - 功能:在 Kubernetes 节点上创建并管理 Longhorn 数据卷的“实例”(实际运行的容器),这些实例负责数据的读取和写入操作。
instance-manager确保数据存储和访问的高可用性和可靠性。
2.7longhorn-csi-plugin
- 作用:
longhorn-csi-plugin是 Longhorn 提供的 CSI 插件,它允许 Kubernetes 使用 Longhorn 存储。它充当 Kubernetes 与 Longhorn 存储之间的中介,负责卷的挂载、卸载、创建等操作。 - 功能:实现了 Kubernetes CSI 卷插件的接口,负责与 Longhorn 存储系统的交互,包括卷的创建、删除、挂载等操作。
2.8longhorn-manager
- 作用:
longhorn-manager是 Longhorn 的控制器组件,负责整个 Longhorn 系统的管理、协调和控制。它监视和管理 Longhorn 存储系统的各个组件,包括卷、节点、快照、卷克隆等。 - 功能:主要负责 Longhorn 存储系统的整体操作,例如卷管理、快照管理、扩容和缩容操作、节点状态管理等。它确保系统的健康状态,协调各个组件的工作。
2.9longhorn-ui
- 作用:
longhorn-ui是 Longhorn 的用户界面组件,提供了一个 Web 界面,用户可以通过它来管理和监控 Longhorn 存储系统。它允许用户方便地查看存储卷的状态、创建和删除卷、管理快照等。 - 功能:提供图形化界面用于卷管理、快照管理、节点监控和集群状态查看。用户可以通过 Web UI 来操作和配置 Longhorn 存储系统,进行卷的创建、删除、备份等操作。
总结:
- csi-attacher:卷挂载
- csi-provisioner:动态卷供应
- csi-resizer:卷扩展
- csi-snapshotter:卷快照
- engine-image-ei:存储引擎镜像管理
- instance-manager:管理存储实例
- longhorn-csi-plugin:与 Kubernetes 的 CSI 插件接口
- longhorn-manager:集群和组件管理
- longhorn-ui:图形化管理界面
参考链接:https://www.cnblogs.com/misakivv/p/18436873
官网:https://longhorn.io/
相关文章:
【云原生系列--Longhorn的部署】
Longhorn部署手册 1.部署longhorn longhorn架构图: 1.1部署环境要求 kubernetes版本要大于v1.21 每个节点都必须装open-iscsi ,Longhorn依赖于 iscsiadm主机为 Kubernetes 提供持久卷。 apt-get install -y open-iscsiRWX 支持要求每个节点都安装 N…...
Java集合(Collection+Map)
Java集合(CollectionMap) 为什么要使用集合?泛型 <>集合框架单列集合CollectionCollection遍历方式List:有序、可重复、有索引ArrayListLinkedListVector(已经淘汰,不会再用) Set…...
微信小程序02-页面制作
微信小程序页面制作指南 目录 微信小程序页面制作 1. 个人信息展示小程序 案例分析 需求背景:许多大学生毕业后需要求职,因此制作一个展示个人信息的微信小程序对招聘人员快速了解求职者非常有帮助。页面布局:页面分为头像区域和详细信息…...
zabbix监控端界面时间与服务器时间不对应
1. 修改系统时间 # tzselect Please select a continent, ocean, "coord", or "TZ".1) Africa2) Americas3) Antarctica4) Asia5) Atlantic Ocean6) Australia7) Europe8) Indian Ocean9) Pacific Ocean 10) coord - I want to use geographical coordina…...
端对端加密是如何通过SDK防御实现的?
端对端加密(End-to-End Encryption,E2EE)是一种确保数据在传输过程中不被第三方截获和篡改的技术。随着网络安全威胁的日益增多,端对端加密在即时通讯、文件传输等领域变得越来越重要。本文将详细介绍如何通过SDK(Soft…...
Flutter:input输入框
输入框: // 是否显示关闭按钮 bool _showClear false; // 文字编辑控制器,监听搜索框的变化。 final TextEditingController _controller TextEditingController(); // 输入框发生变化事件 void _onChange(String value){if(value.length > 0){setS…...
RabbitMQ 与 PHP Swoole 实现
RabbitMQ 与 PHP Swoole 的结合实现 一、概述 RabbitMQ 是一个开源的消息队列中间件,允许通过异步消息传递来解耦应用程序的各个部分。Swoole 是一个高性能的 PHP 扩展,支持异步编程和协程,适用于构建高并发的网络服务。将 RabbitMQ 与 Swo…...
【计算机体系架构】 MESI缓冲一致性
高并发学习参考 https://blog.csdn.net/MrYushiwen/article/details/123049838 https://cloud.tencent.com/developer/article/2197857 ESI 是指Cache 行的三种一致性状态:E(Exclusive,独占),S(Shared&…...
STM32设计学生宿舍监测控制系统
目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 电路图采用Altium Designer进行设计: 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 随着科技的飞速发展和智能化时代的到来,学生宿舍的安全、舒适…...
企业生产环境-麒麟V10(ARM架构)操作系统部署kafka高可用集群
前言:Apache Kafka是一个分布式流处理平台,由LinkedIn开发并捐赠给Apache软件基金会。它主要用于构建实时数据流管道和流应用。Kafka具有高吞吐量、可扩展性和容错性的特点,适用于处理大量数据。 以下是Kafka的一些核心概念和特性࿱…...
awk(常用)
这个有点难 O.o 一、awk # 语法 awk 参数 模式 {动作} 文件# 第一列,包含p的 $1~"p" # 第一列,不包含p的 $1!~"p" # 开始时干嘛,结束时干嘛 awk BEGIN{开始时做的事}END{结束时做的事}{print $0} 文件 1、内置变量&…...
Amazon Web Services (AWS)
一、Amazon Web Services (AWS)介绍 1、简介 2、产品 AWS 提供了各种云计算服务,包括 DynamoDB、S3、EC2、Lambda 等等。 登录aws后点击所有服务也可以看到amazon的所有服务: 3、免费试用产品 除了免费的Amazon Step Functions、Amazon Lambda&#…...
Java EE 技术基础知识体系梳理
1. Java EE 平台概述 1.1 发展历程 Java EE 从 J2EE 发展而来,经历了多个版本的演进,从早期的 J2EE 1.2 到最新的 Jakarta EE。 1.2 架构特点 多层架构: 客户端层:用户界面,如 Web 浏览器、移动应用等。Web 层&…...
【2025最新计算机毕业设计】基于SpringBoot+Vue电脑在线装机指南教程网站【源码+文档】
作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...
HDFS新增节点和删除datanode节点
在实际的hadoop环境中,有时我们需要新增或者删除datanode节点,来达到扩容或缩容的目的,本文就来讲解如何新增和删除datanode。 新增节点和删除节点会涉及两个关键的配置项(hdfs-site.xml文件中): dfs.hos…...
数据结构-线性表-具有独立头节点的双向循环链表
完整代码: #define _CRT_SECURE_NO_WARNINGS #pragma warning(disable:6013)#include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<time.h>// 一个具有独立头节点的双向循环链表, // 区别在于将头节点和数据区域…...
CSS 响应式设计之媒体查询技术
CSS 媒体查询(Media Queries)是一种根据不同设备的特性(如屏幕宽度、分辨率、方向等)来应用不同的 CSS 样式的技术。它通常用于响应式设计,帮助网页在不同设备和屏幕尺寸下良好地展示。 基本语法 media (条件) {/* 样…...
HARCT 2025 分论坛4:智能系统传感、传感器开发和数据融合中的智能数据分析
机电液一体化与先进机器人控制技术国际会议(HARCT 2025)将于2025年1月3日-6日在中国广西桂林召开。本届会议围绕“机电液一体化”“机器人”“控制技术”等最新研究成果,邀请海内外在这一领域贡献卓著的专家学者做精彩致辞和报告。 会议期间…...
云计算研究实训室建设方案
一、引言 随着云计算技术的迅速发展和广泛应用,职业院校面临着培养云计算领域专业人才的迫切需求。本方案旨在构建一个先进的云计算研究实训室,为学生提供一个集理论学习、实践操作、技术研发与创新于一体的综合性学习平台,以促进云计算技术…...
VRT: 关于视频修复的模型
🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年11月15日14点34分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
