kubernetes - 幸存的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
有没有办法生成这样的变量?
解决方案
有没有办法生成这样的变量?
是的,使用 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
您可以直接使用它,也可以将其散列并使其成为您想要的任何数据类型。