CodeBlanks Logo Icon CodeBlanks

Meydan okuma - CronJob

Günlük çalışan bir CronJob yazarsın.

Meydan okuma: güvenli zamanlanmış yedek

Veritabanının her gece yedeğini alan bir CronJob yazacaksın. Gereksinimler:

  • Her gün 02:30 (İstanbul saati)
  • Önceki yedek bitmediyse yenisi başlamasın
  • En fazla 2 deneme, en fazla 30 dakika
  • Yedek bir PVC'ye yazılsın; parola Secret'tan gelsin
pg_dump -h db -U app app | gzip > /yedek/app-$(date +%F).sql.gz

Uygulama CronJob'un üst kısmı

Bir CronJob'un spec bölümünün üst kısmını yaz (spec: ile başlayarak): schedule: "30 2 * * *", timeZone: "Europe/Istanbul", concurrencyPolicy: Forbid; jobTemplate.spec altında backoffLimit: 1 ve activeDeadlineSeconds: 1800.

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
spec:
  schedule: "30 2 * * *"
  timeZone: "Europe/Istanbul"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      backoffLimit: 1
      activeDeadlineSeconds: 1800

Beklenen çıktı

cronjob.batch/gece-yedek configured

Uygulama Yedek pod şablonu

Aynı CronJob'un pod şablonu spec bölümünü yaz (spec: ile başlayarak): restartPolicy: OnFailure; yedek volume'ü yedekler PVC'sinden; container adı yedek, image postgres:16; PGPASSWORD değişkeni db-gizli Secret'ının POSTGRES_PASSWORD anahtarından; yedek'i /yedek'e bağla.

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
spec:
  restartPolicy: OnFailure
  volumes:
    - name: yedek
      persistentVolumeClaim:
        claimName: yedekler
  containers:
    - name: yedek
      image: postgres:16
      env:
        - name: PGPASSWORD
          valueFrom:
            secretKeyRef:
              name: db-gizli
              key: POSTGRES_PASSWORD
      volumeMounts:
        - name: yedek
          mountPath: /yedek

Beklenen çıktı

$ kubectl create job yedek-elle --from=cronjob/gece-yedek
job.batch/yedek-elle created
$ kubectl logs job/yedek-elle
pg_dump: tamamlandı (12.4 MB)

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir yedeğin başarısız olduğunu fark etmenin en güvenilir yolu nedir?

  • CronJob'u silmek
  • Job'un başarısız durumuna ya da son başarı zamanına uyarı kurmak Doğru cevap
  • Her sabah log'lara elle bakmak
  • Hiçbir şey yapmamak

Açıklama: kube_cronjob_status_last_successful_time ölçümü buna uygundur.

2 Takvimin saat dilimini İstanbul yap.

Soru
spec:
  schedule: "30 2 * * *"
  timeZone: ____
Cevap
spec:
  schedule: "30 2 * * *"
  timeZone: "Europe/Istanbul"

Açıklama: IANA saat dilimi adı kullanılır.

3 Eşleştir.

Kavram Anlamı
"30 2 * * *" Her gün 02:30
Forbid Çakışmayı önle
backoffLimit: 1 En fazla 2 deneme
activeDeadlineSeconds: 1800 30 dakika sınırı

İleri seviye bölümündeki tüm dersler