Skip to content

Cum să rulezi job-uri și CronJob-uri în Kubernetes

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Cum să rulezi job. We cover key concepts, practical examples, and best practices.

Problema

Ai nevoie să rulezi sarcini temporare (migrări de bază de date, procesări batch, backup-uri) care trebuie să se execute o singură dată sau la intervale regulate.

Soluția Pas cu Pas

1. Creează un Job simplu

apiVersion: batch/v1
kind: Job
metadata:
  name: hello-job
spec:
  template:
    spec:
      containers:
      - name: hello
        image: busybox
        command: ["echo", "Hello from Kubernetes Job"]
      restartPolicy: Never
kubectl apply -f job.yaml

Output:

job.batch/hello-job created

2. Verifică starea Job-ului

kubectl get jobs

Output:

NAME        COMPLETIONS   DURATION   AGE
hello-job   1/1           3s         10s

3. Vezi log-urile Job-ului

kubectl logs job/hello-job

Output:

Hello from Kubernetes Job

4. Job cu paralelism

apiVersion: batch/v1
kind: Job
metadata:
  name: parallel-job
spec:
  completions: 6
  parallelism: 2
  template:
    spec:
      containers:
      - name: worker
        image: busybox
        command: ["sh", "-c", "echo 'Working...' && sleep 5"]
      restartPolicy: Never

5. Creează un CronJob

apiVersion: batch/v1
kind: CronJob
metadata:
  name: backup-job
spec:
  schedule: "0 2 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: backup
            image: busybox
            command: ["sh", "-c", "echo 'Running backup at $(date)'"]
          restartPolicy: Never
kubectl apply -f cronjob.yaml

Output:

cronjob.batch/backup-job created

6. Verifică CronJob-urile

kubectl get cronjobs

Output:

NAME         SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
backup-job   0 2 * * *     False     0        <none>          10s

7. Suspendă un CronJob

kubectl patch cronjob backup-job -p '{"spec":{"suspend":true}}'

Prevenție

  • Setează backoffLimit pentru a controla numărul de reîncercări la eșec.
  • Setează ttlSecondsAfterFinished pentru a șterge automat Job-urile completate.
  • Folosește startingDeadlineSeconds pentru a preveni omiterea execuțiilor.
  • Pentru CronJob-uri importante, setează concurrencyPolicy: Forbid pentru a preveni execuțiile concurente.

Greșeli Comune

  1. Fără restartPolicy: Never sau OnFailure — Job-ul nu pornește cu Always.
  2. Job-uri care nu se termină — Fără activeDeadlineSeconds, un Job poate rula la infinit.
  3. CronJob cu timezone greșit — Kubernetes folosește UTC implicit.
  4. Job-uri orfane — Fără ttlSecondsAfterFinished, Pod-urile rămân după completare.
  5. ConcurrencyPolicy greșitAllow (implicit) poate duce la execuții suprapuse.

Exercițiu

Creează un CronJob care rulează la fiecare 5 minute, execută un script care scrie data curentă într-un fișier pe un volum PVC, și verifică că Job-urile se creează la schedule.

FAQ

### Ce diferență este între Job și CronJob?

Un Job execută o sarcină o singură dată. Un CronJob programează Job-uri să ruleze în mod repetat pe baza unui program cron.

Cum șterg un CronJob fără a șterge Job-urile deja create?

Folosește kubectl delete cronjob <nume> --cascade=orphan. Job-urile existente rămân, dar nu se mai creează altele noi.

Cum afișez istoricul execuțiilor unui CronJob?

Folosește kubectl get jobs --selector=job-name=<cronjob-name> sau kubectl describe cronjob <nume>.

Construit de dezvoltatorii Doda Browser, DodaZIP și Durga Antivirus Pro. Uneltele DodaTech se integrează seamless cu Kubernetes pentru productivitate și securitate sporite.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro