MicroK8s持久化存储:Longhorn分布式存储部署
为什么需要分布式存储?
在Kubernetes(K8s)环境中,容器的临时性和动态调度特性使得持久化数据存储成为关键挑战。传统单机存储方案无法满足多节点集群的数据共享和高可用性需求。Longhorn作为轻量级分布式块存储解决方案,专为Kubernetes设计,能够提供可靠的持久化存储服务,确保数据在节点故障时不丢失,且支持动态扩容和快照功能。
MicroK8s作为轻量级K8s发行版,虽然默认提供基础存储能力,但在生产环境中需要更强大的分布式存储支持。本文将详细介绍如何在MicroK8s集群中部署Longhorn,实现持久化存储的高可用配置。
环境准备与依赖检查
硬件要求
- 至少3个节点的MicroK8s集群(推荐配置:每个节点2CPU、4GB内存、20GB空闲磁盘)
- 节点间网络互通(TCP 8080、9090端口开放)
- 每个节点已安装
open-iscsi(Longhorn依赖)
软件版本要求
- MicroK8s v1.24+(可通过
microk8s version查看当前版本) - Kubernetes v1.24+
- Helm v3.0+(用于部署Longhorn)
依赖组件安装
在所有节点执行以下命令安装必要依赖:
# 安装open-iscsi
sudo apt update && sudo apt install -y open-iscsi
# 启动iscsid服务
sudo systemctl enable --now iscsid
# 验证MicroK8s状态
microk8s status --wait-ready
部署Longhorn到MicroK8s
启用MicroK8s必要插件
Longhorn部署依赖Kubernetes的核心组件,需先启用以下MicroK8s插件:
# 启用DNS和存储插件
microk8s enable dns storage
# 启用Helm(用于部署Longhorn)
microk8s enable helm
# 验证插件状态
microk8s status
添加Longhorn Helm仓库
# 使用MicroK8s内置Helm添加仓库
microk8s helm repo add longhorn https://charts.longhorn.io
microk8s helm repo update
部署Longhorn
创建Longhorn命名空间并部署:
# 创建命名空间
microk8s kubectl create namespace longhorn-system
# 部署Longhorn(指定版本以确保兼容性)
microk8s helm install longhorn longhorn/longhorn \
--namespace longhorn-system \
--version 1.4.3 \
--set defaultSettings.defaultDataPath="/var/lib/longhorn"
验证部署状态
# 检查Longhorn Pod状态(所有Pod需处于Running状态)
microk8s kubectl get pods -n longhorn-system
# 检查Longhorn服务状态
microk8s kubectl get svc -n longhorn-system
Longhorn存储类配置
设置Longhorn为默认存储类
部署完成后,需将Longhorn设置为默认存储类,以便PVC(PersistentVolumeClaim)能够自动绑定:
# 获取当前存储类
microk8s kubectl get sc
# 将Longhorn设为默认存储类
microk8s kubectl patch storageclass longhorn -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
自定义存储类参数(可选)
如需调整存储性能或副本策略,可创建自定义存储类:
# longhorn-custom-sc.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: longhorn-replicated
provisioner: driver.longhorn.io
parameters:
numberOfReplicas: "3" # 3副本提高可用性
staleReplicaTimeout: "30" # 副本超时时间(分钟)
fromBackup: "" # 从备份恢复(可选)
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
应用配置:
microk8s kubectl apply -f longhorn-custom-sc.yaml
使用Longhorn存储示例
创建持久化存储声明(PVC)
创建测试PVC文件test-pvc.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: longhorn-test-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn # 使用Longhorn存储类
resources:
requests:
storage: 10Gi # 请求10GB存储
应用PVC配置:
microk8s kubectl apply -f test-pvc.yaml
验证PVC绑定状态
# 查看PVC状态(STATUS应为Bound)
microk8s kubectl get pvc
部署测试应用使用PVC
创建测试Deployment文件nginx-test.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-test
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
volumeMounts:
- name: data
mountPath: /usr/share/nginx/html
volumes:
- name: data
persistentVolumeClaim:
claimName: longhorn-test-pvc
部署应用并验证存储挂载:
# 部署应用
microk8s kubectl apply -f nginx-test.yaml
# 查看Pod状态
microk8s kubectl get pods
# 进入Pod验证存储挂载
microk8s kubectl exec -it <pod-name> -- df -h | grep /usr/share/nginx/html
Longhorn管理界面访问
暴露Longhorn UI服务
默认情况下,Longhorn UI仅在集群内部可访问,通过NodePort暴露服务:
# 编辑Longhorn服务
microk8s kubectl edit svc longhorn-frontend -n longhorn-system
将type: ClusterIP修改为type: NodePort,保存退出。然后获取访问端口:
microk8s kubectl get svc longhorn-frontend -n longhorn-system
访问管理界面
通过http://<node-ip>:<node-port>访问Longhorn UI,可查看存储状态、创建快照、管理卷等。
常见问题与解决方案
问题1:Longhorn Pod无法启动(iscsi相关错误)
解决方案:验证所有节点open-iscsi是否正确安装并运行:
# 检查iscsid状态
systemctl status iscsid
# 如未运行,执行启动命令
sudo systemctl enable --now iscsid
问题2:PVC创建后一直处于Pending状态
解决方案:检查Longhorn存储类是否存在且可用:
# 检查存储类
microk8s kubectl get sc
# 检查Longhorn控制器日志
microk8s kubectl logs -n longhorn-system deployment/longhorn-manager -f
问题3:节点磁盘空间不足
解决方案:清理节点上的无用数据或扩展磁盘,然后在Longhorn UI中执行"磁盘清理"操作。
总结与最佳实践
部署关键点
- 确保所有节点满足硬件和软件要求,特别是
open-iscsi依赖 - 生产环境建议部署3个以上节点,实现存储副本跨节点冗余
- 定期备份Longhorn卷数据(可通过UI或
longhorn-backup命令)
性能优化建议
- 将Longhorn数据目录(
defaultDataPath)挂载到高性能磁盘 - 根据应用需求调整存储类的副本数(关键业务建议3副本)
- 启用Longhorn的精简配置(Thin Provisioning)节省存储空间
参考文档
通过本文配置,您已成功在MicroK8s集群中部署Longhorn分布式存储,为容器应用提供可靠的持久化存储解决方案。如需进一步扩展,可参考Longhorn文档配置备份策略或跨区域复制。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





