Kubernetes, как связать PersistentVolume с Volume

Я новичок в мире Kubernetes и пытаюсь понять, как volumeClaim или volumeClaimTemplates, определенные в StatefulSet, могут быть связаны с конкретным 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
---

person Waldo    schedule 07.11.2018    source источник


Ответы (1)


Требуется ClaimRef в определении постоянного тома с именем PVC, к которому вы хотите привязать свой PV. Кроме того, ClaimRef в PV должен иметь имя пространства имен, в котором находится PVC, поскольку PV не зависят от пространства имен, а PVC - нет. Таким образом, PVC с одним и тем же именем может существовать в двух разных пространствах имен, поэтому обязательно предоставить пространство имен вместе с именем PVC, даже если PVC находится в пространстве имен по умолчанию.

Вы можете сослаться на следующий ответ для файлов yaml PV, PVC и statefulset для локального хранилища.

Можно ли подключить разные модули к одной и той же части локального постоянного тома?

Надеюсь это поможет.

person Prafull Ladha    schedule 07.11.2018
comment
Я пытаюсь использовать ClaimRef, но kubenetes не привязал PersistantVolume к volumeClaimTemplates. - person Waldo; 08.11.2018
comment
Не могли бы вы поделиться своими PV yaml и volumeClaimTemplates, определенными в наборах состояний? - person Prafull Ladha; 08.11.2018