321 votes

Comment puis-je déclencher manuellement une tâche programmée Kubernetes ?

J'ai créé un Travail programmé de Kubernetes qui fonctionne deux fois par jour selon son programme. Toutefois, j'aimerais le déclencher manuellement à des fins de test. Comment puis-je le faire ?

512voto

pedro_sland Points 330

La question #47538 que @jdf a mentionné est maintenant fermé et cela est maintenant possible. L'implémentation originale peut être trouvée aquí mais la syntaxe a changé.

Avec kubectl v1.10.1+ la commande est :

kubectl create job --from=cronjob/<cronjob-name> <job-name>

Il semble être rétrocompatible avec les anciens clusters car il a fonctionné pour moi sur la v0.8.x.

3 votes

Vérifiez votre version de kubectl, car la version installée via Google Cloud SDK ne dispose pas de cette commande. gcloud components install kubectl puis kubernetes.io/docs/tasks/tools/install-kubectl

0 votes

Cela fonctionne également dans Openshift, même aussi vieux que 3.11 (il suffit de remplacer kubectl avec oc ).

3 votes

.. et l'opération inverse est : kubectl [oc] delete job <job-name>

30voto

Camil Points 2243

Vous pouvez créer un travail simple basé sur votre ScheduledJob. Si vous avez déjà exécuté un ScheduledJob, il existe des travaux dans l'historique.

kubectl get jobs

NAME               DESIRED   SUCCESSFUL   AGE
hello-1477281595   1         1            11m
hello-1553106750   1         1            12m
hello-1553237822   1         1            9m

Exportez l'un de ces emplois :

kubectl get job hello-1477281595 -o yaml > my_job.yaml

Ensuite, modifiez un peu le yaml, en effaçant certains champs inutiles et exécutez-le manuellement :

kubectl create -f my_job.yaml
kubectl delete -f my_job.yaml

2 votes

Juste un petit ajout concernant "l'effacement de certains champs inutiles". Kubernetes se plaint de *uid et vous pouvez les supprimer facilement par cette commande sed -i '/uid:.*/d' my_job.yaml

1 votes

L'hypothèse selon laquelle il existe déjà des emplois dans l'histoire ne tient souvent pas.

23voto

Joseph Lust Points 4961

Malheureusement, aucun des exemples de syntaxe ci-dessus ne fonctionne dans Google Kubernetes Engine (GCP). En outre, la documentation de GKE elle-même est erronée.

Dans Kubernetes 1.10.6.gke-2 la syntaxe de travail est :

kubectl create job <your-new-job-name> --from=cronjob/<name-of-deployed-cron-job> -n <target namespace>

0 votes

Génial pour résoudre les problèmes de résilience des cron jobs, merci !

9voto

jdf Points 445

EDIT - juillet 2018 : voir le rapport de @pedro_sland. réponse car cette fonctionnalité a maintenant été mise en œuvre

Ma réponse originale ci-dessous restera correcte pour les anciennes versions de kubectl inférieures à v1.10.1.

\========================================================================

À part la création d'un nouveau poste (comme les autres réponses l'ont suggéré), il n'y a pas de moyen actuel de le faire. Il s'agit d'une demande de fonctionnalité intégrée à Kubernetes qui peut être suivie ici : https://github.com/kubernetes/kubernetes/issues/47538

3voto

iJanki Points 41

Pour des raisons de commodité, j'ai créé un petit utilitaire cmd qui permet de faire exactement cela et également de suspendre et de suspendre les cronjobs.

https://github.com/iJanki/kubecron

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X