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

devtools/2024/11/20 0:03:07/

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.ppmy.cn/devtools/135333.html

相关文章

OSRM docker环境启动

命令一把梭 wget https://download.geofabrik.de/asia/china-latest.osm.pbf docker pull osrm/osrm-backend docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-extract -p /opt/car.lua /data/china-latest.osm.pbf docker run -t -v "${PWD}:/data&q…

字母异位词分组--python

题目描述 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单shilie 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "n…

【数据分享】中国食品工业年鉴(1984-2023) PDF

数据介绍 一、《中国食品工业年鉴》(以下简称《年鉴》)是一部全面反映上一年度全国食品工业发展情况纪年性、资料性、权威大型年刊。《年鉴(2023)》系统收录了全国食品行业各专业和 31个省(自治区、直辖市)2022年食品工业经济运行情况的综述,《年鉴》是由中国食品工…

探秘 RPC:揭开远程过程调用的实现原理

一、引言 在分布式系统蓬勃发展的今天,不同节点上的服务之间需要频繁地进行交互与协作,以共同完成复杂的业务逻辑。远程过程调用(Remote Procedure Call,简称 RPC)作为一种重要的通信机制,使得在分布式环境…

高级java每日一道面试题-2024年11月12日-框架篇[SpringBoot篇]-SpringBoot中的监视器是什么?

如果有遗漏,评论区告诉我进行补充 面试官: SpringBoot中的监视器是什么? 我回答: 一、监视器的概念 在SpringBoot中,监视器是一种用于监视应用程序运行状态和性能的组件。它可以收集关于应用程序的各种指标和统计数据,并将其展示在一个可视化的仪表…

ROM修改进阶教程------安卓14去除修改系统应用后导致的卡logo验证步骤 适用安卓13 14 安卓15可借鉴参考

上期的博文解析了安卓14 安卓15去除系统应用签名验证的步骤解析。我们要明白。修改系统应用后有那些验证。其中签名验证 去卡logo验证 与可降级安装应用验证等等的区别。有些要相互结合使用。今天的博文将对修改系统应用后卡logo验证做个步骤解析。 通过博文了解💝💝�…

ubuntu下怎么设置机器程序开机自启?

在 Ubuntu 中,可以通过多种方法设置程序或脚本在系统启动时自动运行。以下是几种常见方法: 方法 1:使用 crontab crontab 是一个定时任务管理工具,可以用来设置程序在开机时自动运行。 1. 打开终端,编辑当前用户的 …

CSS回顾-长度单位汇总详解

一、简介 在 CSS 中,长度单位是构建网页布局的关键,像神奇的尺子度量元素大小、间距和位置。有绝对和相对长度单位,各具价值与应用场景,是网页设计的重要元素,为响应式布局等赋予空间表现力和交互性。 了解不同的长度…