向 Kubernetes 添加新的 glusterfs StorageClass?
Adding new glusterfs StorageClass to Kubernetes?
我结合使用以下两个指南在两个 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。
我开始创建存储 class 如下:
# 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 ""
有人知道如何从这里开始吗?
kubernetes 中的 GlusterFS 配置器想要动态配置 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 管理接口端点是你的 kubernetes resturl
中的值 StorageClass
.
正如@Vishal Biyani 评论的那样,http://blog.infracloud.io/gluster-heketi-kubernetes/ 是一篇关于如何在 GCP 上快速开始使用 Heketi 并将其连接到 kubernetes 的文章。
如果您的环境不需要动态配置 GlusterFS 卷,您可以使用 NFS StorageClass 并指向 GlusterFS 前面的负载平衡器。您仍然会获得 GlusterFS 复制和分发的强大功能,但它需要您启用 NFS gluster 服务并手动创建要公开给 kubernetes 的每个 gluster 卷。
我创建了一个脚本来管理 glusterFS 卷声明:
if [[ "$#" -le 3 ]]; then
echo "Usage:"
echo " [=10=] <operation> <namespace> <name> <size>"
echo " - operation: create | delete"
exit
fi
OPERATION=
NAMESPACE=
NAME=
SIZE=
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 挂载而无需自动配置。
确保 运行 kubelet 在 docker 之外,否则你将使用旧版本的 gluster.fuse,它错过了很多现代版本的优化。
我结合使用以下两个指南在两个 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。
我开始创建存储 class 如下:
# 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 ""
有人知道如何从这里开始吗?
kubernetes 中的 GlusterFS 配置器想要动态配置 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 管理接口端点是你的 kubernetes resturl
中的值 StorageClass
.
正如@Vishal Biyani 评论的那样,http://blog.infracloud.io/gluster-heketi-kubernetes/ 是一篇关于如何在 GCP 上快速开始使用 Heketi 并将其连接到 kubernetes 的文章。
如果您的环境不需要动态配置 GlusterFS 卷,您可以使用 NFS StorageClass 并指向 GlusterFS 前面的负载平衡器。您仍然会获得 GlusterFS 复制和分发的强大功能,但它需要您启用 NFS gluster 服务并手动创建要公开给 kubernetes 的每个 gluster 卷。
我创建了一个脚本来管理 glusterFS 卷声明:
if [[ "$#" -le 3 ]]; then
echo "Usage:"
echo " [=10=] <operation> <namespace> <name> <size>"
echo " - operation: create | delete"
exit
fi
OPERATION=
NAMESPACE=
NAME=
SIZE=
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 挂载而无需自动配置。
确保 运行 kubelet 在 docker 之外,否则你将使用旧版本的 gluster.fuse,它错过了很多现代版本的优化。