никакой вид "TZCronJob" не зарегистрирован для версии "cronjobber.hidde.co/v1alpha1" - PullRequest
0 голосов
/ 08 ноября 2019

Фон

Я использую TZCronJob для запуска cronjobs с часовыми поясами в Kubernetes. Образец cronjob.yaml может выглядеть следующим образом (согласно документам cronjobber ). Обратите внимание на указанный часовой пояс, расписание и 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

Обычно, с любым старым cronjob в 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=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

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

Ответы [ 3 ]

0 голосов
/ 08 ноября 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
0 голосов
/ 12 ноября 2019

В Helm существуют механизмы, называемые Hooks .

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

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

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

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

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

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

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

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

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

Крюки - это просто файлы манифеста Kubernetes со специальными аннотациямив разделе метаданных. Поскольку они являются файлами шаблонов, вы можете использовать все обычные функции шаблонов, включая чтение. Значения ,. 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
0 голосов
/ 08 ноября 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...