gpt4 book ai didi

kubernetes - 没有类型 "TZCronJob"为版本 "cronjobber.hidde.co/v1alpha1"注册

转载 作者:行者123 更新时间:2023-12-02 12:14:26 29 4
gpt4 key购买 nike

背景

我正在使用 TZCronJob 在 Kubernetes 中运行带有时区的 cronjobs。 sample 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 job test-job --from=tzcronjob/name_of_my_cronjob ,根据 kubectl create cronjob docs .

错误

但是,当我尝试使用 kubectl create job test-job --from=tzcronjob/name_of_my_cronjob 运行它时(将 from 命令切换到 --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

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

最佳答案

Helm有一些机制叫做 Hooks .

Helm 提供了一种钩子(Hook)机制,允许图表开发人员在发布生命周期的某些点进行干预。例如,您可以使用 Hook 来:

  • 在安装期间加载任何其他图表之前的 ConfigMap 或 Secret
    已加载
  • 在安装新图表之前执行一个作业来备份数据库,
    然后在升级后执行第二个作业以恢复
    数据
  • 在删除版本之前运行作业以优雅地取出服务
    在移除之前旋转。

  • Hooks 像常规模板一样工作,但它们具有特殊的注释,导致 Helm 以不同的方式使用它们。在本节中,我们将介绍钩子(Hook)的基本使用模式。

    Hook 在 list 的元数据部分中声明为注释:
    apiVersion: ...
    kind: ....
    metadata:
    annotations:
    "helm.sh/hook": "pre-install"

    如果资源是 Job 类型,Tiller 将等到作业成功运行完成。如果作业失败,发布也会失败。这是一个阻塞操作,因此 Helm 客户端将在 Job 运行时暂停。

    如何编写 Hooks:

    钩子(Hook)只是 Kubernetes list 文件,在元数据部分带有特殊注释。因为它们是模板文件,所以您可以使用所有普通模板功能,包括 阅读 .Values , . 发布 , 和 .模板 .

    例如,存储在 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}}"]

    使这个模板成为钩子(Hook)的是注释:
      annotations:
    "helm.sh/hook": post-install

    关于kubernetes - 没有类型 "TZCronJob"为版本 "cronjobber.hidde.co/v1alpha1"注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58758770/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com