首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加新的glusterfs StorageClass到Kubernetes?

添加新的glusterfs StorageClass到Kubernetes?
EN

Stack Overflow用户
提问于 2017-12-21 06:46:28
回答 2查看 1.9K关注 0票数 0

我按照这两个指南的组合在两个VirtualBox虚拟机上设置了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相关的资源。

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

代码语言:javascript
复制
# storage-class.yml
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
  name: gluster-container
provisioner: kubernetes.io/glusterfs
parameters:
  resturl: "10.10.10.5"

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

代码语言:javascript
复制
ProvisioningFailed - Failed to provision volume with StorageClass "gluster-container": create volume error: error creating volume Post 10.10.10.5/volumes: unsupported protocol scheme ""

有没有人知道该怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-22 21:07:10

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

代码语言:javascript
复制
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管理接口端点是kubernetes StorageClass中的resturl的值。

正如@Vishal Biyani评论的那样,http://blog.infracloud.io/gluster-heketi-kubernetes/是一篇关于如何在GCP上快速开始使用Heketi并将其连接到kubernetes的文章。

如果您的环境中不需要GlusterFS卷的动态预配置,您可以使用NFS并指向GlusterFS前面的负载均衡器。您仍然可以在GlusterFS复制和分发方面大放异彩,但这需要您启用NFS gluster服务并手动创建您想要向kubernetes公开的每个gluster卷。

票数 1
EN

Stack Overflow用户

发布于 2017-12-22 21:20:53

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

代码语言:javascript
复制
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,该版本会错过许多现代版本的优化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47915443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档