нет вида TZCronJob зарегистрирован для версии cronjobber.hidde.co/v1alpha1

Фон

Я использую TZCronJob для запуска cronjobs с часовыми поясами в Kubernetes. Пример 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

На самом деле, с любым старым заданием cron в Kubernetes вы можете запустить 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

Как я могу создать новое разовое задание на основе определения моей диаграммы?


person Scott Skiles    schedule 08.11.2019    source источник


Ответы (3)


В Helm есть механизмы, называемые Хуки.

Helm предоставляет механизм ловушек, позволяющий разработчикам диаграмм вмешиваться в определенные моменты жизненного цикла релиза. Например, вы можете использовать хуки, чтобы:

  • Загрузите ConfigMap или Secret во время установки до загрузки любых других диаграмм

  • Выполните задание для резервного копирования базы данных перед установкой новой диаграммы, а затем выполните второе задание после обновления, чтобы восстановить данные.

  • Запустите задание перед удалением выпуска, чтобы корректно вывести службу из ротации перед ее удалением.

Хуки работают как обычные шаблоны, но у них есть специальные аннотации, которые заставляют Helm использовать их по-другому. В этом разделе мы рассмотрим базовый шаблон использования хуков.

Хуки объявляются как аннотация в разделе метаданных манифеста:

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

Если ресурсы относятся к типу задания, Tiller будет ждать, пока задание не будет успешно выполнено. А если задание не удастся, релиз не удастся. Это блокирующая операция, поэтому клиент Helm приостановит выполнение задания.

КАК НАПИСАТЬ КРЮЧКИ:

Хуки - это просто файлы манифеста Kubernetes со специальными аннотациями в разделе метаданных. Поскольку это файлы шаблонов, вы можете использовать все обычные функции шаблонов, включая чтение .Values ​​,. Release и .Template.

Например, этот шаблон, хранящийся в 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
person Malgorzata    schedule 12.11.2019
comment
Спасибо! ссылка хуков не работает. Я посмотрю, смогу ли я заставить это работать для моего варианта использования, и вернусь. - person Scott Skiles; 09.12.2019

хава вы прописываете кастомный ресурс TZCronJob? вы можете использовать kubectl get crd или kubectl api-versions для проверки.

person yiduyangyi    schedule 08.11.2019

kubernetes изначально поддерживает CronJobs. вам не нужно использовать настраиваемое определение ресурса или другие сторонние объекты. просто обновите yaml, как показано ниже. Он должен работать

apiVersion: batch/v1beta1
kind: CronJob
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

Если вы хотите использовать cronjob с поддержкой часового пояса, выполните следующие действия, чтобы установить cronjobber.

# Install CustomResourceDefinition
$ kubectl apply -f https://raw.githubusercontent.com/hiddeco/cronjobber/master/deploy/crd.yaml
# Setup service account and RBAC
$ kubectl apply -f https://raw.githubusercontent.com/hiddeco/cronjobber/master/deploy/rbac.yaml
# Deploy Cronjobber (using the timezone db from the node)
$ kubectl apply -f https://raw.githubusercontent.com/hiddeco/cronjobber/master/deploy/deploy.yaml
person P Ekambaram    schedule 08.11.2019
comment
Привет спасибо. Я уточнил свой вопрос. У меня уже установлен cronjobber. Меня интересует, как я могу создать новое разовое задание на основе определения моей диаграммы? - person Scott Skiles; 08.11.2019