Kubernetes-如何只运行一次作业

Kubernetes-如何只运行一次作业,kubernetes,jobs,kubernetes-jobs,Kubernetes,Jobs,Kubernetes Jobs,我有一个基于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

我有一个基于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试图运行新pod以获取出口0代码,直到达到activeDeadlineSeconds超时。如何避免这种情况?我希望在kubernetes中运行build命令来检查编译,如果编译失败,我将得到不同于0的退出代码。我不想再次运行编译


可能吗?如何执行?

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

只需根据模板创建pod:

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

遗憾的是,目前无法阻止作业控制器在新POD出现故障时重新启动它们,但kubernetes社区正在研究解决方案,请参见:


“退避策略和失败的pod限制”

现在可以通过设置退避限制:0来实现这一点,该限制告诉控制器重试0次。默认值为6

,但在命令完成时如何停止/杀死pod?对于作业,如果您将
restartPolicy
设置为
Never
,则运行的pod将停止。@rishabh.bhardwaj,如我的回答中所述,在完成pod后,pod将停止。使用pod代替作业的问题是,pod也会因虚假原因而失败,如节点被杀死或其他不受用户控制的问题。