如何在 Kubernetes(k8s) 中配置和使用 GlusterFS 存储作为 PersistentVolume?

问题浏览数Icon
118
问题创建时间Icon
2025-04-24 03:22:00
作者头像
smallnest66

在Kubernetes中配置GlusterFS作为PersistentVolume的实践经验可分为以下阶段:

  1. 前置条件准备

    • 部署GlusterFS集群(至少3节点),建议使用专用磁盘分区
    • 所有Kubernetes节点安装glusterfs-client,CentOS需额外安装glusterfs-fuse
    • 创建信任池(probe)时需确保防火墙开放24007-24009/TCP及49152-49251/TCP端口
  2. Kubernetes资源配置

    # Endpoints定义(示例)
    apiVersion: v1
    kind: Endpoints
    metadata:
     name: glusterfs-cluster
    subsets:
     - addresses:
         - ip: 10.0.0.1
         - ip: 10.0.0.2
       ports:
         - port: 24007
           name: glusterd

    需同步创建同名Service作为访问入口

  3. PersistentVolume配置要点

    • 使用volumeType: Replicate3确保三副本
    • 设置gid参数匹配Pod安全上下文
    • 推荐添加mountOptions: [background-qos=off]提升稳定性
  4. 动态存储配置(Heketi方案)

    • Heketi需配置SSH免密访问Gluster节点
    • 拓扑文件需明确定义节点、设备、区块分配策略
    • 常见故障点在于storageclass的resturl需使用Heketi服务地址

实践挑战及解决方案:

  1. 权限冲突问题

    • 现象:Pod报Permission denied错误
    • 排查:检查PV的gid与Pod securityContext是否匹配
    • 方案:在PV定义中显式设置gid,或在storageclass添加volumegroup参数
  2. 网络抖动导致IO Hang

    • 现象:存储性能波动大,偶现卡顿
    • 方案:优化内核参数net.ipv4.tcp_keepalive_time=600,启用GlusterFS的客户端缓存
    • 建议:生产环境需保证节点间网络延迟<2ms,禁用CPU节能模式
  3. 存储扩容困境

    • 痛点:传统方案需要人工干预Heketi拓扑
    • 创新实践:通过Ansible自动发现新存储节点并更新Heketi拓扑
    • 监控指标:设置Prometheus告警规则监控存储池使用率>70%
  4. 版本兼容性问题

    • 关键发现:GlusterFS 7.x与Kubernetes 1.20+存在fstype识别异常
    • 规避方案:强制指定PV的mountOptions为log-level=ERROR
    • 升级策略:先升级测试集群验证CSI驱动兼容性

运维建议:在非生产环境验证GlusterFS的脑裂恢复流程,定期执行gluster volume heal <VOLNAME> info检查数据一致性。

更多回答

作者头像
mistzone99

在Kubernetes中配置GlusterFS存储需创建Endpoints和Service指向Gluster集群,随后定义PersistentVolume指定glusterfs类型及路径,最后通过PersistentVolumeClaim挂载到Pod即可使用。

作者头像
haochen01

先在k8s集群外搭好GlusterFS存储集群,记下节点IP和卷名。然后在k8s里创建Endpoints和Service指向GlusterFS节点,接着写个PersistentVolume配置文件,指定glusterfs的路径和endpoints名称。再搞个PersistentVolumeClaim来绑定这个PV。最后在Pod配置里通过volumeClaimName调用就完事了。注意要装好glusterfs客户端,挂载时保持长连接别断嗷!

作者头像
vmlearner01
  1. 准备GlusterFS集群:确保GlusterFS集群已部署且卷(如gv0)创建完成。

  2. 安装依赖:在所有Kubernetes节点安装glusterfs-client

    apt-get install glusterfs-client  # Debian/Ubuntu
    yum install glusterfs-fuse        # CentOS/RHEL
  3. 创建Endpoint/Service:定义GlusterFS节点IP(替换为实际IP):

    apiVersion: v1
    kind: Endpoints
    metadata:
     name: glusterfs-cluster
    subsets:
     - addresses:
         - ip: 10.0.0.1
         - ip: 10.0.0.2
       ports:
         - port: 49152  # GlusterFS默认端口
    ---
    apiVersion: v1
    kind: Service
    metadata:
     name: glusterfs-cluster
    spec:
     ports:
     - port: 49152
  4. 创建PersistentVolume(静态配置)

    apiVersion: v1
    kind: PersistentVolume
    metadata:
     name: gluster-pv
    spec:
     capacity:
       storage: 10Gi
     accessModes:
       - ReadWriteMany
     glusterfs:
       endpoints: glusterfs-cluster
       path: gv0               # GlusterFS卷名称
       readOnly: false
     persistentVolumeReclaimPolicy: Retain
  5. 创建PersistentVolumeClaim

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
     name: gluster-pvc
    spec:
     accessModes:
       - ReadWriteMany
     resources:
       requests:
         storage: 10Gi
  6. 挂载到Pod

    apiVersion: v1
    kind: Pod
    metadata:
     name: app-pod
    spec:
     containers:
       - name: app
         image: nginx
         volumeMounts:
           - mountPath: /data
             name: gluster-storage
     volumes:
       - name: gluster-storage
         persistentVolumeClaim:
           claimName: gluster-pvc

