Я пытаюсь создать базу данных PostgreSQL в Google Kubernetes Engine с поддержкой PVC для поддержки хранимых баз данных. В настоящее время у меня есть такое определение:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgres
spec:
serviceName: "postgres"
selector:
matchLabels:
db: postgres
template:
metadata:
labels:
db: postgres
spec:
containers:
- name: postgres
image: postgres:12.1
ports:
- containerPort: 5432
volumeMounts:
- name: postgres-disk
mountPath: "/var/lib/postgresql"
env:
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
- name: PGUSER
value: postgres
- name: POSTGRES_DB
value: postgres
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
volumeClaimTemplates:
- metadata:
name: postgres-disk
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "standard"
resources:
requests:
storage: 1Gi
Он работает так, как ожидалось, но если я убью модуль, чтобы смоделировать сбой узла, вся база данных будет перезапущена с нуля, и все сохраненные данные будут потеряны.
Для того, что я обнаружил, проблема заключается в разрешениях на монтирование, добавление уровня папки делает трюк
volumeMounts:
- name: data-disk
mountPath: "/var/lib/postgresql/data"
env:
- name: PGDATA
value: "/var/lib/postgresql/data/pgdata"