CronJobs
Desarrollo del tema
La presente guía aborda la creacion y uso del componente CronJob de Kubernetes.
Laboratorio: Jobs
Descripción
La presente guía aborda la creacion y uso del componente Job de Kubernetes.
Objetivos
- Crear un Job a partir de un archivo YAML
- Administrar un Job con sus diferentes operaciones
Antes de comenzar
- Contar con el acceso al ambiente de laboratorio
Conexión hacia cluster
-
Ingrese al cluster asignado con las credenciales proporcionadas
-
Obtenga el archivo kubeconfig posicionando sobre la carpeta a trabajar y cambiando su nombre a config
mv /path/to/kubeconfig ~/.kube/config -
Configure la variable
KUBECONFIGexport KUBECONFIG=~/.kube/config -
Verifique el acceso mediante comandos
kubectl get namespaces kubectl config set-context --current --namespace=userx
Inicio de laboratorio
-
Cree una carpeta llamado
jobsy ubíquese dentro de ellamkdir jobs ; cd jobs -
Cree un archivo llamado
job.yamlcon el siguiente contenido:1 2 3 4 5 6 7 8 9 10
apiVersion: batch/v1 kind: Job metadata: name: node-job namespace: userx spec: template: spec: restartPolicy: Never containers: -
Agregue al bloque de
containersla lista de nombrenode-jobcon la imagenalpiney el comandoechocon el mensajeStarting Node Application Job1 2 3 4 5 6 7 8 9 10 11 12 13
apiVersion: batch/v1 kind: Job metadata: name: node-job namespace: userx spec: template: spec: restartPolicy: Never containers: - name: node-job image: alpine command: ["/bin/sh", "-c", "echo [$(date)] Starting Node Application Job; sleep 30; echo [$(date)] Stopping Node Application Job"] -
Levante el recurso
kubectl apply -f job.yaml -
Revise los Jobs en el namespace
kubectl get jobs -
Obtenga la informacion del Job
kubectl describe job node-job -
Revise los pods
kubectl get pods -
Obtenga el log del pod
# Cambie nombre-pod por el nombre real kubectl logs nombre-pod -f -
Elimine el Job
kubectl delete -f job.yaml -
Agregue al archivo
job.yamlel campoparallelismenspec1 2 3 4 5 6 7 8 9 10 11 12 13 14
apiVersion: batch/v1 kind: Job metadata: name: node-job namespace: userx spec: parallelism: 2 template: spec: restartPolicy: Never containers: - name: node-job image: alpine command: ["/bin/sh", "-c", "echo [$(date)] Starting Node Application Job; sleep 30; echo [$(date)] Stopping Node Application Job"] -
Sincronize los cambios
kubectl apply -f job.yaml -
Revise los pods del namespaces
kubectl get pods -
Obtenga el log de uno de los pods
# Cambie nombre-pod por el nombre real kubectl logs nombre-pod -f -
Elimine el Job
kubectl delete -f job.yaml -
Edite el archivo
jobs.yamlagregando el campocompletionscon valor de 61 2 3 4 5 6 7 8 9 10 11 12 13 14 15
apiVersion: batch/v1 kind: Job metadata: name: node-job namespace: userx spec: completions: 6 parallelism: 2 template: spec: restartPolicy: Never containers: - name: node-job image: alpine command: ["/bin/sh", "-c", "echo [$(date)] Starting Node Application Job; sleep 30; echo [$(date)] Stopping Node Application Job"] -
Sincronize los cambios
kubectl apply -f job.yaml -
Revise los pods del namespace
kubectl get pods -
Obtenga el log de uno de los pods
# Cambie nombre-pod por el nombre real kubectl logs nombre-pod -f -
Espere que se terminen de crear los 6 pods en estado
Completedkubectl get pods -w ^Ctrl+C -
Elimine el Job
kubectl delete -f job.yaml -
Agregue el campo
ttlSecondsAfterFinishedenspec1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
apiVersion: batch/v1 kind: Job metadata: name: node-job namespace: userx spec: ttlSecondsAfterFinished: 60 completions: 6 parallelism: 2 template: spec: restartPolicy: Never containers: - name: node-job image: alpine command: ["/bin/sh", "-c", "echo [$(date)] Starting Node Application Job; sleep 30; echo [$(date)] Stopping Node Application Job"] -
Sincronize los cambios
kubectl apply -f job.yaml -
Revise los pods del namespace
kubectl get pods -
Obtenga el log de uno de los pods
# Cambie nombre-pod por el nombre real kubectl logs nombre-pod -f -
Espere que se completen todos los pods y despues de 60 segundos se marquen como
Terminatingkubectl get pods -w ^Ctrl+C kubectl get pods -
Limpie el ambiente
kubectl delete -f job.yaml
Laboratorio: CronJobs
Descripción
La presente guía aborda la creacion y uso del componente CronJob de Kubernetes.
Objetivos
- Crear un CronJob a partir de un archivo YAML
- Administrar un CronJob con sus diferentes operaciones
Antes de comenzar
- Contar con el acceso al ambiente de laboratorio
Inicio de laboratorio
-
Cree un archivo llamado
cronjob.yamlcon el siguiente contenido1 2 3 4 5 6 7 8 9 10 11 12 13
apiVersion: batch/v1 kind: CronJob metadata: name: node-cronjob namespace: userx spec: schedule: "* * * * *" jobTemplate: spec: template: spec: restartPolicy: Never containers: -
Cambie el valor de
schedulepor la expresion de cada 1 minuto (Cron Expressions Editor)1 2 3 4 5 6 7 8 9 10 11 12 13
apiVersion: batch/v1 kind: CronJob metadata: name: node-cronjob namespace: userx spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: restartPolicy: Never containers: -
Agregue el contenido de
containersdel Job anterior1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
apiVersion: batch/v1 kind: CronJob metadata: name: node-cronjob namespace: userx spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: restartPolicy: Never containers: - name: node-job image: alpine command: ["/bin/sh", "-c", "echo [$(date)] Starting Node Application Job; sleep 30; echo [$(date)] Stopping Node Application Job"] -
Levante el recurso
kubectl apply -f cronjob.yaml -
Revise los cronjobs en el namespace
kubectl get cronjobs -
Revise los jobs en el namespace (espere un minuto para que se genere el primer job)
kubectl get jobs -w ^Ctrl+C -
Revise los pods en el namespace
kubectl get pods -
Revise los logs del pod
# Cambie nombre-pod por el nombre real kubectl logs nombre-pod -f -
Agregue al
jobTemplatelos parametros originales del Job de la guia anterior1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
apiVersion: batch/v1 kind: CronJob metadata: name: node-cronjob namespace: userx spec: schedule: "*/1 * * * *" jobTemplate: spec: ttlSecondsAfterFinished: 60 completions: 6 parallelism: 2 template: spec: restartPolicy: Never containers: - name: node-job image: alpine command: ["/bin/sh", "-c", "echo [$(date)] Starting Node Application Job; sleep 30; echo [$(date)] Stopping Node Application Job"] -
Sincronize los cambios
kubectl apply -f cronjob.yaml -
Revise los jobs en el namespace
kubectl get jobs -w # Espere a revisar que se levanten nuevos jobs cada minuto ^Ctrl+C -
Revise los pods en el namespace
kubectl get pods -w # Espere a revisar que los ultimos Pods esten en Completed ^Ctrl+C -
Agregue los parametros
concurrencyPolicy: "Forbid"ysuccessfulJobsHistoryLimit: 1alspecdel CronJob1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
apiVersion: batch/v1 kind: CronJob metadata: name: node-cronjob namespace: userx spec: schedule: "*/1 * * * *" concurrencyPolicy: "Forbid" successfulJobsHistoryLimit: 1 jobTemplate: spec: ttlSecondsAfterFinished: 60 completions: 6 parallelism: 2 template: spec: restartPolicy: Never containers: - name: node-job image: alpine command: ["/bin/sh", "-c", "echo [$(date)] Starting Node Application Job; sleep 30; echo [$(date)] Stopping Node Application Job"] -
Sincronize los cambios
kubectl apply -f cronjob.yaml -
Revise los jobs en el namespace
kubectl get jobs -w # Espere a revisar que se levanten nuevos jobs cada minuto ^Ctrl+C -
Revise los pods en el namespace
kubectl get pods -w # Espere a revisar que los ultimos Pods esten en Completed ^Ctrl+C -
Limpie el ambiente
kubectl delete -f cronjob.yaml