代码之家  ›  专栏  ›  技术社区  ›  IAspireToBeGladOS

向Kubernetes添加新的glusterfs StorageClass?

  •  0
  • IAspireToBeGladOS  · 技术社区  · 7 年前

    我在两个VirtualBox VM上设置GlusterFS存储,遵循以下两个指南:

    https://wiki.centos.org/HowTos/GlusterFSonCentOS

    http://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/

    内部网络具有DHCP分配的IP 10.10.10.4和10.10.10.5。我已验证存储是否正常工作,并符合预期。

    此时,我正试图使用YAML文件向Kubernetes添加一个新的StorageClass,我能找到的关于这个主题的唯一资源是与OpenShift或Heketi GlusterFS相关的。

    我开始创建存储类,如下所示:

    # storage-class.yml
    apiVersion: storage.k8s.io/v1beta1
    kind: StorageClass
    metadata:
      name: gluster-container
    provisioner: kubernetes.io/glusterfs
    parameters:
      resturl: "10.10.10.5"
    

    我假设这是不完整的,但无法找到有关如何配置的更多信息。当我尝试使用它进行测试时,会出现以下错误:

    ProvisioningFailed - Failed to provision volume with StorageClass "gluster-container": create volume error: error creating volume Post 10.10.10.5/volumes: unsupported protocol scheme ""
    

    有人知道如何从这里开始吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   AWippler    7 年前

    kubernetes中的GlusterFS provisioner希望动态调配GlusterFS卷,如下所示:

    gluster volume create glustervol1 replica 2 transport tcp 
    gluster1.example.com:/bricks/brick1/brick \ 
    gluster2.example.com:/bricks/brick1/brick.
    

    GlusterFS本身没有API端点来触发创建这些卷的命令;然而,社区已经发展 Heketi 成为GlusterFS的API端点。Heketi的RESTful管理接口端点是 resturl 在你的kubernetes StorageClass .

    正如@Vishal Biyani评论的那样, http://blog.infracloud.io/gluster-heketi-kubernetes/ 是一篇关于如何在GCP上快速开始与Heketi合作并将其与kubernetes联系起来的文章。

    如果您的环境中不需要动态调配GlusterFS卷,您可以使用NFS StorageClass并指向GlusterFS前面的负载平衡器。您仍然可以获得令人惊叹的GlusterFS复制和分发,但这需要您启用NFS gluster服务并手动创建要向kubernetes公开的每个gluster卷。

        2
  •  0
  •   Milo van der Zee    7 年前

    我创建了一个脚本来管理glusterFS卷声明:

    if [[ "$#" -le 3 ]]; then
      echo "Usage:"
      echo "   $0 <operation> <namespace> <name> <size>"
      echo "   - operation: create | delete"
      exit
    fi
    
    OPERATION=$1
    NAMESPACE=$2
    NAME=$3
    SIZE=$4
    
    function create {
      gluster volume create $NAMESPACE-$NAME replica 3  server1:/mnt/gluster-storage/brick-$NAMESPACE-$NAME server2:/mnt/gluster-storage/brick-$NAMESPACE-$NAME server3:/mnt/gluster-storage/brick-$NAMESPACE-$NAME  
      gluster volume start $NAMESPACE-$NAME
    
      kubectl -n $NAMESPACE apply -f /etc/kubernetes/glusterfs-endpoints.yml
      kubectl -n $NAMESPACE apply -f /etc/kubernetes/glusterfs-service.yml
    
      cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: $NAME
      namespace: $NAMESPACE
    spec:
      capacity:
        storage: $SIZE
      accessModes:
        - ReadWriteMany
      glusterfs:
        endpoints: glusterfs-cluster
        path: $NAMESPACE-$NAME
        readOnly: false
      persistentVolumeReclaimPolicy: Retain
      claimRef:
        namespace: $NAMESPACE
        name: $NAME
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: $NAME
      namespace: $NAMESPACE
    spec:
      accessModes:
      - ReadWriteMany
      resources:
         requests:
           storage: $SIZE
    EOF
    }
    
    function delete {
      kubectl -n $NAMESPACE delete pvc $NAME
      kubectl delete pv $NAME
    
      yes | gluster volume stop $NAMESPACE-$NAME
      echo
      yes | gluster volume delete $NAMESPACE-$NAME
      echo
      echo "#################################################################"
      echo "REMOVE BRICKS MANUALLY:"
      echo "  server1:/mnt/gluster-storage/brick-$NAMESPACE-$NAME"
      echo "  server2:/mnt/gluster-storage/brick-$NAMESPACE-$NAME"
      echo "  server3:/mnt/gluster-storage/brick-$NAMESPACE-$NAME"
      echo "#################################################################"
    }
    
    case $OPERATION in
      create)
        create
        ;;
      delete)
        delete
        ;;
    esac
    

    这将创建gluster卷并将其映射到Kubernetes中的卷声明。因此,您可以使用glusterfs装载,而无需进行自动资源调配。

    确保在docker外运行kubelet,否则您将使用旧版本的gluster。fuse错过了现代版本的许多优化。