没有为版本“ cronjobber.hidde.co/v1alpha1”注册任何类型的“ TZCronJob” 背景错误

背景

我正在使用TZCronJob在Kubernetes中运行带有时区的cronjobs。示例cronjob.yaml可能如下所示(根据cronjobber docs)。请注意指定的时区,时间表和kind=TZCronJob

apiVersion: cronjobber.hidde.co/v1alpha1
kind: TZCronJob
metadata:
  name: hello
spec:
  schedule: "05 09 * * *"
  timezone: "Europe/Amsterdam"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo "Hello,World!"
          restartPolicy: OnFailure

通常,在Kubernetes中使用任何旧的cronjob,您都可以按照kubectl create cronjob docs运行kubectl create job test-job --from=tzcronjob/name_of_my_cronjob

错误

但是,当我尝试使用kubectl create job test-job --from=tzcronjob/name_of_my_cronjob运行它(将命令从--from=tzcronjob/切换)时,我得到:

  

error: from must be an existing cronjob: no kind "TZCronJob" is registered for version "cronjobber.hidde.co/v1alpha1" in scheme "k8s.io/kubernetes/pkg/kubectl/scheme/scheme.go:28"

当我尝试窥视https://kubernetes.io/kubernetes/pkg/kubectl/scheme/scheme.go:28时,我得到404(未找到)。

这几乎可行,但无济于事:

kubectl create job test-job-name-v1 --image=tzcronjob/name_of_image

如何从图表定义中创建一个新的一次性工作?

wangjiajunwf 回答:没有为版本“ cronjobber.hidde.co/v1alpha1”注册任何类型的“ TZCronJob” 背景错误

Helm中,有一种机制称为Hooks

Helm提供了一种挂钩机制,以允许图表开发人员在发行版生命周期的某些时间进行干预。例如,您可以使用挂钩执行以下操作:

  • 在安装期间先加载ConfigMap或Secret,然后再安装其他任何图表 已加载

  • 在安装新图表之前,执行作业以备份数据库, 然后在升级后执行第二个作业以还原 数据

  • 在删除发行版之前运行作业以正常退出服务 旋转之前将其旋转。

挂钩的工作方式类似于常规模板,但是它们具有特殊的注释,这些注释使Helm可以不同地利用它们。在本节中,我们介绍了钩子的基本用法模式。

在清单的元数据部分中,将挂钩声明为注释:

apiVersion: ...
kind: ....
metadata:
  annotations:
    "helm.sh/hook": "pre-install"

如果资源是Job类型,则Tiller将等待,直到作业成功运行到完成为止。如果作业失败,则发布将失败。这是一项阻止操作,因此Helm客户端将在Job运行时暂停。

如何编写钩子:

挂钩只是在元数据部分带有特殊注释的Kubernetes清单文件。因为它们是模板文件,所以您可以使用所有常规模板功能,包括读取.Value ,。发布 .Template 。 / p>

例如,存储在templates / post-install-job.yaml中的此模板声明要在安装后运行的作业:

apiVersion: batch/v1
kind: Job
metadata:
  name: "{{.Release.Name}}"
  labels:
    app.kubernetes.io/managed-by: {{.Release.Service | quote }}
    app.kubernetes.io/instance: {{.Release.Name | quote }}
    app.kubernetes.io/version: {{ .Chart.AppVersion }}
    helm.sh/chart: "{{.Chart.Name}}-{{.Chart.Version}}"
  annotations:
    # This is what defines this resource as a hook. Without this line,the
    # job is considered part of the release.
    "helm.sh/hook": post-install
    "helm.sh/hook-weight": "-5"
    "helm.sh/hook-delete-policy": hook-succeeded
spec:
  template:
    metadata:
      name: "{{.Release.Name}}"
      labels:
        app.kubernetes.io/managed-by: {{.Release.Service | quote }}
        app.kubernetes.io/instance: {{.Release.Name | quote }}
        helm.sh/chart: "{{.Chart.Name}}-{{.Chart.Version}}"
    spec:
      restartPolicy: Never
      containers:
      - name: post-install-job
        image: "alpine:3.3"
        command: ["/bin/sleep","{{default "10" .Values.sleepyTime}}"]

使此模板成为钩子的原因是注释:

  annotations:
    "helm.sh/hook": post-install
,

您是否注册了自定义资源TZCronJob?您可以使用kubectl get crdkubectl api-versions进行检查。

,

kubernetes本机支持CronJobs。您不需要使用自定义资源定义或其他第三方对象。只需如下更新yaml。它应该可以工作

/

如果要使用时区支持的cronjob,请按照以下步骤安装cronjobber

*
本文链接:https://www.f2er.com/3140928.html

大家都在问