【云原生系列--Longhorn的部署】

news2024/12/24 3:16:42

Longhorn部署手册

1.部署longhorn

longhorn架构图:
在这里插入图片描述

1.1部署环境要求

  • kubernetes版本要大于v1.21

  • 每个节点都必须装open-iscsi ,Longhorn依赖于 iscsiadm主机为 Kubernetes 提供持久卷。

    apt-get install -y open-iscsi
    
  • RWX 支持要求每个节点都安装 NFSv4 客户端

  • 主机文件系统支持file extents存储数据的功能

    1. ext4
    2. xfs
  • bashcurlfindmntgrepawkblkidlsblk 必须安装

  • 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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2241703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Springboot集成ElasticSearch实现minio文件内容全文检索

一、docker安装Elasticsearch (1)springboot和Elasticsearch的版本对应关系如下,请看版本对应: 注意安装对应版本,否则可能会出现一些未知的错误。 (2)拉取镜像 docker pull elasticsearch:7…

Diff 算法的误判

起源: 设想一下,假如你桌面上的文件都没有文件名,取而代之的是,你使用通过文件的位置顺序即index来区分它们———第一个文件,第二个文件,以此类推。也许这种方式可行,可是一旦你删除了其中的一…

D69【 python 接口自动化学习】- python 基础之数据库

day69 Python 执行 SQL 语句 学习日期:20241115 学习目标: MySQL 数据库﹣- Python连接redis 学习笔记: redis数据库的用途 使用Python访问redis数据库 使用Python对redis数据库进行读写操作 总结 1. redis是一款高性能的键…

飞书文档只读限制复制

飞书文档只读限制复制 场景描述解决方式插件安装测试 场景描述 当使用飞书时,可能会存在无对方文档编辑/管理权限,对方只给自己开放只读权限的时候,此时如果文档较重要,需要本地保存一份,但是又无法复制文档或直接屏蔽…

[每周一更]-(第123期):模拟面试|消息队列面试思路解析

文章目录 22|消息队列:消息队列可以用来解决什么问题?1. 你用过消息队列吗?主要用来解决什么问题?异步、削峰和解耦你能各举一个例子吗?2. 你用的是哪个消息队列?为什么使用它而不用别的消息队列?3. 为什么你一定要用消息队列?不用行不行?不用有什么缺点?4. 在对接多…

npm list @types/node 命令用于列出当前项目中 @types/node 包及其依赖关系

文章目录 作用示例常用选项示例命令注意事项 1、实战举例**解决方法**1. **锁定唯一的 types/node 版本**2. **清理依赖并重新安装**3. **设置 tsconfig.json 的 types**4. **验证 Promise 类型支持** **总结** npm list types/node 命令用于列出当前项目中 types/node 包及其…

使用 DBSCAN(基于密度的聚类算法) 对二维数据进行聚类分析

代码功能 生成数据: 使用 make_moons 方法生成一个非线性分布的二维数据集,模拟月亮形状的两个半环形分布,同时添加一定的噪声。 数据标准化: 使用 StandardScaler 对数据进行标准化处理,使不同特征的值具有相同的…

【苍穹外卖】学习日志-day1

目录 nginx 反向代理介绍 nginx 的优势 提高访问速度 负载均衡 保证后端服务安全 高并发静态资源 Swagger 生成 API 文档 Swagger 的使用方式 导入knife4j的maven坐标 在配置类中加入knife4j相关配置 设置静态资源映射 通过注解控制生成的接口文档 项目技术点 Token 模式 MD5 加…

炼码LintCode--数据库题库(级别:入门;数量:144道)--刷题笔记_01

目录 炼码LintCode数据库入门级别的笔记未完待续~~~ 炼码LintCode 数据库 入门级别的笔记 笔记如下,把所有涉及到的入门级别的知识点简单总结了一下。 以及一点点举一反三的写法。 增 INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);批量增 INSERT INT…

【C语言】连接陷阱探秘(1):声明与定义

目录 一、声明与定义的混淆 1.1. 声明(Declaration) 1.2. 定义(Definition) 1.3. 避免混淆的方法 1.4. 示例 二、声明与定义不匹配 2.1. 常见的不匹配情况 2.2. 解决方法 三、外部变量与静态变量的命名冲突 3.1. 外部变量命名冲突 3.2. 静态变量命名冲突 四、缺…

pycharm快速更换虚拟环境

目录 1. 选择Conda 虚拟环境2. 创建环境3. 直接选择现有虚拟环境 1. 选择Conda 虚拟环境 2. 创建环境 3. 直接选择现有虚拟环境

[代码+论文+讲解]2024数维杯A题:飞机激光测速中的频率估计问题

一、问题背景 空速是飞机相对于空气的速度,是飞行中需要监测的关键参数。空速与飞行状态如攻角和侧偏角密切相关。如果空速数据异常,很容易导致诸如失速等事故。因此,准确测量空速非常重要。 图1:空速激光测速的示意图 激光测速是一种可行的测…

vscode中执行git合并操作需要输入合并commit信息,打开的nano小型文本编辑器说明-

1.前提: VScode中的git组件执行任何合并动作的时候需要提交远程合并的commit信息,然后编辑器自动打开的是nano文本编辑器 2.nano编辑器说明: 1.保存文件:按 Ctrl O,然后按 Enter 来保存文件。 2.退出编辑器&#xf…

Docker 基础命令介绍和常见报错解决

介绍一些 docker 可能用到的基础命令,并解决三个常见报错: 权限被拒绝(Permission Denied)无法连接到 Docker 仓库(Timeout Exceeded)磁盘空间不足(No Space Left on Device) 命令以…

【电脑】解决DiskGenius调整分区大小时报错“文件使用的簇被标记为空闲或与其它文件有交叉”

【电脑】解决DiskGenius调整分区大小时报错“文件使用的簇被标记为空闲或与其它文件有交叉” 零、报错 在使用DiskGenius对磁盘分区进行调整时,DiskGenius检查出磁盘报错,报错信息:文件使用的簇被标记为空闲或与其它文件有交叉,…

YOLOv11 C++ TensorRT

引用 YOLOv11 C TensorRT项目是一个用C实现并使用NVIDIA TensorRT进行优化的高性能对象检测解决方案。该项目利用 YOLOv11 模型提供快速准确的对象检测,并利用 TensorRT 最大限度地提高推理效率和性能。 📢 更新 主要特点: 模型转换&#x…

产品思维如何颠覆我的开发与盈利观-营销自己

之前,我独自一人开发了一个名为“心情追忆”的小程序,旨在帮助用户记录日常的心情变化及重要时刻。从项目的构思、设计、前端(小程序)开发、后端搭建到最终部署,所有环节都由我一人包办。经过一个月的努力,…

Spring Boot框架:电商系统的快速构建

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本网上商城系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&…

【网页设计】CSS3 进阶(动画篇)

1. CSS3 2D 转换 转换(transform)是CSS3中具有颠覆性的特征之一,可以实现元素的位移、旋转、缩放等效果 转换(transform)你可以简单理解为变形 移动:translate旋转:rotate缩放&#xf…

Android12的ANR解析

0. 参考: ANR分析 深入理解 Android ANR 触发原理以及信息收集过程 1.ANR的触发分类: ANR分为4类: InputDispatchTimeout:输入事件分发超时5s,包括按键和触摸事件。BroadcastTimeout:比如前台广播在10s内未执行完成&#xff0…