Kubernetes - 如何只 运行 工作一次

Kubernetes - how to run job only once

我有一个基于 kubernetes 网站示例的工作定义。

apiVersion: batch/v1
kind: Job
metadata:
  name: pi-with-timeout-6
spec:
  activeDeadlineSeconds: 30
  completions: 1
  parallelism: 1
  template:
    metadata:
      name: pi
    spec:
      containers:
      - name: pi
        image: perl
        command: ["exit", "1"]
      restartPolicy: Never

我想要运行这个作业一次,如果失败不再重新开始。使用 comand exit 1 kubernetes 尝试 运行 new pod 获取 exit 0 代码,直到达到 activeDeadlineSeconds 超时。怎样才能避免呢?我想 运行 在 kubernetes 中构建命令来检查编译,如果编译失败,我将得到不同于 0 的退出代码。我不想再次 运行 编译。

可能吗?怎么样?

如果您想要一个一次性的命令运行器,您可能应该创建裸 pod,因为该作业将尝试执行命令直到它成功或满足活动截止日期。

只需从您的模板创建广告连播:

apiVersion: v1
kind: Pod
metadata:
  name: pi
spec:
  containers:
  - name: pi
    image: perl
    command: ["exit", "1"]
  restartPolicy: Never

遗憾的是,目前没有办法阻止作业控制器在失败时重新生成新的 pods,但 kubernetes 社区正在研究解决方案,请参阅:

"Backoff policy and failed pod limit" https://github.com/kubernetes/community/pull/583

现在这可以通过设置 backoffLimit: 0 来告诉控制器进行 0 次重试。默认为 6