跳到主要内容

K3s Longhorn 安装指南

0. Longhorn 简介

Longhorn 是一款轻量级、可靠且易用的 Kubernetes 分布式块存储解决方案,由 Rancher 开发并捐赠给 CNCF。它专为云原生环境设计,提供了丰富的存储功能和良好的用户体验。

0.1 Longhorn 优势

  • 轻量级设计:资源占用少,适合各种规模的 Kubernetes 集群
  • 易于部署和管理:提供直观的 Web UI,简化存储管理
  • 高可用性:支持多副本存储(默认 3 副本),确保数据安全
  • 丰富的功能集:支持快照、备份、恢复、卷克隆等高级功能
  • 良好的扩展性:支持动态扩展存储容量
  • 与 Kubernetes 深度集成:原生支持 Kubernetes API
  • 开源免费:基于 Apache 2.0 许可证

0.2 适用场景

  • K3s 集群持久化存储:为 K3s 集群提供可靠的持久化存储
  • 中小规模生产环境:适合 100 节点以内的集群
  • 边缘计算:轻量级设计适合边缘设备
  • DevOps 环境:快速部署和管理,适合开发测试场景
  • 混合云环境:支持跨云存储管理

1. 系统要求

1.1 节点要求

  • 节点数量:至少 3 个节点(推荐),支持单节点测试
  • Kubernetes 版本:K3s v1.20+(Longhorn v1.4+ 支持)
  • 操作系统:Linux 发行版(Ubuntu、CentOS、Debian 等)

1.2 硬件要求

  • CPU:每个节点至少 2 CPU 核心
  • 内存:每个节点至少 4 GB RAM
  • 磁盘
    • 至少 10 GB 可用空间用于 Longhorn 组件
    • 推荐使用 SSD 以获得更好的性能
    • 每个节点至少有一个未格式化的磁盘或分区(可选,用于 Longhorn 存储)

1.3 网络要求

  • 节点间网络连通性良好
  • 推荐使用 1 Gbps 或更快的网络
  • 确保以下端口可用:
    • 2049:NFS(用于备份)
    • 30000-32767:Longhorn 节点端口范围(用于内部组件通信)

2. 安装前准备

2.1 前置条件说明

  • MetalLB:已默认安装并配置完成,用于提供 LoadBalancer 服务的外部 IP 地址
  • 固定 IP:将为 Longhorn UI 分配固定 IP 地址,确保服务可稳定访问

2.2 安装 open-iscsi

Longhorn 需要在所有节点上安装 open-iscsiiscsiadm 来管理块存储。

2.2.1 Ubuntu/Debian 系统

sudo apt update
sudo apt install -y open-iscsi
sudo systemctl enable --now iscsid

2.2.2 CentOS/RHEL 系统

sudo yum install -y iscsi-initiator-utils
sudo systemctl enable --now iscsid

2.3 可选:指定特定硬盘(安装前配置)

如果你想让 Longhorn 使用特定的硬盘,可以在安装前通过节点标签来指定。

# 替换 <node-name> 为节点名称
# 替换 /dev/sdb 和 /dev/sdc 为你想要使用的磁盘
kubectl label nodes <node-name> node.longhorn.io/default-disks-config='[{"path":"/dev/sdb","allowScheduling":true},{"path":"/dev/sdc","allowScheduling":true}]'

# 可选:为节点添加标签,控制是否创建默认磁盘
kubectl label nodes <node-name> node.longhorn.io/create-default-disk=true

3. 快速部署 Longhorn(推荐)

3.1 方法一:使用 Helm 部署(带固定 IP)

这是推荐的部署方式,简单快捷,支持固定 IP 配置。

3.1.1 安装 Helm(如果尚未安装)

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
sudo chmod 700 get_helm.sh
sudo ./get_helm.sh

3.1.2 添加 Longhorn Helm 仓库

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

3.1.3 部署 Longhorn(带固定 IP)

