postgresql - 如何解决 Kubernetes 中的 CrashLoopBackOff?
问题描述
我有一个带有 PostgreSQL 容器的 Kubernetes POD。我添加了一个活性探针来监控 psql。所以部署看起来像这样:
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
labels:
app: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
strategy:
type: Recreate
template:
metadata:
labels:
app: postgres
spec:
containers:
- env:
- name: POSTGRES_DB
value: mydb
- name: POSTGRES_PASSWORD
value: adminadmin
- name: POSTGRES_USER
value: admin
image: postgres:9.6.1
name: postgres
livenessProbe:
exec:
command: ["psql", "-Uadmin", "-dmydb", "-c", "SELECT 1"]
initialDelaySeconds: 60
timeoutSeconds: 10
failureThreshold: 12
ports:
- containerPort: 5432
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: dbdata
subPath: postgres
restartPolicy: Always
volumes:
- name: dbdata
persistentVolumeClaim:
claimName: dbdata
如果发生一些奇怪的事情,我的 LivenessProbe 会无限循环CrashLoopBackOff
,并且 postgres 容器将永远不会重新启动,直到我手动终止 POD。
例如,如果出于某种原因 POD 有一个 ReadOnly 文件系统,这会导致 Postgres 在启动后崩溃,这种情况似乎就会出现。
如果我杀死 POD 并强制重新安排,我可以手动解决这种情况。
现在我的问题是:如何配置我的 POD 部署,让 Kubernetes 检测到无休止的重启问题,然后杀死并重新安排 POD?
是restartPolicy:Always
可能的原因吗?
解决方案
推荐阅读
- reactjs - CORS 错误 - 无法使用 React.js 从 JIRA 获取 Rest api
- excel - 带有 aftersave 子程序的无限循环
- node.js - 使用nodeJS和cheerio写入HTML文件时获取特殊字符而不是单引号
- php - 如果少于一年显示月份,如果少于一个月显示天数,如何计算日期?
- python-3.x - 如何使用 selenium Web 驱动程序 python 双击 Web 元素中文本的特定部分?
- javafx - 具有不同线程的文本区域中的 JavaFX log4j
- php - 文本域 Wordpress 功能不起作用
- java - JSON-taglib 如何分配空值?
- docker - 从 Go api 连接到 Redshift 的 SSL 错误
- node.js - Mongoose 只从 MongoDB 返回 ID