问题描述
我每天都有一个 k8s cron 工作, 我需要为每个创建的作业设置唯一的 ID,在作业失败的情况下,作业重新启动时也是如此。 示例:
2021-04-10,restarts:0,id = 1234 -> Failed
2021-04-10,restarts:1,restarts:2,id = 1234 -> Failed
2021-04-11,id 1235 -> Failed
2021-04-11,id 1235 -> Failed
2021-04-12,id 1236 -> success
2021-04-13,id 1237 -> success
有没有办法生成这样的变量?
解决方法
有没有办法生成这样的变量?
是的,使用 UID。在 Kubernetes 集群的整个生命周期内创建的每个对象都有一个不同的 UID
。它旨在区分类似实体的历史事件。
此 UID 然后可以公开为 environment variable 并注入到您的 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
您可以直接使用它,也可以对它进行散列并将其转换为您想要的任何数据类型。