我是Kubernetes领域的新手,我试图弄清楚如何将StatefulSet中定义的volumeClaim或volumeClaimTemplates链接到特定的PersistentVolume。
我已经按照一些教程来理解和设置本地PersistentVolume。如果以Elasticsearch为例,当StatefulSet启动时,PersistantVolumeClaim将绑定到PersistantVolume。
就像您知道的那样,对于本地PersistentVolume,我们必须定义存储目标的本地路径。
对于Elasticsearch,我已经定义了
local:
path: /mnt/kube_data/elasticsearch
但是在一个实际的项目中,存在多个持久性卷。因此,我在路径/ mnt / kube_data中将有多个文件夹。 Kubernetes如何为持久卷声明选择正确的持久卷?
我不希望Kubernetes将数据库数据放入为其他服务创建的持久卷中。
这是Elasticsearch的配置:
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: elasticsearch-sts
spec:
serviceName: elasticsearch
replicas: 1
[...]
containers:
- name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:6.4.2
volumeMounts:
- name: elasticsearch-data
mountPath: /usr/share/elasticsearch/data
volumeClaimTemplates:
- metadata:
name: elasticsearch-data
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: local-storage
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-elasticsearch
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /mnt/elasticsearch
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/master
operator: Exists
---
答案 0 :(得分:1)
您需要在持久卷定义中的ClaimRef,其具有要将PV绑定到的PVC名称。另外,PV中的ClaimRef应该具有PVC所在的名称空间名称,因为PV与PVC无关,而PV则独立于名称空间。因此,相同名称的PVC可以存在于两个不同的名称空间中,因此即使PVC位于默认名称空间中,也必须提供名称空间以及PVC名称。
对于本地存储的PV,PVC和statefulset yaml文件,您可以参考以下答案。
Is it possible to mount different pods to the same portion of a local persistent volume?
希望这会有所帮助。