问题描述
我在 kubernetes 上有一个 cron 作业,为了测试目的,我像这样触发:
kubectl create -f src/cronjob.yaml
kubectl create job --from=cronjob/analysis analysis-test
这会创建一个名为 analysis-test-<random-string>
的 Pod。我想知道是否可以省略或使后缀可预测?
过滤cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
Metadata:
name: analysis
labels:
job: analysis
spec:
schedule: "0 0 * * 0"
concurrencyPolicy: "Forbid"
suspend: true
FailedJobsHistoryLimit: 3
successfulJobsHistoryLimit: 3
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: container-name
image: myimage
env:
- name: ENVIRONMENT
value: "DEV"
imagePullPolicy: IfNotPresent
command: [ "/bin/bash","-c","--" ]
args: [ "while true; do sleep 30; done;"]
解决方法
从 v1beta1 开始,不,你不能,这是关于 cronjob 的文档 https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
以下是文档的摘录:
为 CronJob 资源创建清单时,请确保您提供的名称是有效的 DNS 子域名。名称不得超过 52 个字符。这是因为 CronJob 控制器会自动在提供的作业名称后附加 11 个字符,并且存在作业名称的最大长度不超过 63 个字符的限制。
这里还有 CronJob v1beta1 规范的参考页面,用于查看可用的选项配置: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#cronjobspec-v1beta1-batch
稍微挖掘一下源代码,你可以看到 CronJob 控制器是如何创建作业资源的 https://github.com/kubernetes/kubernetes/blob/v1.20.1/pkg/controller/cronjob/cronjob_controller.go#L327 https://github.com/kubernetes/kubernetes/blob/v1.20.1/pkg/controller/cronjob/utils.go#L219