Un guide du débutant sur les tâches Kubernetes et CronJobs
Utilisez Jobs et CronJobs pour contrôler et gérer les pods et conteneurs Kubernetes.
Kubernetes est le moteur d'orchestration par défaut pour les conteneurs. Ses options de contrôle et de gestion des pods et des conteneurs incluent :
- Déploiements
- Ensembles avec état
- Ensembles de réplicas
Chacune de ces fonctionnalités a son propre objectif, avec pour fonction commune de garantir le fonctionnement continu des pods. En cas de panne, ces contrôleurs redémarrent ou replanifient les pods pour garantir que les services des pods continuent de fonctionner.
Comme l'explique la documentation Kubernetes, une tâche Kubernetes crée un ou plusieurs pods et garantit qu'un nombre spécifié de pods se termine une fois la tâche (tâche) terminée.
Tout comme dans un système d'exploitation classique, la possibilité d'effectuer des tâches automatisées et planifiées sans interaction de l'utilisateur est importante dans le monde Kubernetes. Mais les tâches Kubernetes font bien plus que simplement exécuter des tâches automatisées, et il existe de multiples façons de les utiliser :
- Emplois
- Emplois Cron
- Files d'attente de travail (cela dépasse le cadre de cet article)
Cela semble simple, n'est-ce pas ? Eh bien, peut-être. Quiconque travaille sur des conteneurs et des applications de microservices sait que certains nécessitent que les services soient transitoires afin de pouvoir effectuer des tâches spécifiques pour les applications ou au sein des clusters Kubernetes.
Dans cet article, j'expliquerai pourquoi les tâches Kubernetes sont importantes, comment créer des tâches et des CronJobs, et quand les utiliser pour les applications exécutées sur le cluster Kubernetes.
Différences entre les tâches Kubernetes et les CronJobs
Les tâches Kubernetes sont utilisées pour créer des pods transitoires qui effectuent les tâches spécifiques auxquelles ils sont affectés. Les CronJobs font la même chose, mais ils exécutent des tâches selon un calendrier défini.
Les tâches jouent un rôle important dans Kubernetes, notamment pour exécuter des processus par lots ou des opérations ad hoc importantes. Les tâches diffèrent des autres contrôleurs Kubernetes dans la mesure où elles exécutent des tâches jusqu'à leur achèvement, plutôt que de gérer l'état souhaité, comme dans les déploiements, les ReplicaSets et les StatefulSets.
Comment créer des tâches Kubernetes et des CronJobs
Avec ce bagage en main, vous pouvez commencer à créer des Jobs et des CronJobs.
Conditions préalables
Pour réaliser cet exercice, vous devez disposer des éléments suivants :
Un cluster Kubernetes fonctionnel ; vous pouvez l'installer avec :
- CentOS 8
- Minikube
- La ligne de commande kubectl Kubernetes
Voici le déploiement Minikube que j'ai utilisé pour cette démonstration :
$ minikube version
minikube version: v1.8.1
$ kubectl cluster-info
Kubernetes master is running at https://172.17.0.59:8443
KubeDNS is running at https://172.17.0.59:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 88s v1.17.3
Emplois Kubernetes
Comme toute autre chose dans le monde Kubernetes, vous pouvez créer des tâches Kubernetes avec un fichier de définition. Créez un fichier appelé sample-jobs.yaml
à l'aide de votre éditeur préféré.
Voici un extrait du fichier que vous pouvez utiliser pour créer un exemple de tâche Kubernetes :
apiVersion: batch/v1 ## The version of the Kubernetes API
kind: Job ## The type of object for jobs
metadata:
name: job-test
spec: ## What state you desire for the object
template:
metadata:
name: job-test
spec:
containers:
- name: job
image: busybox ## Image used
command: ["echo", "job-test"] ## Command used to create logs for verification later
restartPolicy: OnFailure ## Restart Policy in case container failed
Ensuite, appliquez les Jobs dans le cluster :
$ kubectl apply -f sample-jobs.yaml
Attendez quelques minutes que les pods soient créés. Vous pouvez afficher l'état de la création du pod :
$ kubectl get pod –watch
Après quelques secondes, vous devriez voir votre pod créé avec succès :
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
job-test 0/1 Completed 0 11s
Une fois les pods créés, vérifiez les logs du Job :
$ kubectl logs job-test job-test
Vous avez créé votre première tâche Kubernetes et vous pouvez en explorer les détails :
$ kubectl describe job job-test
Nettoyer les tâches :
$ kubectl delete jobs job-test
Emplois Cron Kubernetes
Vous pouvez utiliser CronJobs pour les tâches de cluster qui doivent être exécutées selon un calendrier prédéfini. Comme l'explique la documentation, ils sont utiles pour les tâches périodiques et récurrentes, comme exécuter des sauvegardes, envoyer des e-mails ou planifier des tâches individuelles pour une heure spécifique, par exemple lorsque votre cluster est susceptible d'être inactif.
Comme pour les Jobs, vous pouvez créer des CronJobs via un fichier de définition. Voici un extrait du fichier CronJob cron-test.yaml
. Utilisez ce fichier pour créer un exemple de CronJob :
apiVersion: batch/v1beta1 ## The version of the Kubernetes API
kind: CronJob ## The type of object for Cron jobs
metadata:
name: cron-test
spec:
schedule: "*/1 * * * *" ## Defined schedule using the *nix style cron syntax
jobTemplate:
spec:
template:
spec:
containers:
- name: cron-test
image: busybox ## Image used
args:
- /bin/sh
- -c
- date; echo Hello this is Cron test
restartPolicy: OnFailure ## Restart Policy in case container failed
Appliquez le CronJob à votre cluster :
$ kubectl apply -f cron-test.yaml
cronjob.batch/cron-test created
Vérifiez que le CronJob a été créé avec la planification dans le fichier de définition :
$ kubectl get cronjob cron-test
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cron-test */1 * * * * False 0 <none> 10s
Après quelques secondes, vous pouvez rechercher les pods créés par la dernière tâche planifiée et afficher la sortie standard de l'un des pods :
$ kubectl logs cron-test-1604870760
Sun Nov 8 21:26:09 UTC 2020
Hello from the Kubernetes cluster
Vous avez créé un CronJob Kubernetes qui crée un objet une fois par exécution en fonction de la planification schedule : "*/1 * * * *"
. Parfois, la création peut être manquée en raison de problèmes environnementaux au sein du cluster. Ils doivent donc être idempotents.
Autres choses à savoir
Contrairement aux déploiements et aux services dans Kubernetes, vous ne pouvez pas modifier le même fichier de configuration de tâche et le réappliquer immédiatement. Lorsque vous apportez des modifications au fichier de configuration du Job, vous devez supprimer le Job précédent du cluster avant de l'appliquer.
Généralement, la création d'un Job crée un seul pod et exécute la tâche donnée, comme dans l'exemple ci-dessus. Mais en utilisant les complétions et le parallélisme, vous pouvez lancer plusieurs pods, les uns après les autres.
Utilisez vos emplois
Vous pouvez utiliser les tâches Kubernetes et CronJobs pour gérer vos applications conteneurisées. Les tâches sont importantes dans les modèles de déploiement d'applications Kubernetes où vous avez besoin d'un mécanisme de communication ainsi que d'interactions entre les pods et les plates-formes. Cela peut inclure les cas où une application a besoin d'un « contrôleur » ou d'un « observateur » pour effectuer des tâches ou doit être programmée pour s'exécuter périodiquement.