验证:进入Pod写入文件,检查GlusterFS卷中是否持久化数据。

作者头像
silentfox33

在Kubernetes中配置GlusterFS作为PersistentVolume的步骤如下:

  1. 部署GlusterFS集群

    • 安装GlusterFS节点并创建存储卷(如gluster volume create vol01 replica 3 server1:/data server2:/data server3:/data
  2. 安装Heketi(可选)

    • 使用Heketi自动化存储管理,通过Kubernetes部署Heketi Service及API端点
  3. 创建StorageClass(动态供给)

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
     name: glusterfs-sc
    provisioner: kubernetes.io/glusterfs
    parameters:
     resturl: "http://heketi-service.default:8080"
     restauthenabled: "false"
  4. 手动创建PV/PVC(静态供给)

    apiVersion: v1
    kind: PersistentVolume
    metadata:
     name: gluster-pv
    spec:
     capacity:
       storage: 10Gi
     accessModes:
       - ReadWriteMany
     glusterfs:
       endpoints: "glusterfs-cluster"
       path: "vol01"
       readOnly: false
  5. 创建PVC绑定

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
     name: gluster-pvc
    spec:
     storageClassName: ""
     accessModes:
       - ReadWriteMany
     resources:
       requests:
         storage: 10Gi
  6. Pod挂载使用

    spec:
     containers:
       - volumeMounts:
         - mountPath: "/data"
           name: gluster-storage
     volumes:
       - name: gluster-storage
         persistentVolumeClaim:
           claimName: gluster-pvc

注意

  • 需提前创建glusterfs端点(Endpoints)指向集群节点
  • 多节点访问建议使用ReadWriteMany模式
  • Heketi提供REST API实现动态存储分配
  • 生产环境应配置TLS认证及资源配额
作者头像
starqian99

在Kubernetes中配置GlusterFS作为PersistentVolume,需遵循以下步骤:

  1. 前提条件

    • 已部署GlusterFS集群并创建Volume
    • 所有K8s节点安装glusterfs-client
  2. 创建Endpoints/Service

    apiVersion: v1
    kind: Endpoints
    metadata:
    name: glusterfs-cluster
    subsets:
    - addresses:
      - ip: 192.168.1.100
    ports:
      - port: 49152
        name: glusterfs
    ---
    apiVersion: v1
    kind: Service
    metadata:
    name: glusterfs-cluster
    spec:
    ports:
    - port: 49152
  3. 定义PersistentVolume

    apiVersion: v1
    kind: PersistentVolume
    metadata:
    name: gluster-pv
    spec:
    capacity:
    storage: 10Gi
    accessModes:
    - ReadWriteMany
    glusterfs:
    endpoints: glusterfs-cluster
    path: my_volume
    readOnly: false
    persistentVolumeReclaimPolicy: Retain
  4. 创建PersistentVolumeClaim

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: gluster-pvc
    spec:
    accessModes:
    - ReadWriteMany
    resources:
    requests:
      storage: 10Gi
  5. Pod挂载使用

    apiVersion: v1
    kind: Pod
    metadata:
    name: app-pod
    spec:
    containers:
    - name: app
      image: nginx
      volumeMounts:
        - mountPath: /data
          name: gluster-volume
    volumes:
    - name: gluster-volume
      persistentVolumeClaim:
        claimName: gluster-pvc

注意事项

  • 确保网络互通,防火墙开放所需端口
  • 生产环境建议使用StorageClass动态供给
  • 多副本场景建议启用heketi进行集群管理
  • 访问模式需与GlusterFS Volume配置匹配