Как изменить расписание кубронетского куброна или как запустить его вручную?

Есть ли простой способ изменить расписание kubernetes cronjob, как kubectl change cronjob my-cronjob "10 10 * * *"? Или любым другим способом без необходимости делать kubectl apply -f deployment.yml? Последнее может быть чрезвычайно громоздким в сложной настройке CI/CD, поскольку ручное редактирование yaml развертывания часто нежелательно, особенно если файл создается из шаблона в процессе сборки.

В качестве альтернативы, есть ли способ запустить cronjob вручную? Например, задание планируется запустить через 22 часа, но я хочу запустить его вручную один раз сейчас, не меняя расписание cron навсегда (для тестирования или первоначального запуска)?

6 ответов

Решение

Более свежие версии k8s (начиная с 1.10) поддерживают следующую команду:

$ kubectl create job my-one-time-job --from=cronjobs/my-cronjob

Источник - это решенная проблема k8s github.

Вы можете обновить только выбранное поле ресурса, исправив его

patch -h                     
Update field(s) of a resource using strategic merge patch, a JSON merge patch, or a JSON patch.           

JSON and YAML formats are accepted.

Please refer to the models in
https://htmlpreview.github.io/?https://github.com/kubernetes/kubernetes/blob/HEAD/docs/api-reference/v1/definitions.html
to find if a field is mutable.

Как указано в комментарии для ссылки:

kubectl patch my-cronjob -p '{"spec":{"schedule": "42 11 * * *"}}

Кроме того, в текущих версиях kubectl, чтобы запустить однократное выполнение объявленного cronjob, вы можете вручную создать задание, которое соответствует спецификации cronjob с помощью

kubectl create job --from=cronjob/mycron

Из ответа @SmCaterpillar вышеkubectl patch my-cronjob -p '{"spec":{"schedule": "42 11 * * *"}}', я получаю сообщение об ошибке: невозможно разобрать "'{spec:{schedule:": yaml: обнаружен неожиданный конец потока

Если кто-то еще сталкивается с подобной проблемой, замените последнюю часть команды на -

      "{\"spec\":{\"schedule\": \"42 11 * * *\"}}"

У меня есть друг, который разработал плагин kubectl, который отвечает именно на это!
Он берет существующий cronjob и просто создает из него работу.
Смотрите https://github.com/vic3lord/cronjobjob
Посмотрите в README инструкции по установке.

kubectl patch cronjob -p "{" spec ": {" jobTemplate ": {" spec ": {" parallelism ": 0," completions ": 0}}}}" -n

ПРИМЕЧАНИЕ. В Windows эти внешние кавычки должны быть двойными кавычками. Для OpenShift (команда OC) он принимает одинарные кавычки.

И если вы хотите исправить расписание cronjob k8s с помощью Python kubernetesбиблиотека , вы можете сделать это так:

      from kubernetes import client, config

config.load_kube_config()
v1 = client.BatchV1beta1Api()
body = {"spec": {"schedule": "@daily"}}
ret = v1.patch_namespaced_cron_job(
    namespace="default", name="my-cronjob", body=body
)
print(ret)
Другие вопросы по тегам