【问题标题】:Postgres already contains database in kubernetesPostgres 已经包含 kubernetes 中的数据库
【发布时间】:2022-01-30 05:05:33
【问题描述】:

我有一个安装了卷的 Postgres pod:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: postgres-pv
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 100M
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  labels:
    app: postgres
  name: psql-claim
spec:
  storageClassName: manual
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 100M

yaml 包含以下内容:

volumeMounts:
            - mountPath: /docker-entrypoint-initdb.d/
              name: psql-config-map-volume
            - mountPath: /var/lib/postgresql/data
              name: psql-claim 
              subPath: postgres
      volumes:
        - name: psql-config-map-volume
          configMap:
            name: psql-config-map // contains an init.sql
        - name: psql-claim
          persistentVolumeClaim:
            claimName: psql-claim

效果很好,部署/pod删除和重新部署后数据保留。

修改init.sql时出现问题。 没有生效,在 psql pod 启动时得到这个消息:

PostgreSQL 数据库目录似乎包含一个数据库;跳过初始化

pod 本身启动时没有任何错误(只是使用旧的 init.sql 数据)

我尝试过的:

  1. 删除部署、pvc 和 pv。然后重新部署一切。结果相同。
  2. 我搜索了主机路径数据,但 /mnt/data 为空。

我还应该尝试什么?如何强制 init.sql 启动?如果不在主机路径中,实际的旧数据存储在哪里?

编辑:我搜索了 pg 文件并找到了这个:
/var/lib/docker/overlay2/6ae2../merged/mnt/data/postgres/pg_ident.conf
/var/lib/docker/overlay2/6ae2../diff/mnt/data/postgres/pg_ident.conf
而且pvc和pv删除后依然存在。如何优雅地重置其数据?

【问题讨论】:

    标签: postgresql kubernetes


    【解决方案1】:

    我也遇到过类似的情况。原来我的initdb.sh 脚本中有错字。这会导致 PG 启动,无法应用脚本并崩溃。这会导致容器重新启动,并且下一次,PG 会跳过该脚本。

    我终于弄明白了,因为 pod 显示的是 restartCount: 1。运行kubectl logs postgres-0 --previous 为我提供了崩溃之前 的日志,这表明我的脚本中有错字(在我的情况下,LC_TYPE 而不是LC_CTYPE)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多