44

我有一个基于 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

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

可能吗?如何?

4

3 回答 3

56

到目前为止,这可以通过设置backoffLimit: 0告诉控制器进行 0 次重试来实现。默认为 6

于 2018-07-10T13:18:59.683 回答
39

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

只需从您的模板创建 pod:

apiVersion: v1
kind: Pod
metadata:
  name: pi
spec:
  containers:
  - name: pi
    image: perl
    command: ["exit", "1"]
  restartPolicy: Never
于 2016-10-06T11:11:59.723 回答
2

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

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

于 2017-08-21T21:41:13.860 回答