Meydan okuma - CronJob
- Docker & Kubernetes kursu
- İleri seviye
- Ders 68/70
- 5 dk
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.gzUygulama 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
# buraya yazÖrnek çözüm
spec:
schedule: "30 2 * * *"
timeZone: "Europe/Istanbul"
concurrencyPolicy: Forbid
jobTemplate:
spec:
backoffLimit: 1
activeDeadlineSeconds: 1800Beklenen çı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
# buraya yazÖrnek çözüm
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: /yedekBeklenen çı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.
spec:
schedule: "30 2 * * *"
timeZone: ____
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ı |