【问题标题】:How the GlusterFS exactly working in Kubernetes cluster?GlusterFS 如何在 Kubernetes 集群中准确运行?
【发布时间】:2018-07-25 21:48:06
【问题描述】:

我在使用 DaemonSet 安装 GlusterFS 的 Ubuntu 上的 Kubernetes 集群中使用 GlusterFS 卷插件。

我的数据是怎么挂载的? PVC 或 PV 是否复制到每个 kubernetes worker 或在 topology.json 中为集群中可共享的每个 worker 节点配置的磁盘上?我阅读了文档,但没有弄清楚。

GlusterFS 是如何工作的?

【问题讨论】:

    标签: kubernetes glusterfs


    【解决方案1】:

    这是官方 GlusteFS for Kubernetes 存储库的link。此方法中使用了两个主要组件:GlusterFS 本身和 Heketi。

    GlusterFS 是一个可扩展的分布式文件系统,它将来自多个服务器的磁盘存储资源聚合到一个全局命名空间中。 GlusterFS 中的卷由称为 Bricks 的块组成。砖块根据卷的类型位于不同的服务器上,卷有多种类型,有关它们的更多信息,您可以访问this link

    Heketi 提供了一个接口,可用于管理 GlusterFS 卷的生命周期。 Heketi 在 Kubernetes 中用于动态配置 GlusterFS 卷。

    在存储库的示例中,使用了 3 个用于 GlusterFS 的节点,每个节点都有块设备。 topology.json Heketi 文件中提到的所有内容:

    {
      "clusters": [
        {
          "nodes": [
            {
              "node": {
                "hostnames": {
                  "manage": [
                    "node0"
                  ],
                  "storage": [
                    "192.168.10.100"
                  ]
                },
                "zone": 1
              },
              "devices": [
                "/dev/vdb",
                "/dev/vdc",
                "/dev/vdd"
              ]
            },
            {
              "node": {
                "hostnames": {
                  "manage": [
                    "node1"
                  ],
                  "storage": [
                    "192.168.10.101"
                  ]
                },
                "zone": 1
              },
              "devices": [
                "/dev/vdb",
                "/dev/vdc",
                "/dev/vdd"
              ]
            },
            {
              "node": {
                "hostnames": {
                  "manage": [
                    "node2"
                  ],
                  "storage": [
                    "192.168.10.102"
                  ]
                },
                "zone": 1
              },
              "devices": [
                "/dev/vdb",
                "/dev/vdc",
                "/dev/vdd"
              ]
            }
          ]
        }
      ]
    }
    

    这些节点也是 Kubernetes 节点,您可以将所有 Kubernetes 节点用作 GlusterFS 的服务器,但节点的最小数量是三个。

    Heketi 将格式化topology.json 文件中发布的块设备并将它们包含到 GlusterFS 集群中。

    之后,您需要创建一个 Kuberntes StorageClass 来动态提供 GlusterFS 卷。 Kubernetes 的 Yaml 文件示例:

    apiVersion: storage.k8s.io/v1beta1
    kind: StorageClass
    metadata:
      name: gluster-heketi
    provisioner: kubernetes.io/glusterfs
    parameters: #Here are the setting for access to Heketi RESTapi
      resturl: "http://10.42.0.0:8080" 
      restuser: "joe" 
      restuserkey: "My Secret Life"  
    

    现在您可以创建一个带有对 StorageClass 的请求的 PersistentVolumeClaim。此操作将触发三个进程:
    1. Kubernetes 将使用 Heketi 创建一个 GlusterFS 卷
    2. Kubernetes 将创建一个配置为使用 GlusterFS 卷的 PersistentVolume
    3. Kubernetes 会将 PersistentVolume 分配给 PersistentVolumeClaim

    示例如下:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
     name: gluster1
     annotations:
       volume.beta.kubernetes.io/storage-class: gluster-heketi 
    spec:
     accessModes:
      - ReadWriteOnce
     resources:
       requests:
         storage: 5Gi
    

    之后,您可以在 Kubernetes Deployments、Pods 等中使用 PersistentVolumeClaim。Pod 配置示例:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-pod1
      labels:
        name: nginx-pod1
    spec:
      containers:
      - name: nginx-pod1
        image: gcr.io/google_containers/nginx-slim:0.8
        ports:
        - name: web
          containerPort: 80
        volumeMounts:
        - name: gluster-vol1
          mountPath: /usr/share/nginx/html
      volumes:
      - name: gluster-vol1
        persistentVolumeClaim:
          claimName: gluster1 <1>
    

    有关更多信息,您可以在link 上查看此示例。

    【讨论】:

    • 非常感谢 Artem Golenyaev。现在我知道了 glusterFS 是如何工作的。
    • apiVersion: storage.k8s.io/v1beta1 kind: StorageClass metadata: name: mongo-storage2 provisioner: kubernetes.io/glusterfs parameters: resturl: "http://10.46.0.0:8080" 并直接在 StatefulSet (with replicas 3) VloumeClaimTemplate 部分中使用这个 SC 名称。我没有创建任何 pvcs。每当 Headless servcie 启动时,它会自动创建 3pvc 和 3pv s。我认为它创建了分布式 GlusterFS 卷类型,因为我没有提到任何存储类型。
    • 云你帮我看看我的程序发生了什么?是否需要创建 pvc?如果我想在我的 storageclass 文件中提及 Replicated Glusterfs Volume 类型?
    • 您能否在原始问题中添加配置,在 cmets 中很难理解它们。最好尽可能多地添加,不仅是 StorageClass,还有 StatefulSet
    猜你喜欢
    • 2020-05-24
    • 1970-01-01
    • 2016-12-23
    • 2020-05-22
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多