GlusterFS 在 Kubernetes 集群中究竟是如何工作的?
How the GlusterFS exactly working in Kubernetes cluster?
我在使用 DaemonSet Ubuntu 安装的 GlusterFS 上的 Kubernetes 集群中使用 GlusterFS 卷插件。
我不知道数据是怎么挂载的? PVC 或 PV 是否复制到每个 kubernetes worker 或在 topology.json 中为每个 worker 节点配置的磁盘是否可在集群中共享?看了文档,没搞清楚
GlusterFS 是如何工作的?
这是官方 GlusteFS for Kubernetes 存储库的 link。这种方法使用了两个主要组件:GlusterFS 本身和 Heketi。
GlusterFS 是一个可扩展的分布式文件系统,它将来自多个服务器的磁盘存储资源聚合到一个全局命名空间中。 GlusterFS 中的卷由称为 Brick 的块组成。根据 Volume 的类型,Brick 位于不同的服务器上,有多种类型的 Volume,有关它们的更多信息,您可以访问 this link.
Heketi 提供了一个接口,可用于管理 GlusterFS 卷的生命周期。 Heketi 在 Kubernetes 中用于动态配置 GlusterFS 卷。
在存储库的示例中,使用了 3 个 GlusterFS 节点,每个节点都有块设备。 Heketi 的 topology.json
文件中提到的所有内容:
{
"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 的服务器,但节点的最小数量是三个。
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 Volume
2. Kubernetes 将创建一个配置为使用 GlusterFS Volume
的 PersistentVolume
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 Deployments中使用PersistentVolumeClaim,Pods等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.
上查看此示例
我在使用 DaemonSet Ubuntu 安装的 GlusterFS 上的 Kubernetes 集群中使用 GlusterFS 卷插件。
我不知道数据是怎么挂载的? PVC 或 PV 是否复制到每个 kubernetes worker 或在 topology.json 中为每个 worker 节点配置的磁盘是否可在集群中共享?看了文档,没搞清楚
GlusterFS 是如何工作的?
这是官方 GlusteFS for Kubernetes 存储库的 link。这种方法使用了两个主要组件:GlusterFS 本身和 Heketi。
GlusterFS 是一个可扩展的分布式文件系统,它将来自多个服务器的磁盘存储资源聚合到一个全局命名空间中。 GlusterFS 中的卷由称为 Brick 的块组成。根据 Volume 的类型,Brick 位于不同的服务器上,有多种类型的 Volume,有关它们的更多信息,您可以访问 this link.
Heketi 提供了一个接口,可用于管理 GlusterFS 卷的生命周期。 Heketi 在 Kubernetes 中用于动态配置 GlusterFS 卷。
在存储库的示例中,使用了 3 个 GlusterFS 节点,每个节点都有块设备。 Heketi 的 topology.json
文件中提到的所有内容:
{
"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 的服务器,但节点的最小数量是三个。
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 Volume
2. Kubernetes 将创建一个配置为使用 GlusterFS Volume
的 PersistentVolume
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 Deployments中使用PersistentVolumeClaim,Pods等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.
上查看此示例