3. 部署 Longhorn:环境要求与安装方式

Longhorn 作为云原生分布式块存储,对 Kubernetes 集群版本、节点资源及内核模块有明确要求。本章将系统梳理部署前的环境检查清单,并分别演示 Helm CLI 和 Rancher Marketplace 两种主流部署路径。

3.1 环境要求总览

部署 Longhorn 前,必须逐项确认以下条件,否则可能出现数据面异常或控制面不可用。

类别 最低要求 推荐配置 说明
Kubernetes 版本 v1.21+ v1.27+ 需启用 CSIDriver、VolumeSnapshot、ExpandInUsePersistentVolume 特性门控
节点数量 3 个 worker 节点 ≥5 个 worker 节点 副本默认 3 份,节点数少于 3 将无法调度副本
每节点 CPU 2 核 4 核 Longhorn 引擎 + replica 进程各占 1 核
每节点内存 4 GiB 8 GiB 引擎约 512 MiB,每个 replica 约 256 MiB
每节点磁盘 40 GiB 可用 100 GiB+ 建议使用独立数据盘,不占用系统盘
文件系统 ext4 / xfs xfs 必须支持 d_type(xfs 默认支持)
内核模块 iscsi_tcp、nbd 同左 用于 iSCSI 发起端和块设备映射
open-iscsi v2.0.877+ 最新稳定版 所有节点需安装 iscsiadm
NFS 客户端 nfs-common / nfs-utils 同左 仅在使用 ReadWriteMany 卷时需要
⚠ 版本漂移风险提示: Longhorn 的 CRD 版本与 Kubernetes API 版本强绑定。若集群从 v1.21 升级到 v1.28 后未同步升级 Longhorn,可能导致 CRD 存储版本不一致,引发卷挂载失败或数据不可用。本课程第 5 章将专门讲解版本漂移校准方案。

3.2 节点前置准备

在所有 worker 节点上执行以下操作:

  1. 安装 open-iscsi(Ubuntu/Debian 示例)
sudo apt-get update
sudo apt-get install -y open-iscsi
sudo systemctl enable --now iscsid
  1. 加载内核模块
sudo modprobe iscsi_tcp
sudo modprobe nbd
echo "iscsi_tcp" | sudo tee /etc/modules-load.d/longhorn.conf
echo "nbd" | sudo tee -a /etc/modules-load.d/longhorn.conf
  1. 确认节点标签(可选但推荐)
kubectl label node <node-name> node.longhorn.io/create-default-disk=true
💡 生产建议: 使用独立数据盘时,先格式化并挂载到统一路径(如 /var/lib/longhorn),再通过 Longhorn 的 default-disk 配置指定该路径,避免系统盘被存储流量打满。

3.3 使用 Helm 部署 Longhorn

Helm 是 Kubernetes 生态中最灵活的部署方式,适合 GitOps 和 CI/CD 集成场景。

3.3.1 添加 Helm 仓库

helm repo add longhorn https://charts.longhorn.io
helm repo update

3.3.2 创建命名空间

kubectl create namespace longhorn-system

3.3.3 安装 Longhorn(带自定义参数)

helm install longhorn longhorn/longhorn \
  --namespace longhorn-system \
  --set persistence.defaultClassReplicaCount=3 \
  --set defaultSettings.replicaSoftAntiAffinity=false \
  --set defaultSettings.guaranteedEngineManagerCPU=0.25 \
  --set defaultSettings.guaranteedReplicaManagerCPU=0.25
参数 默认值 说明
persistence.defaultClassReplicaCount 3 默认 StorageClass 的副本数
defaultSettings.replicaSoftAntiAffinity true 设为 false 强制硬反亲和,避免副本分布在同一节点
defaultSettings.guaranteedEngineManagerCPU 0.12 引擎管理器预留 CPU,生产建议 0.25
defaultSettings.guaranteedReplicaManagerCPU 0.12 副本管理器预留 CPU,生产建议 0.25

3.3.4 验证部署

kubectl -n longhorn-system get pods -w
kubectl -n longhorn-system get svc longhorn-frontend

当所有 Pod 进入 Running 状态后,通过 longhorn-frontend 的 NodePort 或 Ingress 访问 UI。

3.4 使用 Rancher Marketplace 部署

对于已部署 Rancher 管理平台的团队,Marketplace 提供图形化一键部署,降低操作门槛。

3.4.1 进入 Apps & Marketplace

  1. 登录 Rancher UI,选择目标集群。
  2. 左侧导航栏点击 Apps > Charts。
  3. 搜索 Longhorn,点击进入详情页。

3.4.2 配置安装参数

Rancher 会以表单形式展示关键参数,与 Helm values 一一对应:

  • Namespace:默认 longhorn-system,建议保持。
  • Replica Count:生产环境设为 3。
  • Default Data Path:指定数据盘挂载路径,如 /var/lib/longhorn。
  • Ingress:可选启用,配合 TLS 证书暴露 UI。

3.4.3 启动安装

点击 Install,Rancher 会自动执行 Helm 安装并等待 Pod 就绪。安装完成后,可在 Apps > Installed Apps 中查看状态。

🔑 关键差异: Rancher Marketplace 本质是对 Helm Chart 的封装,底层安装逻辑相同。区别在于:Marketplace 提供图形化参数校验和依赖检查,适合运维经验较少的团队;Helm CLI 更适合自动化流水线和版本锁定场景。

3.5 部署架构与组件关系

下图展示了 Longhorn 部署后的核心组件及其交互关系,帮助理解控制面与数据面的分离设计。

Longhorn 部署架构与组件关系 Longhorn 部署架构与组件关系 Kubernetes 集群 Control Plane API Server / Scheduler CSIDriver / VolumeSnapshot Worker Node 1 Longhorn Engine Replica A / Replica B Worker Node 2 Longhorn Engine Replica C / Replica D Worker Node 3 Longhorn Engine Replica E / Replica F Worker Node 4 Longhorn Engine Replica G / Replica H Longhorn Manager CRD 控制器 / Webhook Instance Manager Longhorn UI Dashboard / 卷管理 / 备份 后端存储(本地磁盘 / NFS / S3) 数据块实际落盘位置 控制面 数据面 管理面 UI 存储后端

3.6 部署后验证清单

无论使用哪种部署方式,安装完成后都应执行以下验证:

检查项 命令 / 方法 预期结果
Pod 状态 kubectl -n longhorn-system get pods 所有 Pod 均为 Running 或 Completed
StorageClass kubectl get sc 存在 longhorn(默认)或自定义名称
节点磁盘 Longhorn UI → Node → 查看 Disk 每个节点显示可用磁盘容量
卷创建 kubectl create -f test-pvc.yaml PVC 状态 Bound,Pod 可正常读写
iSCSI 连接 iscsiadm -m session 显示 Longhorn 引擎的 iSCSI 会话
📌 版本漂移预防: 部署完成后,立即记录 Longhorn 版本与 Kubernetes 版本的对应关系:kubectl -n longhorn-system get deployment longhorn-manager -o jsonpath='{.spec.template.spec.containers[0].image}'。将此信息纳入集群版本变更的准入检查项。