K3s Longhorn 企业级部署指南
文档说明
本指南基于已有 K3s 集群(已完成节点配置、网络、Metallb 等基础环境),聚焦 Longhorn 标准化部署和磁盘配置,解决原方案"安装成功但磁盘配置失效"的核心问题,遵循 Longhorn 官方最佳实践,兼顾企业级稳定性和操作简洁性。
1. 快速部署 Longhorn
1.1 执行部署
# 安装nfs
apt-get install -y nfs-common
# 1. 添加 Longhorn 仓库(首次部署执行)
helm repo add longhorn https://charts.longhorn.io
helm repo update
# 2. 部署 Longhorn(适配现有集群)
helm upgrade --install longhorn longhorn/longhorn \
--namespace longhorn-system \
--create-namespace \
--version 1.10.1
# 3. 替换固定 IP 地址
kubectl patch svc longhorn-frontend -n longhorn-system -p '{"spec":{"type":"LoadBalancer","loadBalancerIP":"10.2.10.102"}}'
# 4. 查看pod
kubectl get pods -n longhorn-system -w
2. 现有集群磁盘标准化配置
2.1 数据盘挂载(所有 Worker 节点)
mkfs.ext4 -F /dev/sdb;
mkdir -p /var/lib/longhorn/data;
echo '/dev/sdb /var/lib/longhorn/data ext4 defaults,noatime 0 2' >> /etc/fstab;
mount -a;
mount | grep /var/lib/longhorn/data;
chmod 775 /var/lib/longhorn/data;
systemctl daemon-reload
# 安装磁盘后从ui界面重新添加/var/lib/longhorn/data磁盘
3. 现有集群验证与使用(简洁版)
3.1 基础验证
# 1. 检查存储类(设为现有集群默认)
kubectl get sc | grep "(default)"
# 2. 创建测试 PVC(验证磁盘可用)
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: longhorn-test-pvc
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: longhorn
resources:
requests:
storage: 10Gi
EOF
# 3. 检查 PVC 状态(Bound 即为成功)
kubectl get pvc longhorn-test-pvc
# 4. 清理测试资源
kubectl delete pvc longhorn-test-pvc
4.1 卸载 Longhorn
helm uninstall longhorn -n longhorn-system
kubectl delete namespace longhorn-system
kubectl delete crd -l app.kubernetes.io/name=longhorn
# 清理节点磁盘挂载(可选)
for node in $(kubectl get nodes -l node-role.kubernetes.io/worker=true -o jsonpath='{.items[*].metadata.name}'); do
kubectl debug node/$node -it --image=ubuntu -- sh -c "
umount /var/lib/longhorn/data;
sed -i '/\/dev\/sdb/d' /etc/fstab;
"
done
5.1 常见问题排查
# 1. 磁盘识别失败:检查挂载和权限
kubectl debug node/目标节点 -it --image=ubuntu -- sh -c "mount | grep longhorn; ls -ld /var/lib/longhorn/data"
# 2. UI 无法访问:检查 Metallb 和 Service
kubectl get svc longhorn-frontend -n longhorn-system
kubectl logs -n metallb-system deployment/controller --tail=50
# 3. Longhorn 日志排查
kubectl logs -n longhorn-system deployment/longhorn-manager --tail=100 | grep -i error
longhornio 插件镜像
sudo ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/longhorn-ui:v1.10.1
sudo ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/longhorn-ui:v1.10.1 docker.io/longhornio/longhorn-ui:v1.10.1
sudo ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/longhorn-manager:v1.10.1
sudo ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/longhorn-manager:v1.10.1 docker.io/longhornio/longhorn-manager:v1.10.1
sudo ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/longhorn-share-manager:v1.10.1
sudo ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/longhorn-share-manager:v1.10.1 docker.io/longhornio/longhorn-share-manager:v1.10.1
sudo ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/csi-attacher:v4.10.0-20251030
sudo ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/csi-attacher:v4.10.0-20251030 docker.io/longhornio/csi-attacher:v4.10.0-20251030
sudo ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/csi-provisioner:v5.3.0-20251030
sudo ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/csi-provisioner:v5.3.0-20251030 docker.io/longhornio/csi-provisioner:v5.3.0-20251030
sudo ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/csi-resizer:v1.14.0-20251030
sudo ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/csi-resizer:v1.14.0-20251030 docker.io/longhornio/csi-resizer:v1.14.0-20251030
sudo ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/csi-snapshotter:v8.4.0-20251030
sudo ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/csi-snapshotter:v8.4.0-20251030 docker.io/longhornio/csi-snapshotter:v8.4.0-20251030
sudo ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/longhorn-engine:v1.10.1
sudo ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/longhorn-engine:v1.10.1 docker.io/longhornio/longhorn-engine:v1.10.1
sudo ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/longhorn-instance-manager:v1.10.1
sudo ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/longhorn-instance-manager:v1.10.1 docker.io/longhornio/longhorn-instance-manager:v1.10.1
sudo ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/livenessprobe:v2.17.0-20251030
sudo ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/livenessprobe:v2.17.0-20251030 docker.io/longhornio/livenessprobe:v2.17.0-20251030
sudo ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/csi-node-driver-registrar:v2.15.0-20251030
sudo ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/longhornio/csi-node-driver-registrar:v2.15.0-20251030 docker.io/longhornio/csi-node-driver-registrar:v2.15.0-20251030