Kubernetes - 如何只运行一次工作

时间:2016-10-06 10:11:09

标签: kubernetes jobs kubernetes-jobs

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

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

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

有可能吗?怎么样?

3 个答案:

答案 0 :(得分:14)

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

只需从模板中创建广告连拍:

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

答案 1 :(得分:6)

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

答案 2 :(得分:1)

可悲的是,目前无法阻止作业控制器在失败时重新生成新的pod,但kubernetes社区正在研究解决方案,请参阅:

“退避策略和失败的容器限制”https://github.com/kubernetes/community/pull/583