Longhorn安装记录

Longhorn安装记录

简介

Longhorn 是一个轻量级、可靠且功能强大的分布式块存储系统,专为 Kubernetes 而设计。它实现了可靠的持久化存储,支持快照、备份和跨集群灾难恢复等企业级功能。

Longhorn 初使用反馈

在测试环境使用6台机器,其中host51-53是master,host54-56是worker,但是呢实际上host51-53也是可以跑pod(测试环境资源利用最大化),为了贴近生产需求,我在规划部署时增加了一些想法:

  1. 所有节点都能挂载卷
  2. 只有 54/55/56 三个节点存储数据,每个存储节点打上专属标签 kubernetes.io/storage=longhorn部署 Longhorn 服务时使用 nodeSelector 指定节点标签 (不指定会默认使用所有 Worker 节点)
  3. master 节点不会承载 IO 或副本(集群中其他 Worker 节点,使用 Longhorn 提供的持久化存储)

但经过多次部署调整,在实际部署 Longhorn 时,完全没有实现我的想法吧,Longhorn 存储服务所有组件可以部署在指定节点,后期创建 Pod 测试时发现,当 Pod 分配的 Worker 节点(比如跑到master)不安装 Longhorn CSI 插件,Pod 创建异常,创建失败,异常如下:

Warning FailedAttachVolume 5s (x7 over 40s) attachdetach-controller AttachVolume.Attach failed for volume "pvc-da973140-56e5-42c0-9b8b-51e │ │ 676c718ab" : CSINode host51 does not contain driver driver.longhorn.io

所以暂时也只是部署体验了Longhorn 是咋样的,官方文档其实也很简单本想用来替换现在测试环境nfs单节点持久化存储方案,现在暂时也只能打个?号再去验证了。

也可能是我这边master是可部署缘故吧,因此先狗头保命一下~最后建议初次部署按照官方文档使用默认配置部署,能获得较好的 Longhorn 功能。

安装

系统要求

# 系统要求
# 检查内核版本(应 >= 4.8)
uname -r

# 检查必要工具
which curl
which jq
which kubectl

所需软件包

# 所需软件包 
# 必要组件,Longhorn 依赖主机上的 iscsiadm 向 Kubernetes 提供持久卷。
# Ubuntu/Debian
sudo apt-get install -y open-iscsi nfs-common

# CentOS/RHEL
sudo yum install -yiscsi-initiator-utils nfs-utils curl wget jq

# 启动 iscsid 服务
sudo systemctl enable iscsid --now

对节点设置标签

kubectl label nodes host54 kubernetes.io/storage=longhorn
kubectl label nodes host55 kubernetes.io/storage=longhorn
kubectl label nodes host56 kubernetes.io/storage=longhorn

# 设置存储目录
mkdir -p /longhorn_data
chmod 777 /longhorn_data

# LVM 配置比较简单,操作细节不做解释,直接上命令。
# 按规划将 /dev/sdb 初始化,编辑文件 /etc/fstab,将 /longhorn_data 目录对应的磁盘配置为开机自动挂载。
fdisk /dev/sdb
partprobe /dev/sdb
pvs
vgcreate vgdata  /dev/sdb1
vgs
lvcreate -l 100%FREE -n lvdata vgdata
mkfs.xfs /dev/vgdata/lvdata
mount -t xfs /dev/vgdata/lvdata /longhorn_data
vim /etc/fstab
/dev/vgdata/lvdata /longhorn_data xfs defaults 0 0 

安装 Longhorn步骤

参考手册:https://longhorn.io/docs/1.10.0/deploy/install/install-with-helm/

使用 Helm 安装

# 手册:https://longhorn.io/docs/1.10.0/deploy/install/install-with-helm/

# 添加仓库
helm repo add longhorn https://charts.longhorn.io
# 更新仓库
helm repo update
# 验证仓库
helm search repo longhorn

# 使用自定义配置部署
helm install longhorn longhorn/longhorn \
  --namespace longhorn-system --create-namespace --version 1.10.0 \
  -f longhorn-values.yaml

# 使用下载包部署
helm install longhorn ./longhorn-1.10.0.tgz \
  --namespace longhorn-system \
  -f longhorn-values.yaml


# 查看 Longhorn 版本
helm list -n longhorn-system

# 升级 Longhorn
helm upgrade longhorn ./longhorn-1.10.0.tgz  \
  --namespace longhorn-system \
  -f longhorn-values.yaml


# 查看部署状态
kubectl get pods -n longhorn-system -w
# 查看所有资源
kubectl get all -n longhorn-system


# 卸载 Longhorn 设置里有一个删除保护开关,必须先手动改成 true,否则卸载失败。
kubectl -n longhorn-system edit settings.longhorn.io deleting-confirmation-flag
#改成 true

#删除 uninstall Job:
kubectl -n longhorn-system delete job longhorn-uninstall

helm uninstall longhorn -n longhorn-system

longhorn-values.yaml文件内容
# global:
#   nodeSelector: 
#     kubernetes.io/storage: longhorn

# 持久化存储配置-默认配置
persistence:
  defaultClass: false
  defaultClassReplicaCount: 3

defaultSettings:
  # 基础配置
  defaultDataPath: /longhorn_data
  # 只限制“存储相关组件”:只控制存储 Pod(instance-manager/replica/engine)
  systemManagedComponentsNodeSelector: "kubernetes.io/storage:longhorn"
  # 副本数
  defaultReplicaCount: "3"
  # 默认数据本地性
  defaultDataLocality: disabled
  # 禁用严格本地性
  replicaSoftAntiAffinity: "true"
  # 最小副本数
  minimumSpareCapacity: "10%"
  # 性能优化
  storageMinimalAvailablePercentage: "15"
  defaultLonghornStaticStorageClass: "longhorn"

longhornUI:
  replicas: 1

longhornDriver:
  nodeSelector: {}

# 资源限制
resources:
  limits:
    cpu: 1000m
    memory: 2Gi
  requests:
    cpu: 250m
    memory: 512Mi

# UI 暴露方式
ingress:
  enabled: true
  ingressClassName: "nginx"
  host: "longhorn.gzeport.com"
  tls: false
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret-type: auth-file
    nginx.ingress.kubernetes.io/auth-secret: longhorn-ui-auth-secret-gzapps
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required by gzapps'

image-20251119143026796

访问 Longhorn UI

image-20251119142930771

测试异常说明

创建 Pod,不指定 nodeSelector 标签,Pod 会随机分配,当分配在没有安装 Longhorn CSI 插件的节点时,创建失败,异常如下。

Warning FailedAttachVolume 5s (x7 over 40s) attachdetach-controller AttachVolume.Attach failed for volume "pvc-da973140-56e5-42c0-9b8b-51e │ │ 676c718ab" : CSINode host51 does not contain driver driver.longhorn.io

解决

指定到longhorn节点上即可,或者把master或者其他节点也完完整整部署上

nodeSelector:
    kubernetes.io/storage: longhorn

参考

1.Longhorn 官方文档

2.Kubernetes 存储最佳实践

3.helm部署values.yaml文件

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