默认节点完成后杀死 cronjob pod 中剩余的容器

问题描述 投票:0回答:1

我想验证一些 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
,但似乎没有触发。

有没有办法在默认容器执行完毕后拿掉剩余的容器?

postgresql kubernetes
1个回答
0
投票

据我所知,没有这样的方法。我们谈论的是单个 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
© www.soinside.com 2019 - 2024. All rights reserved.