kubernetes集群:postgresql挂掉后启动失败:ERROR: tuple already updated by self
ERROR: tuple already updated by self
早上git访问出现503。经过排查是数据库挂了。
postgresql挂掉了:
postgresql 提供给git作为数据库。使用k8s集群方式部署(部署方式:https://www.cnblogs.com/zoujiaojiao/p/12552233.html)
想通过停止挂掉的pod,然后再启动的方式恢复:
停止pod
kubectl delete -f gitlab-postgresql.yaml
启动pod
kubectl create -f gitlab-postgresql.yaml
该方式启动postgresql失败,查看postgresql容器的日志:
容器失败的最终错误提示:ERROR: tuple already updated by self
拿着“ERROR: tuple already updated by self”百度了一波,只查到:
分析为什么“更新过”
本分析全靠自己猜测。我们使用的是阿里云的postgresql镜像sameersbn/postgresql:9.6-2。镜像中可能有初始化脚本。而我们的postgresql已经启动过,初始化过。初始化的数据应该是存在的,挂掉后重新用原来配置启动数据库,“更新过”说明镜像运行时又执行了初始化,而数据已经存在,所以有冲突。照着这个想法,我采取了以下措施:
看看yaml配置中,有哪些可能是触发初始化的配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgresql
namespace: kube-ops
labels:
name: postgresql
spec:
selector:
matchLabels:
name: postgresql
template:
metadata:
name: postgresql
labels:
name: postgresql
spec:
containers:
- name: postgresql
# image: docker.vonedao.com/bases/postgresql:10
image: sameersbn/postgresql:9.6-2
imagePullPolicy: IfNotPresent
env:
- name: POSTGRES_PASSWORD
value: git0318
- name: DB_USER
value: gitlab
- name: DB_PASS
value: git0318
- name: DB_NAME
value: gitlab_production
- name: DB_EXTENSION
value: pg_trgm
ports:
- name: postgres
containerPort: 5432
volumeMounts:
- mountPath: /var/lib/postgresql
name: data
volumes:
- name: data
persistentVolumeClaim:
claimName: gitlab-postgresql-pvc
将猜测的这部分配置注释掉。
重新启动:
停止pod
kubectl delete -f gitlab-postgresql.yaml
启动pod
kubectl create -f gitlab-postgresql.yaml
再次查看postgresql容器日志:kubectl --namespace=kube-ops logs postgresql-75fbb7b9fd-8mllg
可以看到数据库已经启动成功
然后再将git重新启动
# kubectl apply -f gitlab-gitlab.yaml
再次访问已经正常:
求证我分析的是否正确
有两个方式去验证:
1.进入容器查看数据库启动配置
2.到官方网站找到sameersbn/postgresql:9.6-2镜像打包过程
详细过程待补充
分类:
kubernetes
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」