GlusterFS如何在Kubernetes集群中正常工作?

时间:2018-07-25 21:48:06

标签: kubernetes glusterfs

我正在Ubuntu的Kubernetes集群中使用GlusterFS卷插件。使用Deamon Set安装了GlusterFS。

我的名字是“如何装入数据?是pvc还是pv在每个kubernetes worker上复制,还是在topology.json中为群集中共享的每个worker节点配置的磁盘上复制?我读了文件,但不清楚。

GlusterFS如何工作?

1 个答案:

答案 0 :(得分:1)

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

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

Heketi 提供了一个界面,可用于管理GlusterFS卷的生命周期。在Kubernetes中使用Heketi来动态配置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的服务器,但是最小节点数是3。

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将创建一个PersistentVolume,配置为使用GlusterFS Volume
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部署,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上浏览此示例。