⏰ धडा 18 — Jobs आणि CronJobs: गृहपाठ आणि सकाळची घंटा
📍 तुम्ही इथे आहात: धडा 18 / 26 · मागील: lesson-17-rbac · पुढील: lesson-19-network-policies
📦 या ब्रँचमध्ये काय आहे
आधीचे सगळे, आणि server नसलेले काम: एकदाच चालणारे Jobs, वेळापत्रकानुसार चालणारे CronJobs — आणि एक खरी देणगी:
- k8s/backup-cronjob.yaml — मुख्य README ने वचन
दिलेला रात्रीचा
pg_dumpbackup, अखेर खरा (suspend: trueसह येतो, म्हणून तुम्हाला हवा होईपर्यंत तो apply करणे सुरक्षित आहे)
🧒 5 वर्षांच्या मुलाला समजावल्यासारखे
आत्तापर्यंत सगळी मुले दिवसभर आपल्या जागी उभी राहणारी होती (servers: Deployments त्यांना तिथे कायम ठेवतात). पण शाळेत आणखी दोन प्रकारचे काम असते:
- गृहपाठ 📝 (Job): काम करा, जमा करा, संपले. मुलाने चूक केली तर ते पुन्हा प्रयत्न करते (काही वेळा, मग शिक्षिका सोडून देते). पूर्ण झालेला गृहपाठ कोणी "restart" करत नाही — हाच तर मुद्दा आहे. Migrations, एकदाचे imports, batch crunching.
- सकाळची घंटा 🔔 (CronJob): दररोज पहाटे 2 वाजता घंटा वाजवा आणि त्या दिवसाचा गृहपाठ वाटा. CronJob स्वतः काहीच चालवत नाही — ठरलेल्या वेळी तो एक Job बनवतो, जो एक pod बनवतो, जो काम करून संपतो. Backups, reports, cleanups.
आपली घंटा: दर रात्री एक pod जन्माला येतो, database वर pg_dump चालवतो,
file संग्रहात पाठवतो, आणि मरतो. सुंदर, कंटाळवाणे, धडा 12 च्या "प्रत्येक
शाळेचे backups" गोष्टीला हवे होते तेच.
🗺️ आकृती
flowchart LR
cj["🔔 CronJob<br/>schedule: 0 2 * * *<br/>(every night, 2 AM)"]
j["📝 Job<br/>tonight's homework<br/>retries: backoffLimit 2"]
p["🪑 pod<br/>pg_dump → upload<br/>then EXITS 0"]
done["✅ Completed<br/>kept for inspection,<br/>then tidied by history limits"]
cj -->|"1 on schedule, creates"| j -->|"2 creates"| p -->|"3 finishes"| done
❓ काय
- Job ची बटणे:
backoffLimit(हार मानण्याआधी किती retries),completions/parallelism(गृहपाठाचे N भाग, एकावेळी M मुले),activeDeadlineSeconds(पेन्सिली खाली!), आणि podsrestartPolicy: Never/OnFailureवापरतात —Alwaysकधीच नाही (गृहपाठ संपू दिलाच पाहिजे; त्यामुळेच तो server नसतो). - CronJob ची बटणे:
schedule(cron syntax —0 2 * * *= दररोज 02:00),concurrencyPolicy: Forbid(कालचा अजून चालू असेल तर आजचा सुरू करू नका!),startingDeadlineSeconds,successfulJobsHistoryLimit/failedJobsHistoryLimit(सफाई कामगार 🧹),suspend: true(घंटेचा off-switch — आपला default, म्हणजे तुम्ही सुरक्षितपणे apply करू शकता). - Timezone:
timeZone: "Asia/Kolkata"— नाहीतर cluster चे घड्याळ. - Debugging म्हणजे जसाच्या तसा धडा 16:
kubectl get jobs, मग pod चे logs; अपयशी Job आपले pods तपासणीसाठी मागे ठेवतो.
🤔 का
CronJobs शिवाय, ठरलेले काम कोणाच्या तरी VM च्या crontab मध्ये राहते जे कोणालाच आठवत नाही (drift! ArgoCD कोर्सचा धडा 02 नमस्कार म्हणतो) — किंवा त्याहून वाईट, एका pod वर app च्याच आत ("cleanup कोणती replica चालवते?" — 2 replicas असतील तर दोन्ही, दोनदा 😱). Manifest म्हणून, backup versioned, reviewed, स्वतः बरा होणारा, आणि सगळ्यांना दिसणारा असतो — बाकी सगळ्यासारखाच GitOps-योग्य.
🧪 करून पाहा
# homework: one Job, watch it complete
kubectl -n school create job hello-hw --image=busybox -- sh -c 'echo homework done; sleep 2'
kubectl -n school get jobs,pods | grep hello
kubectl -n school logs job/hello-hw # "homework done"
# the bell, sped up — every minute, so you can watch:
kubectl -n school create cronjob tick --image=busybox --schedule="*/1 * * * *" \
-- sh -c 'date; echo the bell rang'
kubectl -n school get jobs -w # a new Job appears each minute; Ctrl+C
kubectl -n school delete cronjob tick && kubectl -n school delete job hello-hw
# the REAL one — read it, then apply (safe: suspended):
kubectl apply -f k8s/backup-cronjob.yaml
kubectl -n school get cronjob school-db-backup # SUSPEND: True
# when you have a real DB: flip suspend to false, or fire one manually:
kubectl -n school create job backup-now --from=cronjob/school-db-backup
🔧 या धड्यासाठी kubectl
kubectl get cronjob,job · kubectl create job --from=
🔗 यावर आधारित: 🪪 AWS L14 (S3 backups) · L19 (घंटा → Lambda)
✅ तपासा — तुम्हाला काय दिसले पाहिजे
kubectl create job --from=cronjob/school-db-backup now → job चा pod pg_dump चालवतो, upload करतो, आणि Completed दाखवतो.
🧹 साफसफाई
kubectl delete job now; CronJob ठेवा (खात्री नसेल तर suspend: true)
⚠️ नेहमीच्या चुका
backoffLimitनसलेला Job कायम retry करत राहतो- ज्यातून कोणीच कधी restore केले नाही असा backup CronJob — restore तपासा (AWS L17)
⏭️ पुढे
सध्या प्रत्येक pod प्रत्येक दुसऱ्या pod शी कुजबुजू शकतो — database शीसुद्धा. चिठ्ठ्या पाठवण्याच्या नियमांची वेळ: NetworkPolicies.
git checkout lesson-19-network-policies