是否可以将不同的Pod安装到本地持久卷的同一部分?

基本上,我要创建一个带有2个Pod(单个主机群集)的StatefulSet部署,我希望每个Pod都可以挂载到主机中的基本文件夹及其下面的子文件夹中:

基本文件夹安装:/ mnt / disks / ssd

Pod#1-/ mnt / disks / ssd / pod-1

Pod#2-/ mnt / disks / ssd / pod-2

我只设法将第一个Pod挂载到基本文件夹,但是第二个文件夹却无法挂载(因为该卷已被占用)

这是卷:

apiVersion: v1

kind: PersistentVolume

metadata:

name: example-local-pv

spec:

capacity:

storage: 5Gi

accessModes:

- ReadWriteOnce

persistentVolumeReclaimPolicy: Delete

storageClassName: local-storage

local:

path: /mnt/disks/ssd

nodeAffinity:

required:

nodeSelectorTerms:

- matchExpressions:

- key: kubernetes.io/hostname

operator: In

values:

- ubuntukuber

这是有状态集合中的用法:

apiVersion: apps/v1beta1

kind: StatefulSet

metadata:

name: app

namespace: test-ns

spec:

serviceName: app

replicas: 2

....

....

volumeMounts:

- name: data

mountPath: /var/lib/app/data

volumeClaimTemplates:

- metadata:

name: data

spec:

accessModes: [ "ReadWriteOnce" ]

storageClassName: "local-storage"

resources:

requests:

storage: 2Gi

因此,我基本上希望每个副本都将使用其自己的子文件夹-如何实现它?

我已经取得了一些进展,我可以使用以下YAML将多个副本装载到同一装载中(我尝试在其上运行的应用是rabbitmq-因此我将其名称保持不变)

---

kind: PersistentVolume

apiVersion: v1

metadata:

name: pv-local

namespace: test-rabbitmq

labels:

type: local

spec:

storageClassName: local

capacity:

storage: 6Gi

accessModes:

- ReadWriteOnce

hostPath:

path: "/mnt/disks"

---

kind: PersistentVolumeClaim

apiVersion: v1

metadata:

name: hostpath-pvc

namespace: test-rabbitmq

spec:

storageClassName: local

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 3Gi

selector:

matchLabels:

type: local

---

在StatefulSet中,我声明此卷:

  volumes:

- name: rabbitmq-data

persistentVolumeClaim:

claimName: hostpath-pvc

并挂载“ rabbitmq-data”。

两个Pod都安装到同一文件夹,但不会创建子文件夹-这不是一个糟糕的情况,因为默认情况下有Rabbitmq的子文件夹-

我将尝试将其扩展到每个Pod中以使用子文件夹

回答:

我能够实现上述情况,您需要在pv中使用“ claimRef”来绑定PVC。请看看下面的pv json和statefulset json

PV-0.json

{

"kind": "PersistentVolume",

"apiVersion": "v1",

"metadata": {

"name": "pv-data-vol-0",

"labels": {

"type": "local"

}

},

"spec": {

"capacity": {

"storage": "10Gi"

},

"accessModes": [

"ReadWriteOnce"

],

"storageClassName": "local-storage",

"local": {

"path": "/prafull/data/pv-0"

},

"claimRef": {

"namespace": "default",

"name": "data-test-sf-0"

},

"nodeAffinity": {

"required": {

"nodeSelectorTerms": [

{

"matchExpressions": [

{

"key": "kubernetes.io/hostname",

"operator": "In",

"values": [

"ip-10-0-1-46.ec2.internal"

]

}

]

}

]

}

}

}

}

PV-1.json

{

"kind": "PersistentVolume",

"apiVersion": "v1",

"metadata": {

"name": "pv-data-vol-1",

"labels": {

"type": "local"

}

},

"spec": {

"capacity": {

"storage": "10Gi"

},

"accessModes": [

"ReadWriteOnce"

],

"storageClassName": "local-storage",

"local": {

"path": "/prafull/data/pv-1"

},

"claimRef": {

"namespace": "default",

"name": "data-test-sf-1"

},

"nodeAffinity": {

"required": {

"nodeSelectorTerms": [

{

"matchExpressions": [

{

"key": "kubernetes.io/hostname",

"operator": "In",

"values": [

"ip-10-0-1-46.ec2.internal"

]

}

]

}

]

}

}

}

}

Statefulset.json

{

"kind": "StatefulSet",

"apiVersion": "apps/v1beta1",

"metadata": {

"name": "test-sf",

"labels": {

"state": "test-sf"

}

},

"spec": {

"replicas": 2,

"template": {

"metadata": {

"labels": {

"app": "test-sf"

},

"annotations": {

"pod.alpha.kubernetes.io/initialized": "true"

}

}

...

...

},

"volumeClaimTemplates": [

{

"metadata": {

"name": "data"

},

"spec": {

"accessModes": [

"ReadWriteOnce"

],

"storageClassName": "local-storage",

"resources": {

"requests": {

"storage": "10Gi"

}

}

}

}

]

}

}

将创建两个Pod,分别创建test-sf-0和test-sf-1,依次创建两个PVC数据-test-sf-0和data-test-

sf-1,它们将绑定到PV-0和Pv-1。因此,test-sf-0将写入PV-0中指定的位置,而test-

sf-1将写入PV-1中指定的位置。希望这可以帮助。

以上是 是否可以将不同的Pod安装到本地持久卷的同一部分? 的全部内容, 来源链接: utcz.com/qa/397772.html

回到顶部