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