【发布时间】:2021-09-14 16:30:48
【问题描述】:
我正在尝试使用相同的掌舵图部署多个 cronjob。我在下面的 values.yaml 文件中定义了 cronjobs。
cronjob:
crons:
"0":
name: one-minute-cron
schedule: "*/1 * * * *"
"1":
name: five-minute-cron
schedule: "*/5 * * * *"
metadata:
namespace: "{{K8S_NS}}"
creationTimestamp: null
restartPolicy: OnFailure
image:
repository: "{{CI_REGISTRY_IMAGE}}/{{CI_COMMIT_REF_SLUG}}:{{CI_COMMIT_SHA}}.{{CI_PIPELINE_IID}}"
pullPolicy: "Always"
imagePullSecrets: git-image-pull-secret-cron
restartPolicy: OnFailure
resources:
requests:
cpu: 1.0
memory: "128Mi"
limits:
cpu: 2.0
memory: "192Mi"
下面是我的模板文件夹中的 cronjob.yaml 文件。
{{- range $job, $val := .Values.cronjob.crons }}
apiVersion: batch/v1beta1
kind: CronJob
metadata:
namespace: {{ $.Values.cronjob.metadata.namespace }}
spec:
concurrencyPolicy: Allow
failedJobsHistoryLimit: 1
jobTemplate:
metadata:
creationTimestamp: {{ $.Values.cronjob.metadata.creationTimestamp }}
name: {{ $.Values.cronjob.crons.name }}
spec:
template:
metadata:
creationTimestamp: {{ $.Values.cronjob.metadata.creationTimestamp }}
spec:
containers:
- image: {{ $.Values.cronjob.image.repository }}
imagePullPolicy: {{ $.Values.cronjob.image.pullPolicy }}
name: {{ $.Values.cronjob.crons.name }}
resources:
requests:
memory: {{ $.Values.cronjob.resources.requests.memory }}
cpu: {{ $.Values.cronjob.resources.requests.cpu }}
limits:
memory: {{ $.Values.cronjob.resources.limits.memory }}
cpu: {{ $.Values.cronjob.resources.limits.cpu }}
dnsPolicy: ClusterFirst
restartPolicy: {{ $.Values.cronjob.image.restartPolicy }}
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
imagePullSecrets:
- name: {{ $.Values.cronjob.image.imagePullSecrets }}
schedule: {{ quote $.Values.cronjob.crons.schedule }}
successfulJobsHistoryLimit: 3
suspend: false
status: {}
---
{{- end }}
当我在 CICD 管道中运行它以在 gitlab 中进行部署时,它会抛出以下错误。
Error: UPGRADE FAILED: error validating "": error validating data: [ValidationError(CronJob.spec.jobTemplate.spec.template.spec.containers[0]): missing required field "name" in io.k8s.api.core.v1.Container, ValidationError(CronJob.spec): missing required field "schedule" in io.k8s.api.batch.v1beta1.CronJobSpec]
注意:我已经从 gitlab 复制了整个存储库,除了 gitlab 机密、模板等敏感信息。我也为此检查了其他博客,但它们都没有帮助这些 crons 工作。 Github repo 链接是here
【问题讨论】:
-
您使用的是哪个 helm 版本 (
helm version --short)? -
我的 helm 版本低于 helm 版本。
helm version --short v3.2.0+ge11b7ce -
您能否更详细地解释一下 CI/CD 究竟使用了哪个 helm 命令?我试图复制你的问题,但我得到了
resource name may not be empty的错误,所以我在metadata:下添加了name:字段,它似乎正在工作。根本不完全正确,因为 helm 没有迭代cron.cronjobs并且始终使用第一个值,但它仍然与您的问题不同。 -
我也遇到资源名可能不为空的错误。 CI/CD 正在使用 helm upgrade 命令。此外,我无法遍历值文件中定义的这些 cron。我是这个掌舵部署的新手。我可以从命令行手动部署 crons。
标签: kubernetes cron kubernetes-helm