我正在Ubuntu的Kubernetes集群中使用GlusterFS卷插件。使用Deamon Set安装了GlusterFS。
我的名字是“如何装入数据?是pvc还是pv在每个kubernetes worker上复制,还是在topology.json中为群集中共享的每个worker节点配置的磁盘上复制?我读了文件,但不清楚。
GlusterFS如何工作?
答案 0 :(得分:1)
这里是官方的GlusteFS for Kubernetes存储库的link。这种方法使用了两个主要组件:GlusterFS本身和Heketi。
GlusterFS 是可扩展的分布式文件系统,它将来自多个服务器的磁盘存储资源聚合到单个全局名称空间中。 GlusterFS中的卷由称为砖的块组成。砖根据卷的类型位于不同的服务器上,有几种类型的卷,有关它们的更多信息,您可以访问this link。
Heketi 提供了一个界面,可用于管理GlusterFS卷的生命周期。在Kubernetes中使用Heketi来动态配置GlusterFS卷。
在存储库的示例中,使用了3个GlusterFS节点,每个节点都有块设备。 topology.json
文件中有关Heketi的所有内容:
{
"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的服务器,但是最小节点数是3。
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卷
2. Kubernetes将创建一个PersistentVolume,配置为使用GlusterFS Volume
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部署,Pods等中使用PersistentVolumeClaim。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上浏览此示例。