Kubernetes - 如何只运行一次工作

问题描述 投票:13回答:3

我有一个基于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的退出代码。我不想再次运行编译。

可能吗?怎么样?

kubernetes jobs kubernetes-jobs
3个回答
14
投票

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

只需从模板中创建pod:

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

6
投票

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


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.