K8S上快速部署LongHorn:分布式块存储实战指南
一、LongHorn分布式块存储简介
LongHorn是由Rancher Labs开发的开源分布式块存储系统,专为Kubernetes设计。它通过将存储卷拆分为多个数据块并跨节点复制,提供高可用、弹性的存储解决方案。相比传统存储方案(如NFS、iSCSI),LongHorn具有以下优势:
- 去中心化架构:无需专用存储节点,每个工作节点均可贡献存储资源。
- 自动数据保护:支持配置副本数(默认3副本),确保数据高可用。
- 动态卷管理:支持动态创建、扩展、快照和恢复PV/PVC。
- 与K8S深度集成:通过CSI驱动无缝对接K8S存储类(StorageClass)。
二、环境准备与前置条件
1. 硬件要求
- 节点数量:至少3个工作节点(推荐奇数个节点以支持仲裁)。
- 存储资源:每个节点需预留至少10%的磁盘空间用于LongHorn存储。
- 网络要求:节点间需开通TCP端口9500(数据传输)、9501(控制平面)。
2. 软件依赖
- Kubernetes集群版本≥1.18(推荐1.20+)。
- 已安装Helm(v3.2+)或通过Kubectl直接部署。
- 节点需支持
xfs
或ext4
文件系统(LongHorn默认使用xfs
)。
3. 节点标签配置
为确保LongHorn组件分散部署,建议为节点添加标签:
kubectl label nodes <node-name> node-role.kubernetes.io/longhorn=true
三、LongHorn安装步骤
方法1:通过Helm安装(推荐)
1. 添加LongHorn Helm仓库
helm repo add longhorn https://charts.longhorn.io
helm repo update
2. 创建命名空间
kubectl create namespace longhorn-system
3. 自定义Values配置(可选)
编辑values.yaml
调整参数,例如:
persistence:
defaultClassReplicaCount: 3 # 默认副本数
recurringJobSelector:
enable: true # 启用定时快照
nodeDownPodDeletionPolicy: DeleteBothStatefulSetAndDeployment # 节点故障时处理策略
4. 执行安装
helm install longhorn longhorn/longhorn --namespace longhorn-system -f values.yaml
方法2:通过Kubectl直接部署
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.5.3/deploy/longhorn.yaml
四、安装后验证与配置
1. 检查组件状态
kubectl -n longhorn-system get pods
# 预期输出:所有Pod状态为Running
NAME READY STATUS
csi-attacher-xxx 1/1 Running
engine-image-ei-xxx 1/1 Running
longhorn-driver-deployer-xxx 1/1 Running
2. 访问LongHorn UI
kubectl -n longhorn-system port-forward svc/longhorn-frontend 8080:80
浏览器访问http://localhost:8080
,登录后查看存储仪表盘。
3. 创建StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: longhorn-sc
provisioner: driver.longhorn.io
allowVolumeExpansion: true
parameters:
numberOfReplicas: "3"
staleReplicaTimeout: "2880" # 48小时(单位:分钟)
fromBackup: ""
应用后测试PVC创建:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn-sc
resources:
requests:
storage: 10Gi
五、高级配置与优化
1. 跨节点数据均衡
通过LongHorn UI或CLI手动触发数据重均衡:
kubectl exec -n longhorn-system <engine-pod> -- longhorn engine rebalance --volume <volume-name>
2. 备份与恢复
配置S3兼容备份目标(如MinIO):
# 在LongHorn UI的Settings > Backup Target中配置
Backup Target URL: s3://backup-bucket@us-east-1/
AWS Access Key: <your-key>
AWS Secret Key: <your-secret>
3. 性能调优
- 调整副本同步间隔:在StorageClass中设置
replicaDiskSoftAntiAffinity: true
避免副本共盘。 - 启用快速恢复:设置
replicaAutoBalance: least-effort
。
六、常见问题排查
1. Pod卡在ContainerCreating状态
- 检查节点标签是否正确:
kubectl get nodes --show-labels
。 - 验证节点存储空间:
df -h /var/lib/longhorn/
。
2. 副本无法启动
- 检查防火墙规则是否放行9500/9501端口。
- 查看引擎日志:
kubectl logs -n longhorn-system <engine-pod>
。
3. 存储类不生效
- 确认PVC的
storageClassName
与StorageClass名称一致。 - 检查CSI驱动状态:
kubectl get csidrivers
。
七、生产环境建议
- 监控集成:通过Prometheus+Grafana监控LongHorn指标(如
longhorn_volume_capacity_bytes
)。 - 升级策略:使用Helm升级时先备份数据,并通过
helm upgrade --atomic
确保回滚。 - 节点维护:执行
kubectl drain
前需先删除该节点上的LongHorn卷。
通过以上步骤,开发者可在K8S环境中快速部署LongHorn分布式块存储,为有状态应用提供可靠的存储基础。实际部署中需结合业务场景调整副本策略和备份周期,确保数据安全与性能平衡。”
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权请联系我们,一经查实立即删除!