Postgres, работающий в kubernetes, теряет данные при воссоздании пода или перезагрузке кластера.

У меня есть контейнер postgres, работающий в Pod на GKE, и PersistentVolume, настроенный для хранения данных. Однако все данные в базе данных теряются при перезагрузке кластера или при удалении Pod.

Если я запущу kubectl delete <postgres_pod>, чтобы удалить существующий Pod, и проверю вновь созданный (kubernetes) Pod, чтобы заменить удаленный, в соответствующей базе данных не будет данных, которые были до удаления Pod.

Вот файлы yaml, которые я использовал для развертывания postgres.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: custom-storage
parameters:
  type: pd-standard
provisioner: kubernetes.io/gce-pd
reclaimPolicy: Retain
volumeBindingMode: Immediate
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: postgres-volume-claim
spec:
  storageClassName: custom-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

развертывание.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - name: postgres
        image: postgres:11.5
        resources: {}
        ports:
        - containerPort: 5432
        env:
          - name: POSTGRES_DB
            value: "dbname"
          - name: POSTGRES_USER
            value: "user"
          - name: POSTGRES_PASSWORD
            value: "password"
        volumeMounts:
          - mountPath: /var/lib/postgresql/
            name: postgresdb
      volumes:
        - name: postgresdb
          persistentVolumeClaim:
            claimName: postgres-volume-claim

Я дважды проверил, что persistentVolumeReclaimPolicy имеет значение Retain.

Что мне не хватает?


person rasthiya    schedule 23.09.2019    source источник


Ответы (1)


Кластер создает новый том каждый раз, когда вы удаляете модуль? Свяжитесь с kubectl get pv.

Это многозонный кластер? Ваш класс хранилища не предоставляет региональные диски, поэтому вы можете получить новый диск, когда модуль перемещается из одной зоны в другую.

Возможно, это связано с вашей проблемой. Справочник по контейнеру postgres рекомендует монтировать в /var/lib/postgresql/data/pgdata и устанавливать переменную env PGDATA: https://hub.docker.com/_/postgres#pgdata

person erk    schedule 23.09.2019
comment
Спасибо за ваш ответ. Это было связано с путем монтирования и переменной env PGDATA. Это сообщение github показывает правильные значения для PGDATA и монтирования дорожка. - person rasthiya; 24.09.2019