Exécuter des pods avec des jobs et des cronjobs

KubernetesKubernetesBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans Kubernetes, les jobs (tâches) et les cronjobs (tâches planifiées) sont utilisés pour exécuter des tâches qui ne font pas partie d'une application ou d'un service à long terme. Les jobs sont utilisés pour les tâches ponctuelles, tandis que les cronjobs sont utilisés pour les tâches qui doivent être exécutées selon une planification régulière.

Dans ce laboratoire (LabEx), nous apprendrons à exécuter des pods avec des jobs et des cronjobs dans Kubernetes. Nous commencerons par un exemple simple et passerons progressivement à des exemples plus complexes.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/logs("Logs") subgraph Lab Skills kubernetes/initialization -.-> lab-11300{{"Exécuter des pods avec des jobs et des cronjobs"}} kubernetes/get -.-> lab-11300{{"Exécuter des pods avec des jobs et des cronjobs"}} kubernetes/create -.-> lab-11300{{"Exécuter des pods avec des jobs et des cronjobs"}} kubernetes/apply -.-> lab-11300{{"Exécuter des pods avec des jobs et des cronjobs"}} kubernetes/logs -.-> lab-11300{{"Exécuter des pods avec des jobs et des cronjobs"}} end

Démarrer le cluster Minikube

Avant de créer des ressources, vous avez besoin d'un cluster Kubernetes en cours d'exécution. Minikube est un environnement Kubernetes léger qui s'exécute sur votre machine locale.

  1. Accédez à votre répertoire de travail :

    Ouvrez le terminal et accédez au dossier de projet par défaut :

    cd /home/labex/project
  2. Démarrez Minikube :

    Démarrez Minikube pour initialiser un cluster Kubernetes :

    minikube start
    • Cette commande configure un cluster Kubernetes mono - nœud sur votre machine locale.
    • Minikube peut prendre quelques minutes à démarrer en fonction des performances de votre système.
  3. Vérifiez que Minikube est en cours d'exécution :

    Vérifiez l'état du cluster Minikube :

    minikube status
    • Recherchez des composants tels que kubelet et apiserver listés comme Running (en cours d'exécution).
    • Si le cluster n'est pas en cours d'exécution, relancez la commande minikube start.

Si vous rencontrez des problèmes lors du démarrage de Minikube, utilisez minikube delete pour réinitialiser l'environnement si nécessaire.

Exécuter un pod avec un job

La première étape consiste à créer un pod qui exécute un job. Dans cet exemple, nous allons créer un pod qui exécute une commande pour afficher "Hello, World!" dans la console.

Créez un fichier nommé job.yaml dans /home/labex/project/ avec le contenu suivant :

apiVersion: batch/v1
kind: Job
metadata:
  name: hello-job
spec:
  template:
    spec:
      containers:
        - name: hello
          image: busybox
          command: ["sh", "-c", 'echo "Hello, World!"']
      restartPolicy: Never
  backoffLimit: 4

Dans ce fichier, nous définissons un job nommé hello-job qui exécute un seul conteneur nommé hello. Le conteneur exécute l'image busybox et exécute une commande pour afficher "Hello, World!" dans la console.

Pour créer le job, exécutez la commande suivante :

kubectl apply -f job.yaml

Vous pouvez vérifier l'état du job en exécutant la commande suivante :

kubectl get jobs

Une fois le job terminé, vous pouvez afficher les journaux du pod en exécutant la commande suivante :

kubectl logs <POD_NAME>

Remplacez <POD_NAME> par le nom du pod qui a exécuté le job, et vous pouvez obtenir le POD_NAME avec la commande kubectl get pods |grep hello-job.

Félicitations, vous avez réussi à exécuter un pod avec un job dans Kubernetes!

Exécuter un job avec plusieurs pods

Dans certains cas, vous devrez peut - être exécuter un job avec plusieurs pods pour améliorer les performances. Dans cet exemple, nous allons créer un job qui exécute plusieurs pods pour télécharger des fichiers depuis un serveur distant.

Créez un fichier nommé multi - pod - job.yaml dans /home/labex/project/ avec le contenu suivant :

apiVersion: batch/v1
kind: Job
metadata:
  name: download-job
spec:
  completions: 3
  parallelism: 2
  template:
    spec:
      containers:
        - name: downloader
          image: curlimages/curl
          command: ["curl", "-o", "/data/file", "http://example.com/file"]
          volumeMounts:
            - name: data-volume
              mountPath: /data
      restartPolicy: Never
      volumes:
        - name: data-volume
          emptyDir: {}
  backoffLimit: 4

Dans ce fichier, nous définissons un job nommé download - job qui exécute plusieurs pods avec l'image curlimages/curl. Chaque pod télécharge un fichier depuis http://example.com/file et le sauvegarde dans un volume partagé nommé data - volume.

Pour créer le job, exécutez la commande suivante :

kubectl apply -f multi - pod - job.yaml

Vous pouvez vérifier l'état du job en exécutant la commande suivante :

kubectl get jobs

Une fois le job terminé, vous pouvez afficher les journaux du pod en exécutant la commande suivante :

kubectl logs <POD_NAME>

Remplacez <POD_NAME> par le nom de n'importe quel pod qui a exécuté le job. Vous pourrez voir le journal de téléchargement du fichier, et vous pouvez obtenir le POD_NAME avec la commande kubectl get pod |grep download - job.

Félicitations, vous avez réussi à exécuter un job avec plusieurs pods dans Kubernetes!

Exécuter un cronjob

En plus des jobs ponctuels, Kubernetes prend également en charge les cronjobs (tâches planifiées) pour exécuter des tâches selon une planification régulière. Dans cet exemple, nous allons créer un cronjob qui exécute une commande toutes les minutes.

Créez un fichier nommé cronjob.yaml dans /home/labex/project/ avec le contenu suivant :

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello-cronjob
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: hello
              image: busybox
              command: ["sh", "-c", 'echo "Hello, World!"']
          restartPolicy: Never
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 3

Dans ce fichier, nous définissons un cronjob nommé hello-cronjob qui exécute une commande toutes les minutes. La commande est la même que celle que nous avons utilisée dans le premier exemple pour afficher "Hello, World!" dans la console.

Pour créer le cronjob, exécutez la commande suivante :

kubectl apply -f cronjob.yaml

Vous pouvez vérifier l'état du cronjob en exécutant la commande suivante :

kubectl get cronjobs

Une fois le cronjob en cours d'exécution, vous pouvez afficher les journaux du pod en exécutant la commande suivante :

kubectl logs -f <POD_NAME>

Remplacez <POD_NAME> par le nom de n'importe quel pod créé par le cronjob, et vous pouvez obtenir le POD_NAME avec la commande kubectl get pod |grep hello-cronjob.

Félicitations, vous avez réussi à exécuter un cronjob dans Kubernetes!

Résumé

Dans ce laboratoire, nous avons appris à exécuter des pods avec des jobs et des cronjobs (tâches planifiées) dans Kubernetes. Nous avons commencé par un exemple simple d'un pod exécutant un job, puis nous sommes progressivement passés à des exemples plus complexes de jobs avec plusieurs pods et de cronjobs s'exécutant selon une planification régulière. Grâce à ces connaissances, vous pouvez exécuter diverses tâches qui ne font pas partie d'une application ou d'un service à long terme dans Kubernetes.