ใช้งาน CronJob และ Job ใน Kubernetes สำหรับงาน Batch และ Scheduled Tasks

ค่าบทบคอนเท่ย 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:00
  • 0 */4 * * * – ทุก 4 ชั่วโมง
  • 0 0 * * 1 – ทุกวันจันทร์ เวลา 00:00
  • 0 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 ของท่านค่อยนืนปล่อย