什么是Heketi和GlusterFS

Heketi是一个与GlusterFS集成的管理工具,它提供了一种简化和自动化GlusterFS卷创建、扩展和管理的方式。GlusterFS是一个开源的分布式文件系统,它可以将多个存储服务器组合在一起,形成一个高可用、高容量的存储解决方案。使用Heketi可以方便地为Kubernetes集群提供持久化存储。

安装和配置Heketi

1. 首先,安装Heketi和GlusterFS二进制文件并创建所需的存储网络、存储节点和存储卷等资源。

yum install heketi heketi-client glusterfs glusterfs-client

2. 接下来,创建一个Heketi配置文件并配置访问控制和存储后端。

{
  "_port_comment": "Heketi Server的监听端口",
  "port": "8080",
  "_use_auth": "这里可以配置使用的认证方式,比如通过JWT进行认证",
  "use_auth": false,
  "_jwt": "如果使用JWT认证,可以配置相应的密钥",
  "jwt": {
    "admin": {
      "secret": "xxxxxxxxxxxxx"
    },
    "user": {
      "secret": "yyyyyyyyyyyyy"
    }
  },

  "_glusterfs_comment": "GlusterFS部署的配置信息",
  "glusterfs": {
    "_config_comment": "GlusterFS存储服务器配置列表",
    "storage": [
      {
        "type": "device",
        "device": "/dev/sdb"
      },
      {
        "type": "device",
        "device": "/dev/sdc"
      },
      {
        "type": "device",
        "device": "/dev/sdd"
      }
    ],
    "_executor_comment": "Heketi如何管理GlusterFS卷的执行器",
    "executor": "kubernetes",
    "_db_comment": "内部数据存储/数据库配置",
    "db": "heketi.db"
  }
}

3. 启动Heketi服务并验证是否正常工作。
heketi --config= 

在Kubernetes中使用Heketi提供的持久化存储

1. 在Kubernetes中创建一个GlusterFS存储类。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: glusterfs
provisioner: kubernetes.io/glusterfs
parameters:
  resturl: "http://:8080"
  restuser: ""
  restuserkey: ""
  volumetype: "replica 2"
  options: "backup-volfile-servers=-"

2. 创建一个持久卷声明(PVC),并引用上一步创建的存储类。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: glusterfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: glusterfs
  resources:
    requests:
      storage: 1Gi

3. 创建一个使用持久卷声明的Pod,并将GlusterFS卷挂载到容器中。
apiVersion: v1
kind: Pod
metadata:
  name: glusterfs-pod
spec:
  containers:
    - name: nginx
      image: nginx
      volumeMounts:
        - name: glusterfs-vol
          mountPath: /var/www/html
  volumes:
    - name: glusterfs-vol
      persistentVolumeClaim:
        claimName: glusterfs-pvc

4. 验证GlusterFS卷是否成功挂载到容器中。
kubectl exec -it glusterfs-pod -- ls /var/www/html