Kubernetes implementa cronjob para ejecutar scripts de shell regularmente

Kubernetes implementa cronjob para ejecutar scripts de shell regularmente

El cronjob de Kubernetes ejecuta regularmente el rol de los scripts de shell

Muchos tutoriales existentes solo explican cómo ejecutar regularmente un comando a través de cronjob, pero en el proceso de producción real de usar cronjob, especialmente cuando es necesario ejecutar una gran cantidad de comandos de shell, a menudo no puede cumplir con los requisitos. Al ejecutar un script de shell asociado con configmap, puede ajustar de manera flexible los comandos en el script de shell y satisfacer cronjob para ejecutar comandos de shell más complejos.

Un CronJob que ejecuta periódicamente un script de shell en Kubernetes tiene muchos usos, como:

  • Mantenimiento regular: CronJob se puede configurar para realizar ciertas tareas de mantenimiento de forma regular, como limpiar archivos de registro antiguos, actualizar bases de datos, mantener índices, etc.
  • Respaldo y recuperación de datos: puede crear un CronJob para respaldar periódicamente la base de datos o el sistema de archivos y realizar operaciones de recuperación si es necesario.
  • Procesamiento periódico de datos: si su sistema necesita procesar datos regularmente (por ejemplo, todas las noches), puede crear un CronJob para procesar estas tareas.
  • Monitoreo e informes: CronJob puede realizar periódicamente tareas de monitoreo, como verificar el estado del sistema o generar informes.
  • Escalado y escalado automáticos: puede crear CronJobs que aumentan o reducen automáticamente la cantidad de pods en ejecución según sea necesario en función de la carga prevista del sistema.
  • CronJob: CronJob también se puede usar para ejecutar cualquier tarea que desee ejecutar en un momento específico.

1. Proceso de implementación

1.1 Definir mapa de configuración

cat <<EOF >  script-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: script-configmap  
data: #shell 脚本的命令,可以根据实际情况创建更复杂的命令
  myscript.sh: |
    #!/bin/bash
    echo "Hello, Kubernetes!"
EOF

1.2 Definir cronjob

cat <<EOF >  my-cronjob.yaml
apiVersion: batch/v1  #kubernetes 1.21版本后请使用batch/v1,1.21前使用batch/v1beta1
kind: CronJob
metadata:
  name: my-cronjob
spec:
  schedule: "*/1 * * * *" #每分钟执行一次
  concurrencyPolicy: Allow #并发策略,允许并发运行
  jobTemplate:
    spec:
      template:
        spec:
          volumes:
            - name: script-volume
              configMap:
                name: script-configmap
          containers:
            - name: my-container
              image: centos
              volumeMounts:
                - name: script-volume
                  mountPath: /scripts
              command: ["/bin/bash", "/scripts/myscript.sh"]
          restartPolicy: OnFailure
EOF

Parámetros de API comúnmente configurados para cronjob:

  • spec.schedule: programación, campo obligatorio, especifica el ciclo de ejecución de la tarea, el formato es el mismo que Cron
  • spec.jobTemplate: Plantilla de trabajo, campo obligatorio, especifica la tarea a ejecutar, el formato es el mismo que Trabajo
  • spec.startingDeadlineSeconds: la fecha límite para iniciar el trabajo (en segundos), este campo es opcional. Si se pierde el tiempo programado por algún motivo, se considerará que el trabajo que no cumplió con el tiempo de ejecución ha fallado. Si no se especifica, no hay fecha límite
  • spec.concurrencyPolicy: política de concurrencia, este campo también es opcional. Especifica cómo manejar la ejecución simultánea de trabajos creados por Cron Job. Solo se permite especificar una de las siguientes políticas:
    a. Permitir (predeterminado): Permitir la ejecución simultánea de trabajos
    b. Prohibir: Prohibir la ejecución simultánea, si la anterior no se ha completado, omitir la siguiente directamente
    c. Reemplazar: Cancele el trabajo actual en ejecución, reemplácelo por uno nuevo

Tenga en cuenta que la política actual solo se puede aplicar a trabajos creados por el mismo trabajo cron. Si hay varios trabajos cron, los trabajos que crean siempre pueden ejecutarse simultáneamente.

  • spec.suspend : suspender, este campo también es opcional. Si se establece en verdadero, se suspenderán todas las ejecuciones posteriores. No tiene efecto en los trabajos que ya han comenzado a ejecutarse. El valor por defecto es falso
  • spec.successfulJobsHistoryLimit y .spec.failedJobsHistoryLimit: límite de historial, es un campo opcional. Especifican cuántos trabajos completados y fallidos se pueden conservar

1.3 Comprobar si el cronjob se está ejecutando correctamente

#查看cronjob状态
kubectl get cronjob
NAME         SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
my-cronjob   */5 * * * *   False     2        19s             23m

#查看job状态
kubectl get jobs
NAME                  COMPLETIONS   DURATION   AGE
my-cronjob-28096067   1/1           34s        3m38s
my-cronjob-28096068   1/1           34s        2m38s
my-cronjob-28096069   1/1           34s        98s

#查看pod状态
kubectl get po
NAME                        READY   STATUS      RESTARTS   AGE
my-cronjob-28096067-qxtqg   0/1     Completed   0          5m54s
my-cronjob-28096068-7scqd   0/1     Completed   0          4m54s
my-cronjob-28096069-gtlzg   0/1     Completed   0          3m54s

Supongo que te gusta

Origin blog.csdn.net/weixin_46660849/article/details/131019740
Recomendado
Clasificación