¿Qué vamos a ver?

What You'll Learn

Basado en la documentación oficial de K8s (licencia CC-BY-4.0).

  1. Accede a console.cloud.google.com
  2. Loguéate con tu cuenta de usuario elegida para el curso.
  3. Una vez ya en la consola, en la esquina superior izquierda busca un desplegable con 3 hexágonos pequeños para seleccionar tu proyecto.
  4. Ábrelo y selecciona tu proyecto asignado. Puedes tener que hacer click en el desplegable de organizaciones y cambiar a Sin organización.
  5. Te recomendamos dividir el escritorio horizontalmente en dos ventanas, una con la consola y/o Cloud Shell y otra con las instrucciones.
  6. Activa Cloud Shell en el icono de la parte superior derecha >_.
  7. Puedes configurar la completación de comandos para kubectl con la tecla "TAB":
    source <(kubectl completion bash)
    
    Comprueba que funciona escribiendo kubectl y presionando la tecla "TAB" 2 veces.

Crea un namespace

Crea un namespace para aislar los recursos de este ejercicio del resto de recursos en tu clúster:

kubectl create namespace lab-jobs-cronjobs

Vamos a desplegar un Job con una tarea contenerizada determinada.

  1. Crea el archivo jobs/demo-job.yaml con este manifiesto:
    apiVersion: batch/v1
    kind: Job
    metadata:
    name: demo-job
    spec:
    template:
    metadata:
      name: demo-job
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl"]
        args: ["-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
    
  2. Crea el Job:
    kubectl apply -f jobs/demo-job.yaml -n lab-jobs-cronjobs
    
  3. Verifica que los Pods están ejecutándose:
    kubectl get pods -n lab-jobs-cronjobs
    
  4. Espera unos segundos y comprueba como el estado cambia a Completed cuando el Job finaliza su ejecución:
    kubectl get pods -n lab-jobs-cronjobs -w
    
    Cancela el comando "watch" con CTRL + C.
  5. Verifica los detalles del Job y su estado:
    kubectl describe jobs demo-job -n lab-jobs-cronjobs
    
    Cuando el Job acaba, el controlador elimina los Pods creados, pero no elimina el objeto Job, para poder comprobar sus logs y estado.
  6. Encuentra el nombre del Pod creado por el Job y apúntalo, [NOMBRE_POD]:
    kubectl get pods -n lab-jobs-cronjobs
    
  7. Recupera los logs del Job:
    kubectl logs [NOMBRE_POD] -n lab-jobs-cronjobs
    

Vamos a desplegar un CronJob con una tarea cron contenerizada determinada.

  1. Crea el archivo jobs/demo-cronjob.yaml con este manifiesto:
    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
    name: demo-cronjob
    spec:
    schedule: "*/1 * * * *"
    jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello-world
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo "Hello world from a CronJob!"
          restartPolicy: OnFailure
    
  2. Crea el CronJob:
    kubectl apply -f jobs/demo-cronjob.yaml -n lab-jobs-cronjobs
    
  3. Verifica que el CronJob ha sido creado correctamente:
    kubectl get jobs -n lab-jobs-cronjobs
    
  4. Verifica los detalles del CronJob y su estado:
    kubectl describe jobs demo-cronjob -n lab-jobs-cronjobs
    
    Al desplegarse, el CronJob crea un Pod para ejecutar su tarea cron. Encuentra el nombre del Pod creado en el anterior comando y apúntalo, [NOMBRE_POD]
  5. Recupera los logs del Pod creado por el CronJob:
    kubectl logs [NOMBRE_POD] -n lab-jobs-cronjobs
    

Eliminar los recursos usados

Elimina el namespace, lo cual eliminará todos los recursos:

kubectl delete namespace lab-jobs-cronjobs

En esta práctica hemos visto cómo:

What we've covered