Kubernetes使用跨斗容器进行CronJob

rn0zuynd  于 2022-11-21  发布在  Kubernetes
关注(0)|答案(1)|浏览(131)

我 在 GKE 集群 内 运行 两 个 容器 时 遇到 了 一些 Kubernetes CronJob 问题 。
两 个 容器 中 的 一 个 实际 上 正在 执行 必须 由 CronJob 完成 的 作业 。
这 工作 得 很 好 。 它 在 应该 启动 的 时候 启动 , 完成 任务 , 然后 终止 。 直到 这 一 点 都 很 好 。
似乎 是 第 二 个 容器 导致 了 一些 问题 , 它 是 一 个 用于 访问 数据 库 示例 的 附属 容器 。 这 不会 终止 , 似乎 导致 了 CronJob 本身 不会 终止 的 问题 。 这 是 一 个 问题 , 因为 我 看到 运行 的 作业 示例 随着 时间 的 推移 而 累积 。
是否 有 办法 将 Kubernetes 批 处理 CronJob 配置 为 在 其中 一 个 容器 成功 执行 时 终止

apiVersion: batch/v1
kind: CronJob
metadata:
  name: chron-job-with-a-sidecar
  namespace: my-namespace
spec:
#            ┌───────────── minute (0 - 59)
#            │ ┌───────────── hour (0 - 23)
#            │ │  ┌───────────── day of the month (1 - 31)
#            │ │  │ ┌───────────── month (1 - 12)
#            │ │  │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
#            │ │  │ │ │                                   7 is also Sunday on some systems)
#            │ │  │ │ │                                   OR sun, mon, tue, wed, thu, fri, sat
#            │ │  │ │ │
  schedule: "0 8 * * *" # -> Every day At 8AM
  jobTemplate:
    metadata:
      labels:
        app: my-label
    spec:
      template:
          containers:
          # --- JOB CONTAINER -----------------------------------------------
          - image: my-job-image:latest
            imagePullPolicy: Always
            name: my-job
            command:
            - /bin/sh
            - -c
            - /some-script.sh; exit 0;
          # --- SIDECAR CONTAINER ----------------------------------------------
          - command:
            - "/cloud_sql_proxy"
            - "-instances=my-instance:antaktis-south-3:user=tcp:1234"
            # ... some other settings ...
            image: gcr.io/cloudsql-docker/gce-proxy:1.30.0
            imagePullPolicy: Always
            name: cloudsql-proxy
            # ... some other values ...

中 的 每 一 个

jq6vz3qz

jq6vz3qz1#

不,严格地说,没有办法让Kubernetes在“主”容器完成后自动停止边车容器。
我能想到的最接近kubernetes-native的解决方案是将CronJob concurrencyPolicy设置为Replace(参见CronJobSpec)。它不会在完成后停止sidecar,但至少每个新作业都会覆盖前一个作业,因此作业不会累积。不幸的是,使用此解决方案,您将丢失作业历史。
如果这个解决方案不适合您的需求,您需要在容器之间实现某种形式的通信,但Kubernetes本身并没有内置类似的功能。不过,有一些外部工具可以提供帮助,例如kubexit

相关问题