docker - 在 kubernetes 上运行的 Postgres 在 Pod 重建或集群重启时丢失数据

标签 docker kubernetes google-kubernetes-engine persistent-storage

我有 postgres 容器在 Pod 中运行在 GKEPersistentVolume 上设置存储数据。但是,如果集群重新启动或 Pod 出现,数据库中的所有数据都会丢失。被删除。

如果我运行 kubectl delete <postgres_pod>删除现有的 Pod并检查新创建的(由 kubernetes)Pod要替换已删除的数据库,相应的数据库没有 Pod 之前的数据被删除。

这是我用来部署 postgresyaml 文件。

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具有值(value) Retain .

我错过了什么?

最佳答案

集群是否在您每次删除 pod 时创建一个新卷?使用 kubectl get pv 检查。

这是一个多区域集群吗?您的存储类不是配置区域磁盘,因此当 pod 从一个区域移动到另一个区域时,您可能会获得一个新磁盘。

可能与您的问题有关,postgres 容器引用建议安装在 /var/lib/postgresql/data/pgdata 并设置 PGDATA env 变量: https://hub.docker.com/_/postgres#pgdata

关于docker - 在 kubernetes 上运行的 Postgres 在 Pod 重建或集群重启时丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58069267/

相关文章:

docker - 构建docker镜像时可以绑定(bind)端口吗?

angular - 在Angular 6中将Kubernetes secret 用作环境变量

kubernetes - 在多个云上运行的单个Kubernetes集群

docker - 如何使用 Kubernetes 在云容器引擎中的容器启动时运行脚本

php - GKE/运行 php 应用程序/通过 nginx 或 apache 公开?

kubernetes - Kubernetes 集群中的一个 pod 崩溃,但其他 pod 没有崩溃

java - AllNodesFailedException : Could not reach any contact point

python - 如何在docker容器内使用python子进程执行mysql命令

node.js - 运行 `ng serve`后出现 `ng update @angular/cli @angular/core`错误,无法为Angular项目提供服务

Kubernetes - 处理无限数量的工作项