MicroK8s持久化存储:Longhorn分布式存储部署

MicroK8s持久化存储:Longhorn分布式存储部署

【免费下载链接】microk8s MicroK8s is a small, fast, single-package Kubernetes for datacenters and the edge. 【免费下载链接】microk8s 项目地址: https://gitcode.com/gh_mirrors/mic/microk8s

为什么需要分布式存储?

在Kubernetes(K8s)环境中,容器的临时性和动态调度特性使得持久化数据存储成为关键挑战。传统单机存储方案无法满足多节点集群的数据共享和高可用性需求。Longhorn作为轻量级分布式块存储解决方案,专为Kubernetes设计,能够提供可靠的持久化存储服务,确保数据在节点故障时不丢失,且支持动态扩容和快照功能。

MicroK8s作为轻量级K8s发行版,虽然默认提供基础存储能力,但在生产环境中需要更强大的分布式存储支持。本文将详细介绍如何在MicroK8s集群中部署Longhorn,实现持久化存储的高可用配置。

Kubernetes认证标志

环境准备与依赖检查

硬件要求

  • 至少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,可查看存储状态、创建快照、管理卷等。

MicroK8s Logo

常见问题与解决方案

问题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中执行"磁盘清理"操作。

总结与最佳实践

部署关键点

  1. 确保所有节点满足硬件和软件要求,特别是open-iscsi依赖
  2. 生产环境建议部署3个以上节点,实现存储副本跨节点冗余
  3. 定期备份Longhorn卷数据(可通过UI或longhorn-backup命令)

性能优化建议

  • 将Longhorn数据目录(defaultDataPath)挂载到高性能磁盘
  • 根据应用需求调整存储类的副本数(关键业务建议3副本)
  • 启用Longhorn的精简配置(Thin Provisioning)节省存储空间

参考文档

通过本文配置,您已成功在MicroK8s集群中部署Longhorn分布式存储,为容器应用提供可靠的持久化存储解决方案。如需进一步扩展,可参考Longhorn文档配置备份策略或跨区域复制。

【免费下载链接】microk8s MicroK8s is a small, fast, single-package Kubernetes for datacenters and the edge. 【免费下载链接】microk8s 项目地址: https://gitcode.com/gh_mirrors/mic/microk8s

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值