我想验证一些 Postgres 转储中的数据。 我创建了一个脚本,将转储导入到新的 Postgres 数据库中,并验证数据。
这在 Kubernetes 中作为 cronjob 运行。
Cronjob 包含两个容器。默认容器,运行脚本,以及作为数据库的 postgresql 容器。
jobTemplate:
spec:
template:
spec:
containers:
- name: verifier
image: "verifier:v1.0.2"
env:
# ...
- name: postgres
image: postgres:16.1
env:
- name: POSTGRES_PASSWORD
value: test
这执行得很好,但是当验证器脚本完成时它会被杀死。当 postgresql 容器继续运行时。
pod 保持未就绪状态
verifier-28577575-zq24s 1/2 NotReady 0 57m
我尝试添加
activeDeadlineSeconds: 720
,但似乎没有触发。
有没有办法在默认容器执行完毕后拿掉剩余的容器?
据我所知,没有这样的方法。我们谈论的是单个 Pod。只要一个容器正在运行,该 Pod 就被视为处于活动状态。为了解决这个问题,我要做的就是让我的验证者图像基于
postgres:16.1
并在那里运行我的验证脚本。
实际上,您甚至不必这样做,因为您可以简单地将
*.sql[.gz]
安装到 /docker-entrypoint-initdb.d
- 如果出现问题,容器将会失败。使用普罗米修斯和作业的状态,您可以进行警报。
apiVersion: batch/v1
kind: Job
metadata:
name: myjob
spec:
template:
spec:
volumes:
- name: dumps
# Obviously, you might want to use something more suitable
# like https://github.com/yandex-cloud/k8s-csi-s3
configMap:
name: dumps
containers:
- name: pg
image: postgres:16.1
volumeMounts:
- mountPath: /docker-entrypoint-initdb.d/dump.sql
name: dumps
subPath: theactualDump.sql
restartPolicy: Never