首页 > 解决方案 > 幸存的k8s CronJob jobId重新启动

问题描述

我每天都有一个 k8s cron 作业,我需要为每个创建的作业拥有唯一的 id,这在作业重新启动时相同,以防作业失败。例子:

2021-04-10, restarts:0, id = 1234 -> failed
2021-04-10, restarts:1, id = 1234 -> failed
2021-04-10, restarts:2, id = 1234 -> failed

2021-04-11, restarts:0, id 1235 -> failed
2021-04-11, restarts:1, id 1235 -> failed

2021-04-12, restarts:0, id 1236 -> success

2021-04-13, restarts:0, id 1237 -> success

有没有办法生成这样的变量?

标签: kuberneteskubernetes-cronjob

解决方案


有没有办法生成这样的变量?

是的,使用 UID。在 Kubernetes 集群的整个生命周期中创建的每个对象都有一个不同的UID. 它旨在区分相似实体的历史事件。

然后可以将此 UID 作为环境变量公开并注入您的 pod:


apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            imagePullPolicy: IfNotPresent
            env:
              - name: MY_UID
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.uid            
            command:
            - /bin/sh
            - -c
            - date; echo $MY_UID
          restartPolicy: OnFailure 

在这里你打印出唯一的 UID:

➜  ~ k logs hello-1618817040-4jkpx 
Mon Apr 19 07:24:02 UTC 2021
f9060e34-a4e8-40d2-b459-6029b07e4fe7

您可以直接使用它,也可以将其散列并使其成为您想要的任何数据类型。


推荐阅读