Postgresql Postgres/K8S:PANIC找不到有效的检查点记录/CrashLoopBackOff

Postgresql Postgres/K8S:PANIC找不到有效的检查点记录/CrashLoopBackOff,postgresql,kubernetes,Postgresql,Kubernetes,Postgres无法开始给出错误: PANIC could not locate a valid checkpoint record 在Google上,有很多解决方案,但是所有的解决方案都需要连接pod来执行一些pg命令 但是,当我使用K8S时,我的pod进入状态:CrashLoopBackOff,因此我无法再连接到我的pod 我该如何修复我的postgres DB 编辑: 我已尝试运行该命令: pg_resetwal /var/lib/postgresql/data 与: 但我得到: pg

Postgres无法开始给出错误:

PANIC could not locate a valid checkpoint record
在Google上,有很多解决方案,但是所有的解决方案都需要连接pod来执行一些pg命令

但是,当我使用K8S时,我的pod进入状态:
CrashLoopBackOff
,因此我无法再连接到我的pod

我该如何修复我的postgres DB

编辑:

我已尝试运行该命令:

pg_resetwal /var/lib/postgresql/data
与:

但我得到:

pg_resetwal: cannot be executed by "root"
You must run pg_resetwal as the PostgreSQL superuser.
可以更进一步

编辑2:

我试图运行一个新的pod,该pod连接了相同的卷和相同的postgres容器,但将命令更改为:
pg_resetwal/var/lib/postgresql/data

我还补充说:

securityContext:
              runAsUser: 0
以下是用于部署的yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    reloader.stakater.com/auto: "true"
  labels:
    app: metadata-postgres-fix
  name: metadata-postgres-fix
  namespace: metadata
spec:
  selector:
    matchLabels:
      app: metadata-postgres-fix
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: metadata-postgres-fix
    spec:
      containers:
      - args:
        - pg_resetwal
        - /var/lib/postgresql/data
        envFrom:
          - secretRef:
              name: metadata-env
        image: postgres:11.3
        name: metadata-postgres-fix
        securityContext:
          runAsUser: 0
        ports:
        - containerPort: 5432
        imagePullPolicy: Always
        volumeMounts:
        - mountPath: /etc/postgresql/postgresql.conf
          name: metadata-postgres-data
          subPath: postgres.conf
        - mountPath: /docker-entrypoint-initdb.d/init.sh
          name: metadata-postgres-data
          subPath: init.sh
        - mountPath: /var/lib/postgresql/data
          name: metadata-postgres-claim
          subPath: postgres
      restartPolicy: Always
      volumes:
      - name: metadata-postgres-data
        configMap:
          name: cfgmap-metadata-postgres
      - name: metadata-postgres-claim
        persistentVolumeClaim:
          claimName: metadata-postgres-claim
      nodeSelector:
        kops.k8s.io/instancegroup: nodes
我解决了这个问题

- args:
    - pg_resetwal
    - /var/lib/postgresql/data
暂停以获取postgres的UID:

- args:
    - sleep
    - 1000

我能找到posgres的UID是999


最后用
runAsUser:999

更改
runAsUser:0
,您是否已将其作为
StatefulSet
部署在kubernetes上?活动中还有其他内容吗?您可以使用以特定用户身份运行播客。@mario不,我没有使用
StatefulSet
,我已经使用了安全上下文。但是pg_resetwal/var/lib/postgresql/data没有任何作用。第二个问题没有,但是
runAsUser:0
不会像前面提到的
PostgreSQL超级用户
那样运行它,而是以root用户身份运行,并且您在错误消息中明确指出,它
不能由“root”
执行。另外,作为DB是有状态的应用程序,您应该考虑将其运行为<代码> STATEFLSET 而不是作为<代码>部署<代码>。您帮助了我!谢谢!我们的K8s节点突然崩溃,我也遇到了同样的错误。总结:我添加了
命令:[“sleep”]
参数:[“1000”]
。执行到pod中,然后
su postgres
。最后,运行
pg\u resetwal/var/lib/postgresql/data
- args:
    - sleep
    - 1000
cat /etc/passwd