Ejecutar pods con jobs y cronjobs

KubernetesKubernetesBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En Kubernetes, los jobs (trabajos) y los cronjobs (trabajos programados) se utilizan para ejecutar tareas que no forman parte de una aplicación o servicio de ejecución prolongada. Los jobs se utilizan para tareas únicas, mientras que los cronjobs se utilizan para tareas que deben ejecutarse según una programación regular.

En este laboratorio, aprenderemos cómo ejecutar pods con jobs y cronjobs en Kubernetes. Comenzaremos con un ejemplo sencillo y, gradualmente, construiremos ejemplos más complejos.


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{{"Ejecutar pods con jobs y cronjobs"}} kubernetes/get -.-> lab-11300{{"Ejecutar pods con jobs y cronjobs"}} kubernetes/create -.-> lab-11300{{"Ejecutar pods con jobs y cronjobs"}} kubernetes/apply -.-> lab-11300{{"Ejecutar pods con jobs y cronjobs"}} kubernetes/logs -.-> lab-11300{{"Ejecutar pods con jobs y cronjobs"}} end

Iniciar el clúster de Minikube

Antes de crear recursos, necesitas un clúster de Kubernetes en ejecución. Minikube es un entorno ligero de Kubernetes que se ejecuta en tu máquina local.

  1. Navegar a tu directorio de trabajo:

    Abre la terminal y navega hasta la carpeta de proyecto predeterminada:

    cd /home/labex/project
  2. Iniciar Minikube:

    Inicia Minikube para inicializar un clúster de Kubernetes:

    minikube start
    • Este comando configura un clúster de Kubernetes de un solo nodo en tu máquina local.
    • Minikube puede tardar unos minutos en iniciarse dependiendo del rendimiento de tu sistema.
  3. Verificar que Minikube esté en ejecución:

    Comprueba el estado del clúster de Minikube:

    minikube status
    • Busca componentes como kubelet y apiserver listados como Running (En ejecución).
    • Si el clúster no está en ejecución, vuelve a ejecutar minikube start.

Si encuentras problemas al iniciar Minikube, utiliza minikube delete para restablecer el entorno si es necesario.

Ejecutar un pod con un job (trabajo)

El primer paso es crear un pod que ejecute un job. En este ejemplo, crearemos un pod que ejecute un comando para imprimir "Hello, World!" en la consola.

Crea un archivo llamado job.yaml en /home/labex/project/ con el siguiente contenido:

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

En este archivo, definimos un job llamado hello-job que ejecuta un solo contenedor llamado hello. El contenedor ejecuta la imagen busybox y ejecuta un comando para imprimir "Hello, World!" en la consola.

Para crear el job, ejecuta el siguiente comando:

kubectl apply -f job.yaml

Puedes comprobar el estado del job ejecutando el siguiente comando:

kubectl get jobs

Una vez que el job se haya completado, puedes ver los registros (logs) del pod ejecutando el siguiente comando:

kubectl logs <POD_NAME>

Reemplaza <POD_NAME> con el nombre del pod que ejecutó el job, y puedes obtener el POD_NAME con el comando kubectl get pods |grep hello-job.

¡Felicidades, has ejecutado con éxito un pod con un job en Kubernetes!

Ejecutar un job (trabajo) con múltiples pods

En algunos casos, es posible que necesites ejecutar un job con múltiples pods para obtener un mejor rendimiento. En este ejemplo, crearemos un job que ejecute múltiples pods para descargar archivos de un servidor remoto.

Crea un archivo llamado multi-pod-job.yaml en /home/labex/project/ con el siguiente contenido:

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

En este archivo, definimos un job llamado download-job que ejecuta múltiples pods con la imagen curlimages/curl. Cada pod descarga un archivo de http://example.com/file y lo guarda en un volumen compartido llamado data-volume.

Para crear el job, ejecuta el siguiente comando:

kubectl apply -f multi-pod-job.yaml

Puedes comprobar el estado del job ejecutando el siguiente comando:

kubectl get jobs

Una vez que el job se haya completado, puedes ver los registros (logs) del pod ejecutando el siguiente comando:

kubectl logs <POD_NAME>

Reemplaza <POD_NAME> con el nombre de cualquier pod que haya ejecutado el job. Puedes ver el registro de descarga del archivo, y puedes obtener el POD_NAME con el comando kubectl get pod |grep download-job.

¡Felicidades, has ejecutado con éxito un job con múltiples pods en Kubernetes!

Ejecutar un cronjob (trabajo programado)

Además de los jobs (trabajos) únicos, Kubernetes también admite los cronjobs para ejecutar tareas según una programación regular. En este ejemplo, crearemos un cronjob que ejecute un comando cada minuto.

Crea un archivo llamado cronjob.yaml en /home/labex/project/ con el siguiente contenido:

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

En este archivo, definimos un cronjob llamado hello-cronjob que ejecuta un comando cada minuto. El comando es el mismo que usamos en el primer ejemplo para imprimir "Hello, World!" en la consola.

Para crear el cronjob, ejecuta el siguiente comando:

kubectl apply -f cronjob.yaml

Puedes comprobar el estado del cronjob ejecutando el siguiente comando:

kubectl get cronjobs

Una vez que el cronjob esté en ejecución, puedes ver los registros (logs) del pod ejecutando el siguiente comando:

kubectl logs -f <POD_NAME>

Reemplaza <POD_NAME> con el nombre de cualquier pod que haya sido creado por el cronjob, y puedes obtener el POD_NAME con el comando kubectl get pod |grep hello-cronjob.

¡Felicidades, has ejecutado con éxito un cronjob en Kubernetes!

Resumen

En este laboratorio, aprendimos cómo ejecutar pods con jobs (trabajos) y cronjobs (trabajos programados) en Kubernetes. Comenzamos con un ejemplo sencillo de un pod que ejecuta un job y, gradualmente, avanzamos hacia ejemplos más complejos de jobs con múltiples pods y cronjobs que se ejecutan según una programación regular. Con este conocimiento, puedes ejecutar diversas tareas que no formen parte de una aplicación o servicio de ejecución prolongada en Kubernetes.