ค่าบทบคอนเท่ย Kubernetes กับ Batch Processing
Kubernetes มีเครื่องมือสำคัญสำหรับการจัดการงาน Batch Processing และ Scheduled Tasks ผ่าน Job และ CronJob ซึ่งพื้นฐานในการดำเนินงานที่ต้องทำเป็นครั้งเดียวหรือตามตารางเวลา บทความนี้จะอธิบายวิธีใช้งาน Job และ CronJob อย่างละเอียด พร้อมตัวอย่างใช้งงานจริง
Job vs Deployment ใน Kubernetes
ก่อนเข้าใจเพึ่ดปูล ต้องเข้าใจกจกดาหง่าปลาย Job และ Deployment:
- Deployment: ออกแบบสำหรับ long-running applications (เว็บแอบพลิเคชัน API เซิร์ฟเชอร์) ที่ต้องทำงานตลอดเวลา
- Job: ใช้สำหรับงานที่ต้องทำเสร็จและจบ (completion-based) เช่น backup ข้อมูล หรือ batch processing แช่น Data ทดสตบข้อมูล
Kubernetes Job คืออะไร?
Job ใน Kubernetes เป็น workload object ที่รับผิดชอบตองจักสวิคริบต์หรือแแปไซช้นจนคำสั่งจาบยัง exit code 0 Job กล่าว Pod เพื่อรันงาน และรอแถวตไรใหม่ Pod สิ้นสุดลงไวซก้าว
ตัวอย่าง Job YAML พื้นฐาน
apiVersion: batch/v1
kind: Job
metadata:
name: batch-job-example
spec:
template:
spec:
containers:
- name: batch-worker
image: myapp:v1
command: ["python", "/app/process_data.py"]
restartPolicy: Never
backoffLimit: 3
ttlSecondsAfterFinished: 3600
คำอิณอย่างแค่นชสัค:
- template: Pod template ที่ Job จะใช้สร้าง Pod
- restartPolicy: ต้องเป็น
NeverหรือOnFailure(ห้ามAlways) - backoffLimit: จำนวนครั้งสูงสุดที่จะลองรันใหม่ (default: 6)
- ttlSecondsAfterFinished: คุณลบ Job หลังจากแลว (cleanup)
Job Patterns – การรัน Parallel Jobs
ตัวอย่างนี้ผลิตผลตอเสิสเวลาหลาย Pod:
apiVersion: batch/v1
kind: Job
metadata:
name: parallel-job
spec:
completions: 10
parallelism: 3
template:
spec:
containers:
- name: worker
image: myapp:v1
restartPolicy: OnFailure
- completions: 10 – ต้องให้ 10 Pod เสร็จ
- parallelism: 3 – รัน 3 Pod พร้อมกันในเวลาเดียว
CronJob ใน Kubernetes คืออะไร?
CronJob คือการจัดตารางเวลา Job เพื่อรันตามช่วงเวลาที่กำหนด เช่น ทุกวัน ทุกชั่วโมง เป็นต้น โครงสร้าง CronJob ใช้ Cron syntax เหมือนใน Linux
apiVersion: batch/v1
kind: CronJob
metadata:
name: daily-backup
spec:
schedule: "0 2 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: backup-job
image: backup-tool:v1
command: ["bash", "/scripts/backup.sh"]
restartPolicy: OnFailure
Cron Schedule Format: minute hour day month dayofweek
0 2 * * *– ทุกวันเวลา 02:000 */4 * * *– ทุก 4 ชั่วโมง0 0 * * 1– ทุกวันจันทร์ เวลา 00:000 0 1 * *– วันแรกของเดือน เวลา 00:00
วิธีสร้าง Job ด้วยคำสั่ง kubectl
สร้าง Job จาก YAML file:
kubectl apply -f job.yaml
kubectl get jobs
kubectl describe job batch-job-example
kubectl logs -l job-name=batch-job-example
วิธีสร้าง CronJob ด้วยคำสั่ง kubectl
สร้าง CronJob จาก YAML file:
kubectl apply -f cronjob.yaml
kubectl get cronjob
kubectl describe cronjob daily-backup
kubectl get jobs -l cronjob-name=daily-backup
Best Practices สำหรับ Job และ CronJob
- ตั้ง Resource Limits: จำกัด CPU และ Memory เพื่อป้องกัน resource starvation
- ใช้ ttlSecondsAfterFinished: ลบ Job เดิมโดยอัตโนมัติ
- Logging: ใช้ kubectl logs เพื่อตรวจสอบผลการรัน
- Error Handling: ตั้ง backoffLimit เพื่อหลีกเลี่ยง infinite retry
- Concurrency Policy: ตั้ง concurrencyPolicy ใน CronJob เพื่อจัดการการทับซ้อน
สรุป
Job และ CronJob เป็นเครื่องมือที่สำคัญสำหรับการจัดการงาน Batch Processing และ Scheduled Tasks ใน Kubernetes ด้วยการออกแบบอย่างถูกต้องและ Best Practices ท่านจะสามารถจัดการงาน Batch ได้อย่างมีประสิทธิภาพและเชื่อถือได้ บันทึกให้แน่ใจว่าตั้งค่า Resource Limits และ ttlSecondsAfterFinished เพื่อทำให้ Cluster ของท่านค่อยนืนปล่อย
