Кубернетес: NFS с StatefulSets
Я пытаюсь использовать существующую NFS с StateFulSets.
Создание PresistentVolumeClaim
кажется автоматическим с помощью volumeClaimTemplates
,
Проблема:
Но, так как PresistentVolumeClaim
утверждает, что весь PresistentVolume
, Я должен создать PresistentVolume
вручную для всех реплик. Есть ли способ динамически подготовить постоянные тома NFS в Kubernetes?
Примечание. Сам NFS-сервер статичен, просто нужно динамически создавать тома в K8, а не сам NFS-сервер.
Я использую пример состояния Монго:
---
apiVersion: v1
kind: Service
metadata:
name: mongo
labels:
name: mongo
spec:
ports:
- port: 27017
targetPort: 27017
clusterIP: None
selector:
role: mongo
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: mongo
spec:
serviceName: "mongo"
replicas: 3
template:
metadata:
labels:
role: mongo
spec:
terminationGracePeriodSeconds: 10
containers:
- name: mongo
image: mongo
command:
- mongod
- "--replSet"
- rs0
- "--smallfiles"
- "--noprealloc"
ports:
- containerPort: 27017
volumeMounts:
- name: mongo-data
mountPath: /data/db
- name: mongo-sidecar
image: cvallance/mongo-k8s-sidecar
env:
- name: MONGO_SIDECAR_POD_LABELS
value: "role=mongo"
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
selector:
matchLabels:
type: nfs
Нужно 3 PresistentVolumeClaim
так что я должен создать 3 PV
для этого использовать. Может ли это быть динамически добавлено в NFS, как другие динамические провайдеры, такие как aws-ebs?
Это правильный способ получить StatefulSet с постоянным томом NFS.
2 ответа
Хорошей новостью является то, что да, Kubernetes теперь поддерживает динамическое создание постоянных томов, как описано в следующей публикации:
Плохая новость заключается в том, что эта функция, похоже, не поддерживает NFS... Что означает определенный смысл, учитывая, что каждый том необходимо создавать вручную даже без участия Kubernetes:-(
Сказав, что Google нашел следующую ссылку, которая предполагает, что может быть неофициальный способ динамического предоставления NFS.
Надеюсь, что эти ссылки помогут.
Это работа в процессе, к которой я вернулся только вчера (мое решение), но мой совет, если он подходит вашим целям (или кому-то, кто обнаружит это позже), это проверить GlusterFS и Heketi.
Информация приведена ниже, но TLDR гласит, что GlusterFS - это ваша NFS, а Heketi может автоматически предоставить остальное. Мое репозиторий github автоматизирует настройку... это уродливо... но оно работает для меня, и я сделаю его менее уродливым с тем, что знаю сейчас.
GlusterFS - бесплатная масштабируемая сетевая файловая система с открытым исходным кодом. https://github.com/gluster/glusterfs https://www.gluster.org/
Основанная на RESTful структура управления томами для GlusterFS https://github.com/heketi/heketi