Longhorn 实战:Kubernetes 分布式块存储部署与使用

一、Longhorn 简介

Longhorn 是轻量级、云原生的分布式块存储系统,专为 Kubernetes 设计:

  • 分布式架构:数据自动跨节点复制(默认 3 副本)
  • 精简配置:按需分配存储空间
  • 快照/备份:支持定时快照与备份到 S3
  • 易运维:提供直观的 Web UI 管理界面

二、部署准备
1. 环境要求
  • Kubernetes 集群(v1.18+)
  • 所有节点开放端口:9796(数据传输)、9800(API)
  • 节点需安装:
    nfs-utils  # CentOS/RHEL
    open-iscsi # Ubuntu/Debian
    

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


三、部署 Longhorn
1. 添加 Helm 仓库
helm repo add longhorn https://charts.longhorn.io
helm repo update

2. 安装 Longhorn
kubectl create namespace longhorn-system
helm install longhorn longhorn/longhorn \
  --namespace longhorn-system \
  --version 1.5.1

3. 验证安装
kubectl -n longhorn-system get pods
# 预期输出:所有Pod状态为Running

4. 访问 Web UI
kubectl port-forward -n longhorn-system svc/longhorn-frontend 8080:80

浏览器访问:http://localhost:8080


四、创建存储卷
1. 定义 StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: longhorn-sc
provisioner: driver.longhorn.io
allowVolumeExpansion: true
parameters:
  numberOfReplicas: "3"     # 副本数
  staleReplicaTimeout: "30" # 副本超时(分钟)

2. 创建 PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  storageClassName: longhorn-sc
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi


五、应用中使用存储
MySQL 示例
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:8.0
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "password"
        volumeMounts:
        - name: data
          mountPath: /var/lib/mysql
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: mysql-pvc

验证数据持久化:

kubectl exec -it mysql-pod -- mysql -uroot -ppassword -e "CREATE DATABASE test;"
# 删除Pod后重新创建,数据库仍存在


六、高级功能
1. 创建快照
apiVersion: longhorn.io/v1beta2
kind: VolumeSnapshot
metadata:
  name: mysql-snapshot
spec:
  volume: mysql-pvc  # PVC名称
  snapshotName: hourly-backup

2. 配置 S3 备份

在 Longhorn UI 中:

  1. 进入 Settings > Backup Target
  2. 填写 S3 信息:
    s3://backup-bucket@us-east-1/
    accessKey=AKIAXXX
    secretKey=YYYY
    

3. 监控指标

Prometheus 自动抓取指标端点:

http://longhorn-backend:9500/v1/metrics


七、故障排查

常见问题解决:

  1. 卷卡在 Attaching 状态
    kubectl -n longhorn-system logs -l app=longhorn-manager
    # 检查节点间网络连通性
    

  2. 副本同步失败
    • 在 UI 中检查副本节点状态
    • 验证 open-iscsi 服务运行正常
  3. 存储空间不足
    kubectl edit pvc mysql-pvc  # 修改storage大小
    

注意事项:生产环境建议使用专用存储节点,并定期验证备份完整性。

通过以上步骤,您已完成 Longhorn 的部署与应用集成,实现了 Kubernetes 的持久化存储能力。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