根据 Kubernetes 作业和清理创建 Kubernetes Pod

Creating Kubernetes Pod per Kubernetes Job and Cleanup

我正在尝试根据以下要求创建 Kubernetes 作业:

  1. 每个作业最多只能创建一个pod
  2. 如果 pod 失败 - 作业将失败
  3. pod 的最长 运行 时间将为 1 小时
  4. 如果作业成功完成 - 删除作业

我尝试了以下配置:

apiVersion: batch/v1
kind: Job
metadata:
  name: {{ .Release.Name }}
  annotations:
    "helm.sh/hook": post-install
    "helm.sh/hook-delete-policy": hook-succeeded
spec:
  template:
    spec:
      containers:
        - name: {{ .Release.Name }}
          image: {{ .Values.image }}
          env:
            - name: ARG1
              value: {{ required "ARG1 is mandatory" .Values.ENV.ARG1 }}
            - name: GITLAB_USER_EMAIL
              value: {{ .Values.ENV.GITLAB_USER_EMAIL }}
          envFrom:
            - secretRef:
                name: {{ .Release.Name }}
      restartPolicy: Never
  backoffLimit: 1
  activeDeadlineSeconds: 3600

但它没有按预期工作,有什么想法吗? 谢谢!

  • 每个作业最多只能创建一个pod

请求的并行度 (.spec.parallelism) 可以设置为任何 non-negative 值。如果不指定,则默认为1。如果指定为0,则Job有效暂停,直到增加。

For Cronjobs could be helpful successfulJobsHistoryLimit: 0, failedJobsHistoryLimit: 0 this will remove the PODs if it's get failed or success so no history or POD will stays. So only one pod will get created or run.

  • 如果 pod 失败 - 作业将失败

这将是默认行为,也是 restartPolicy: Never 因此它不会重新启动。

  • pod 的最长 运行 时间将为 1 小时

    activeDeadlineSeconds: 3600你已经添加了

  • 如果作业成功完成 - 删除作业

ttlSecondsAfterFinished: 100 将解决您的问题。

apiVersion: batch/v1
kind: Job
metadata:
  name: {{ .Release.Name }}
  annotations:
    "helm.sh/hook": post-install
    "helm.sh/hook-delete-policy": hook-succeeded
spec:
  template:
    spec:
      containers:
        - name: {{ .Release.Name }}
          image: {{ .Values.image }}
          env:
            - name: ARG1
              value: {{ required "ARG1 is mandatory" .Values.ENV.ARG1 }}
            - name: GITLAB_USER_EMAIL
              value: {{ .Values.ENV.GITLAB_USER_EMAIL }}
          envFrom:
            - secretRef:
                name: {{ .Release.Name }}
      restartPolicy: Never
  backoffLimit: 1
  ttlSecondsAfterFinished: 100
  activeDeadlineSeconds: 3600