# 替换 10.2.10.150 为你想要的固定 IP 地址
helm install longhorn longhorn/longhorn \
--namespace longhorn-system \
--create-namespace \
--version 1.5.3 \
--set ui.service.type=LoadBalancer \
--set ui.service.loadBalancerIP=10.2.10.150

3.2 方法二:使用 YAML 文件部署

这是另一种部署方式,适合没有 Helm 的环境。

3.2.1 基本部署

kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.5.3/deploy/longhorn.yaml

3.2.2 配置固定 IP(部署后)

# 替换 10.2.10.150 为你想要的固定 IP 地址
kubectl patch svc longhorn-frontend -n longhorn-system \
-p '{"spec":{"type":"LoadBalancer","loadBalancerIP":"10.2.10.150"}}'

4. 部署验证

4.1 检查 Longhorn Pod 状态

kubectl -n longhorn-system get pods

所有 Pod 应处于 Running 状态。

4.2 访问 Longhorn Web UI

使用浏览器访问你配置的固定 IP(例如:http://10.2.10.150),可以看到 Longhorn Web UI 界面。

4.3 检查 Longhorn 存储类

kubectl get storageclass

应该看到默认的 longhorn 存储类。

5. 简单使用示例

5.1 创建 PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: longhorn-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 10Gi

保存为 pvc.yaml,然后执行:

kubectl apply -f pvc.yaml

5.2 在 Pod 中使用 PVC

apiVersion: v1
kind: Pod
metadata:
name: nginx-with-longhorn
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- name: nginx-storage
mountPath: /usr/share/nginx/html
volumes:
- name: nginx-storage
persistentVolumeClaim:
claimName: longhorn-pvc

保存为 pod.yaml,然后执行:

kubectl apply -f pod.yaml

5.3 验证 PVC 和 Pod

# 检查 PVC 状态
kubectl get pvc longhorn-pvc

# 检查 Pod 状态
kubectl get pod nginx-with-longhorn

6. 基本管理操作

6.1 登录 Longhorn UI

使用浏览器访问你配置的固定 IP(例如:http://10.2.10.150)。

6.2 查看卷信息

  1. 登录 Longhorn UI
  2. 导航到 "Volumes" 页面
  3. 查看所有卷的状态和信息

6.3 创建快照

  1. 在 "Volumes" 页面找到要创建快照的卷
  2. 点击 "Take Snapshot" 按钮
  3. 输入快照名称,点击 "OK"

6.4 创建备份

  1. 确保已配置备份目标(在 "Settings" -> "General" 中)
  2. 在 "Volumes" 页面找到要备份的卷
  3. 点击 "Backup" 按钮
  4. 输入备份名称,点击 "OK"

7. 安装后配置(可选)

7.1 安装后添加特定硬盘

如果你在安装前没有指定特定硬盘,可以在安装后通过 Web UI 手动添加。

  1. 登录 Longhorn UI
  2. 导航到 "Nodes" 页面
  3. 点击要配置的节点
  4. 点击 "Add Disk" 按钮
  5. 选择磁盘路径和配置选项
  6. 点击 "Save" 按钮

7.2 使用 values.yaml 自定义配置

对于更复杂的配置,可以使用 values.yaml 文件重新部署或升级 Longhorn。

7.2.1 创建 values.yaml 文件

defaultSettings:
# 存储配置
defaultReplicaCount: 3 # 默认副本数
defaultDataPath: "/var/lib/longhorn" # 数据存储路径

# 备份配置(可选)
backupTarget: "nfs://192.168.1.100:/backup/longhorn" # 备份目标位置

# UI 配置
ui:
service:
type: LoadBalancer
loadBalancerIP: 10.2.10.150 # 固定 IP 地址

# 磁盘配置
# 配置节点磁盘自动发现
disk:
# 忽略系统盘
ignorePattern: "/dev/sda|/dev/vda|/dev/nvme0n1"
# 允许的磁盘类型
allowPattern: "/dev/sd.*|/dev/vd.*|/dev/nvme.*"

7.2.2 使用 values.yaml 升级

helm upgrade longhorn longhorn/longhorn \
--namespace longhorn-system \
-f values.yaml

7.3 磁盘分组和标签

可以为磁盘添加标签,实现更精细的存储管理:

  1. 登录 Longhorn UI
  2. 导航到 "Nodes" 页面
  3. 点击要配置的节点
  4. 点击要配置的磁盘
  5. 点击 "Edit" 按钮
  6. 添加标签(例如:type=ssd
  7. 点击 "Save" 按钮

然后在存储类中使用标签选择磁盘:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: longhorn-ssd
provisioner: driver.longhorn.io
parameters:
numberOfReplicas: "3"
diskSelector: "type=ssd"

8. 升级和卸载

8.1 升级 Longhorn

8.1.1 使用 Helm 升级

helm repo update
helm upgrade longhorn longhorn/longhorn -n longhorn-system

8.1.2 使用 YAML 文件升级

kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.5.3/deploy/longhorn.yaml

8.2 卸载 Longhorn

8.2.1 使用 Helm 卸载

helm uninstall longhorn -n longhorn-system
kubectl delete namespace longhorn-system

8.2.2 清理残留资源

# 删除 CRD
kubectl delete crd -l app.kubernetes.io/instance=longhorn

# 删除存储类
kubectl delete storageclass longhorn

9. 故障排除

9.1 常见问题

9.1.1 Pod 无法挂载 Longhorn 卷

  • 检查 open-iscsi 服务是否在所有节点上运行
  • 检查节点间网络连通性
  • 查看 Longhorn manager 日志获取详细错误信息

9.1.2 Longhorn UI 无法访问

  • 检查 longhorn-frontend Service 是否正常运行
  • 检查防火墙设置,确保固定 IP 可以访问

9.1.3 卷处于降级状态

  • 检查节点状态,确保所有节点都正常运行
  • 查看卷的副本状态,可能需要手动删除故障副本

9.2 诊断命令

# 检查 Longhorn 状态
kubectl -n longhorn-system get longhornvolume

# 检查 Longhorn 节点状态
kubectl -n longhorn-system get longhornnode

# 查看 Longhorn manager 日志
kubectl -n longhorn-system logs longhorn-manager-<pod-id>

10. 最佳实践

10.1 存储配置

  • 使用 SSD 存储以获得更好的性能
  • 为 Longhorn 分配专用磁盘,避免与系统磁盘共享
  • 根据应用需求调整副本数量(性能与可靠性的权衡)

10.2 备份策略

  • 定期创建卷备份
  • 将备份存储在与集群不同的位置(异地备份)
  • 测试从备份恢复的过程

10.3 监控和告警

  • 集成 Prometheus 和 Grafana 监控 Longhorn 性能指标
  • 设置告警规则,监控卷状态、副本状态和存储使用率

10.4 节点管理

  • 定期维护节点,确保系统和内核版本保持最新
  • 避免在运行关键应用的节点上进行维护操作

11. 参考资料

12. 总结

Longhorn 是一款轻量级、易用的 Kubernetes 分布式块存储解决方案,非常适合 K3s 集群。通过本指南,你已经了解了如何:

  • 完成安装前的准备工作,包括依赖安装和特定硬盘配置
  • 使用 Helm 快速部署 Longhorn 并配置固定 IP
  • 在 Pod 中使用 Longhorn 存储
  • 进行基本的管理操作
  • 在安装后添加特定硬盘和进行其他配置
  • 升级和卸载 Longhorn
  • 解决常见问题

Longhorn 提供了丰富的功能,包括快照、备份、恢复和卷克隆等,可以满足大多数应用场景的需求。在生产环境中,建议结合监控和告警系统,确保 Longhorn 集群的稳定运行。