El uso de Job y Cronjob en Kubernetes

Uso de Job y Cronjob

Aprendamos otro tipo de objeto de recurso hoy: Trabajo. En nuestro trabajo diario, a menudo encontramos algunos requisitos para el procesamiento y análisis de datos por lotes. Por supuesto, también habrá trabajo programado por tiempo. En nuestro grupo, para Proporcionamos Kubernetesy Jobdos CronJobrecursos objetos para satisfacer nuestras necesidades.

JobResponsable de las tareas de procesamiento, es decir, tareas que se ejecutan una sola vez, garantiza la Podfinalización exitosa de una o más de las tareas por lotes. En su lugar CronJob, Jobse le agrega programación de tiempo.

Trabajo

Usamos Jobeste objeto de recurso para crear una tarea, configuramos una Jobpara realizar una tarea de cuenta regresiva, definimos YAMLel archivo:

apiVersion: batch/v1
kind: Job
metadata:
  name: job-demo
spec:
  template:
    metadata:
      name: job-demo
    spec:
      restartPolicy: Never
      containers:
      - name: counter
        image: busybox
        command:
        - "bin/sh"
        - "-c"
        - "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"

Tenga en cuenta Jobque RestartPolicysolo soporte Nevery OnFailuredos, no soporte Always, sabemos Jobque es equivalente a ejecutar una tarea por lotes, y terminará después de la ejecución.Si es compatible, ¿ Alwayscaerá en un bucle infinito?

Luego, para crear esto Job, guárdelo como job-demo.yaml:

$ kubectl create -f ./job.yaml
job "job-demo" created

Entonces podemos ver el Jobobjeto de recurso actual:

$ kubectl get jobs

Presta atención a comprobar nuestro Podestado, ya través de ella también podemos kubectl logscomprobar los resultados de ejecución de la tarea actual.

CronJob

CronJobDe hecho, Jobla programación de tiempo se agrega sobre la base de que podemos: ejecutar una tarea en un momento dado, o ejecutarla periódicamente en un momento dado. Este es en realidad muy similar al Linuxque está entre nosotros.crontab

Un CronJobobjeto en realidad corresponde a crontabuna línea en el archivo, y se ejecuta periódicamente de acuerdo con el formato de tiempo configurado Job, y el formato crontabes el mismo.

crontabEl formato es el siguiente:

El comando que se ejecutará en el día, mes y semana de tiempo compartido.
La primera columna son los minutos 0~59, la segunda columna son las horas 0~
23), la tercera columna es el día 1~31 , la cuarta columna es el mes 1~12, y la quinta columna es 0~7 (0 y 7 representan el domingo) Comando de la columna 6 para ejecutar



Ahora, CronJobusamos para administrar nuestra Jobtarea anterior,

apiVersion: batch/v2alpha1
kind: CronJob
metadata:
  name: cronjob-demo
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
          - name: hello
            image: busybox
            args:
            - "bin/sh"
            - "-c"
            - "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"

KindEstamos aquí CronJob. Cabe señalar que .spec.scheduleel campo debe ser llenado. Se utiliza para especificar el ciclo de operación de la tarea. El formato es el mismo que el de y crontab. El otro campo se .spec.jobTemplateutiliza para especificar la tarea que se debe realizar. ejecutar Por supuesto, el formato Jobes consistente con eso. Hay algunos campos más que merecen nuestra atención .spec.successfulJobsHistoryLimity .spec.failedJobsHistoryLimit, que indica el límite del historial, es un campo opcional. Especifican cuántos completados y fallidos se pueden mantener Job, no hay límite por defecto, todos los exitosos y fallidos Jobse mantendrán. Sin embargo, muchos pueden acumularse rápidamente cuando se ejecuta uno Cron Job, por lo que generalmente se recomienda establecer los valores de estos dos campos. JobSi establece un límite con un valor de 0, el tipo asociado Jobno se conservará después de la finalización.

A continuación creamos estocronjob

$ kubectl create -f cronjob-demo.yaml
cronjob "cronjob-demo" created

Por supuesto, también se puede kubectl runutilizar para crear uno CronJob:

kubectl run hello --schedule="*/1 * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster"
$ kubectl get cronjob
NAME      SCHEDULE      SUSPEND   ACTIVE    LAST-SCHEDULE
hello     */1 * * * *   False     0         <none>
$ kubectl get jobs
NAME               DESIRED   SUCCESSFUL   AGE
hello-1202039034   1         1            49s
$ pods=$(kubectl get pods --selector=job-name=hello-1202039034 --output=jsonpath={
     
     .items..metadata.name} -a)
$ kubectl logs $pods
Mon Aug 29 21:34:09 UTC 2016
Hello from the Kubernetes cluster
$ kubectl delete cronjob hello
cronjob "hello" deleted

Una vez que ya no se necesita un trabajo cron, simplemente se puede eliminar con el comando kubectl:

$ kubectl delete cronjob hello
cronjob "hello" deleted

Esto terminará el trabajo que se está creando. Sin embargo, los trabajos en ejecución no se cancelarán y los trabajos o sus pods no se eliminarán. Para limpiar esos trabajos y pods, debe enumerar todos los trabajos creados por el trabajo cron y luego eliminarlos:

$ kubectl get jobs
NAME               DESIRED   SUCCESSFUL   AGE
hello-1201907962   1         1            11m
hello-1202039034   1         1            8m
...

$ kubectl delete jobs hello-1201907962 hello-1202039034 ...
job "hello-1201907962" deleted
job "hello-1202039034" deleted
...

Una vez que se elimine el Trabajo, los Pods creados por el Trabajo también se eliminarán. Tenga en cuenta que todos los trabajos creados por un trabajo cron llamado "hola" se nombrarán con la cadena de prefijo "hola-". Si desea eliminar todos los trabajos en el espacio de nombres actual, puede eliminarlos inmediatamente con el comando kubectl delete jobs --all.


Supongo que te gusta

Origin blog.csdn.net/u010674953/article/details/129376610
Recomendado
Clasificación