Longhorn安装记录
简介
Longhorn 是一个轻量级、可靠且功能强大的分布式块存储系统,专为 Kubernetes 而设计。它实现了可靠的持久化存储,支持快照、备份和跨集群灾难恢复等企业级功能。
Longhorn 初使用反馈
在测试环境使用6台机器,其中host51-53是master,host54-56是worker,但是呢实际上host51-53也是可以跑pod(测试环境资源利用最大化),为了贴近生产需求,我在规划部署时增加了一些想法:
- 所有节点都能挂载卷
- 只有 54/55/56 三个节点存储数据,每个存储节点打上专属标签
kubernetes.io/storage=longhorn部署 Longhorn 服务时使用 nodeSelector 指定节点标签 (不指定会默认使用所有 Worker 节点) - 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'

访问 Longhorn UI

测试异常说明
创建 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