#postgresql #kubernetes #glusterfs
Вопрос:
Я развертываю postgres
базу данных на k8s
томе и glusterfs
в качестве тома.Но каждый раз, когда я перезапускаю свой модуль, все данные теряются.Это почему?
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-deployment
namespace: gitlab
labels:
app: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:13.1
ports:
- containerPort: 5432
volumeMounts:
- mountPath: /var/lib/postgresql
name: postgres
env:
- name: POSTGRES_USERNAME
valueFrom:
secretKeyRef:
name: gitlab
key: postgres_username
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: gitlab
key: postgres_password
- name: POSTGRES_DB
valueFrom:
secretKeyRef:
name: gitlab
key: postgres_db
volumes:
- name: postgres
glusterfs:
endpoints: glusterfs-cluster
path: gv
Комментарии:
1. Это действительно звучит правильно … Вы проверили, что содержимое /var/lib/postgresql действительно содержит вашу базу данных? Что ваш том действительно смонтирован в нужном месте? Можете ли вы попытаться подключить этот том с другого клиента, пока ваше развертывание масштабируется до 0 реплик, проверьте наличие его данных? Хотя это должно сработать, есть ли причина не использовать PersistentVolumeClaim?
Ответ №1:
Определите объекты ПВХ и PV. см.Ниже для справки.
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: postgres-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10GB
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app: postgres
name: postgres-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10GB
Затем привяжите ПВХ к капсуле, как показано ниже
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: postgres
spec:
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
...
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgres-pv-claim
volumes:
- name: postgres-pv-claim
persistentVolumeClaim:
claimName: postgres-pv-claim
Комментарии:
1. ПВХ требует динамической подготовки, а в случае GFS: heketi. Ничто в первоначальном посте не позволило бы нам поверить, что такое было настроено. Кроме того, конфигурация, упомянутая в первоначальном сообщении, строго соответствует документированным примерам Kubernetes: github.com/kubernetes/examples/tree/master/volumes/… . Кроме того, в вашем примере упоминается путь к хосту, что не является тем, что было запрошено в первую очередь, а также не будет работать с кластерами с включенными политиками безопасности — потребуется предоставить дополнительные привилегии учетной записи службы, на которой запущен ваш модуль Postgres.
2. это просто ссылка на то, как создавать pv и пвх, а затем привязывать пвх к определению pod при развертывании. Вам нужно сохранить эти файлы в соответствии с вашей средой.
Ответ №2:
- В соответствии с документацией Kubernetes https://kubernetes.io/docs/concepts/storage/volumes/#glusterfs, В отличие от emptyDir, который стирается при удалении модуля, содержимое тома glusterfs сохраняется, и том просто размонтируется. Я предлагаю поднять вопрос по ссылке https://github.com/kubernetes/kubernetes/issues/new/choose
- Если вы хотите установить GitLab с бэкэндом PostgresSQL, его будет проще использовать ниже диаграмм управления.
https://docs.gitlab.com/charts/
Ответ №3:
Вы можете это сделать:
1.Для служб с отслеживанием состояния, таких как базы данных, для развертывания следует использовать контроллеры набора состояний;
2.Ресурсы данных хранилища должны быть общего типа, а не использовать в качестве хранилища локальные тома, которые могут быть запланированы для других узлов при создании объектов POD;