Postgresql Postgres/K8S:PANIC找不到有效的检查点记录/CrashLoopBackOff
Postgres无法开始给出错误: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
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