วิถีสร้างและจัดการ Kubernetes CronJobs ด้วยตัวอย่าง YAML

Kubernetes CronJob ช่วยให้คุณสามารถกำหนดตารางการทำงานต่างๆ ในคลัสเตอร์ของคุณได้ เช่น การสำรองข้อมูลหรือการสร้างรายงาน บทความนี้อธิบายพื้นฐานและคุณสมบัติขั้นสูงของ CronJobs พร้อมตัวอย่าง YAML ที่เข้าใจง่าย เพื่อให้คุณสามารถทำให้งานประจำเป็นไปโดยอัตโนมัติได้อย่างสะดวก

download-icon
ดาวน์โหลดฟรี
สำหรับ VM, OS, DB, ไฟล์, NAS, ฯลฯ
sea-kantapohn

Updated by ซี กันตภณ on 2026/01/20

สารบัญ
  • Kubernetes CronJob คืออะไร?

  • ตัวอย่างพื้นฐานของ Kubernetes CronJob

  • ตัวอย่าง Kubernetes CronJob ขั้นสูง

  • ทำไมควรใช้ Kubernetes CronJobs?

  • การปกป้องระดับองค์กรสำหรับ Kubernetes ด้วย Vinchin Backup & Recovery

  • ตัวอย่างคำถามที่พบบ่อยเกี่ยวกับ Kubernetes CronJob

  • บทสรุป

ระบบอัตโนมัติช่วยให้การทำงานของไอทีในยุคปัจจุบันดำเนินไปอย่างราบรื่น ใน Kubernetes CronJobs ช่วยให้คุณสามารถกำหนดเวลาในการรันงานต่างๆ ได้ตามเวลาหรือช่วงเวลาที่กำหนด คล้ายกับ cron แบบคลาสสิกของ Unix แต่ถูกออกแบบมาเพื่อคอนเทนเนอร์โดยเฉพาะ ไม่ว่าคุณต้องการสำรองข้อมูล ล้างไฟล์ล็อก หรือส่งรายงานตามรอบเวลาที่กำหนด Kubernetes CronJobs ก็สามารถช่วยคุณได้ คู่มือนี้จะนำคุณผ่านตัวอย่างการใช้งาน kubernetes cronjob ตั้งแต่พื้นฐานไปจนถึงระดับสูง เพื่อให้คุณสามารถทำให้งานต่างๆ เป็นระบบอัตโนมัติได้อย่างมั่นใจ

Kubernetes CronJob คืออะไร?

คิวเบอร์เนติสครอนจ็อบคือทรัพยากรที่ใช้กำหนดตารางงานในคลัสเตอร์ของคุณโดยใช้กฎตามเวลา มันทำงานคล้ายกับยูทิลิตี้ cron ที่คุ้นเคยในลินุกซ์ แต่จะรันอยู่ภายในคลัสเตอร์ของคุณแทนที่จะรันบนเซิร์ฟเวอร์เพียงเครื่องเดียว เมื่อมีการเรียกใช้งาน มันจะสร้างอ็อบเจกต์งาน (Job objects) ที่เปิดตัวพอด (Pods) เพื่อดำเนินงานที่คุณกำหนดไว้

ตัวควบคุม CronJob จัดการกระบวนการนี้ไว้เบื้องหลัง โดยจะตรวจสอบกำหนดเวลาทุกๆ หนึ่งนาที และเริ่มต้นงานเมื่อจำเป็น หากเกิดข้อผิดพลาด เช่น การหยุดทำงานของเพอด์ ตัวควบคุมจะทำการลองใหม่อีกครั้งตามการตั้งค่าของคุณ สิ่งนี้ทำให้ CronJob มีความน่าเชื่อถือในการดำเนินการงานตามปกติโดยอัตโนมัติในสภาพแวดล้อมแบบกระจาย

การจัดกำหนดการทํางานอย่างไร?

คูเบอร์เนติสใช้รูปแบบครอนมาตรฐานในฟิลด์ schedule

หมายถึงทุกนาที  0 0   หมายถึงเที่ยงคืนทุกวัน รูปแบบอื่น ๆ เป็นไปตาม กฎ cron เวลาทั้งหมดใช้ UTC เว้นแต่คุณจะระบุเป็นอย่างอื่น

ตัวอย่างพื้นฐานของ Kubernetes CronJob

มาเริ่มต้นอย่างง่ายด้วยตัวอย่าง kubernetes cronjob ที่แสดงวันที่และข้อความทักทายทุกหนึ่งนาที ซึ่งเป็นวิธีที่ดีในการทดสอบพื้นฐานของการกำหนดเวลา ก่อนจะไปยังขั้นตอนถัดไป

ขั้นตอนแรก ให้สร้างไฟล์ชื่อ cronjob.yaml:


apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox:1.36
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure


สิ่งที่สำคัญที่สุดคือ:

  • กำหนดเวลา: " *" ทำงานทุกหนึ่งนาที (ช่องทั้งหมดคือ นาที/ชั่วโมง/วัน/เดือน/สัปดาห์)

  • image: ใช้ BusyBox เวอร์ชัน 1.36 ซึ่งเป็นสภาพแวดล้อมเชลล์ที่มีขนาดเล็ก

  • command: พิมพ์วันที่แล้วตามด้วยข้อความ

  • restartPolicy: เริ่มต้นใหม่เฉพาะเมื่อเกิดข้อผิดพลาดเท่านั้น

การใช้งาน CronJob ครั้งแรกของคุณ

เพื่อใช้งานตัวอย่าง cronjob ของ kubernetes นี้:

1. รัน kubectl apply -f cronjob.yaml

2. ยืนยันการสร้างด้วย kubectl get cronjob hello

3. ดูงานที่ปรากฏโดยใช้ kubectl get jobs --watch

หลังจากประมาณหนึ่งนาที คุณจะเห็นทรัพยากรงานใหม่ที่ถูกสร้างขึ้นโดยอัตโนมัติจาก CronJob ของคุณ

การตรวจสอบผลลัพธ์

ต้องการหลักฐานยืนยันว่าทำงานสำเร็จหรือไม่? ให้ตรวจสอบว่า Pod ใดเป็นผู้รันงานของคุณ:

1. แสดงรายการพ็อดด้วย kubectl get pods --selector=job-name=hello-*

2. เลือกชื่อโพดที่แสดงล่าสุด

3. ดูบันทึกโดยใช้ kubectl logs <pod-name>

คุณควรเห็นผลลัพธ์ดังนี้:

Fri Feb 22 11:02:09 UTC 2019
Hello from the Kubernetes cluster

หากยังไม่มีอะไรปรากฏขึ้น กรุณารออีกประมาณหนึ่งนาที กำหนดเวลาอาจยังไม่ถูกเรียกใช้งาน

การทำความสะอาด

เมื่อทดสอบเสร็จแล้ว

รัน kubectl delete cronjob hello

สิ่งนี้จะลบคำจำกัดความของ CronJob รวมถึงงานหรือพ็อดใด ๆ ที่มันสร้างขึ้น

ตัวอย่าง Kubernetes CronJob ขั้นสูง

เมื่อคุณคุ้นเคยกับพื้นฐานแล้ว มาลองดูตัวอย่าง kubernetes cronjob ขั้นสูงที่เพิ่มฟีเจอร์สำหรับการใช้งานจริง—เช่น การป้องกันไม่ให้การรันงานทับซ้อนกัน และการจัดเก็บประวัติงานให้เป็นระเบียบ

สมมติว่าคุณต้องการสำรองข้อมูลทุกคืนเวลาเที่ยงคืน แต่ไม่อนุญาตให้มีการสำรองข้อมูลสองครั้งพร้อมกัน และเก็บเฉพาะผลลัพธ์ล่าสุดเพื่อตรวจสอบได้ง่าย

นี่คือวิธีการ:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: daily-backup
spec:
  schedule: "0 0 * * *"
  concurrencyPolicy: Forbid
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 1
# Uncomment below line if using K8s v1.24+ and need local timezone support!
# timeZone: "America/New_York"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: backup
            image: alpine:3.18 # Use stable tag for reproducibility!
            command:
            - /bin/sh
            - -c 
            - echo "Starting daily backup at $(date)"; sleep 10; echo "Backup finished at $(date)"
            resources:
              requests:
                memory: "64Mi"
              limits:
                memory: "128Mi"
          restartPolicy: OnFailure

จุดสำคัญที่อธิบาย:

  • กำหนดเวลา: "0 0 *" หมายถึงเที่ยงคืนตามเวลามาตรฐานสากลทุกวัน

  • concurrencyPolicy: ตั้งค่าเป็น Forbid เพื่อป้องกันไม่ให้งานสำรองข้อมูลของคืนนี้เริ่มทำงานจนกว่างานสำรองข้อมูลเมื่อวานจะเสร็จสิ้น (เพื่อป้องกันการทับซ้อน)

  • successfulJobsHistoryLimit/failedJobsHistoryLimit: เก็บรักษาไว้เพียงสามผลลัพธ์สุดท้ายที่สำเร็จและผลลัพธ์สุดท้ายที่ล้มเหลว เพื่อการแก้ไขปัญหาได้ง่ายขึ้นโดยไม่ทำให้ทรัพยากรเต็ม

  • resources: คำขอ/ขีดจำกัดช่วยป้องกันการใช้หน่วยความจำเกินขนาดในระหว่างการสำรองข้อมูล เป็นนิสัยที่ดีสำหรับการดำเนินงานจริง!

  • (ไม่จำเป็น) เพิ่ม timeZone หากตรรกะทางธุรกิจของคุณขึ้นอยู่กับเวลาท้องถิ่นแทนที่จะเป็น UTC (รองรับตั้งแต่ K8s v1.24)

การนำงานขั้นสูงของคุณไปใช้งาน

ให้ดำเนินการเหมือนเช่นเคย:

1. บันทึกเป็น backup-cron.yaml

2. รัน kubectl apply -f backup-cron.yaml

3. ตรวจสอบสถานะได้ตลอดเวลาด้วย kubectl get cronjob daily-backup

ในการดูการรัน (งาน) ทั้งหมดในอดีต ให้ใช้

kubectl get jobs --sort-by=.metadata.creationTimestamp.

เพื่อดูบันทึกจากการสำรองข้อมูลใดๆ

ค้นหาโพดของมัน (kubectl get pods --selector=job-name=daily-backup-*) แล้ว

รัน kubectl logs <pod-name>

ทำไมควรใช้ Kubernetes CronJobs?

ทำไมต้องเสียเวลาเรียนรู้สิ่งนี้ทั้งหมด? เพราะการอัตโนมัติช่วยประหยัดเวลา และลดข้อผิดพลาดในเกือบทุกงานปฏิบัติการด้านไอที!

ด้วย CronJobs ของ Kubernetes คุณสามารถทำให้สิ่งต่าง ๆ เช่น การสำรองข้อมูลฐานข้อมูล (เพื่อไม่ให้ข้อมูลสูญหาย) การล้างบันทึก (เพื่อประหยัดพื้นที่ดิสก์) การสร้างรายงานเป็นประจำ (เพื่อความสอดคล้องตามข้อกำหนด) การซิงค์ข้อมูลระหว่างระบบในเวลากลางคืน หรือแม้แต่การเรียกใช้การสแกนความปลอดภัยโดยอัตโนมัติในขณะที่ทุกคนนอนหลับได้อย่างเชื่อถือได้

CronJobs สามารถปรับขนาดได้ตามการเติบโตของคลัสเตอร์ จัดการได้เหมือนทรัพยากรอื่นๆ ผ่านไฟล์ YAML หรือเครื่องมือ GitOps ไม่ต้องเข้าสู่เซิร์ฟเวอร์ในช่วงดึกเพื่อรันสคริปต์ด้วยตนเองอีกต่อไป

สถานการณ์จริงที่ระบบอัตโนมัติโดดเด่น

ลองจินตนาการถึงสถานการณ์เหล่านี้:

  • การสำรองข้อมูลฐานข้อมูลทุกคืนช่วยประหยัดเวลาในการกู้คืนหลังจากการลบข้อมูลโดยไม่ได้ตั้งใจ;

  • การหมุนเวียนไฟล์บันทึกย้อนหลังช่วยรักษาสุขภาพดิสก์;

  • การตรวจสอบสุขภาพโดยอัตโนมัติจะแจ้งเตือนผู้ดูแลระบบก่อนที่ผู้ใช้จะสังเกตเห็นการหยุดทำงาน;

  • การซิงค์อย่างสม่ำเสมอทำให้สำนักงานที่ตั้งอยู่ห่างไกลมีข้อมูลใหม่ล่าสุดอยู่เสมอ;

  • รายงานอีเมลตามกำหนดเวลารักษาผู้มีส่วนได้ส่วนเสียให้ได้รับข้อมูลโดยไม่ต้องดำเนินการด้วยตนเอง;

  • ทั้งหมดนี้จะกลายเป็นกิจวัตรประจำวัน ด้วยความเสี่ยงที่ลดลงจากข้อผิดพลาดของมนุษย์ เมื่อขับเคลื่อนด้วย Kubernetes CronJobs ที่ออกแบบมาอย่างดี

การปกป้องระดับองค์กรสำหรับ Kubernetes ด้วย Vinchin Backup & Recovery

เหนือกว่าการทำงานอัตโนมัติ การรักษาความปลอดภัยของเวิร์กโหลดที่สำคัญต้องอาศัยความสามารถในการสำรองข้อมูลอย่างมั่นคงที่ออกแบบมาโดยเฉพาะสำหรับสภาพแวดล้อมแบบคอนเทนเนอร์ Vinchin Backup & Recovery โดดเด่นในฐานะโซลูชันระดับองค์กรที่สร้างขึ้นมาเพื่อให้การ ปกป้อง Kubernetes อย่างครอบคลุมในคลัสเตอร์ทุกขนาดและความซับซ้อน

Vinchin Backup & Recovery มอบการสำรองข้อมูลแบบเต็มรูปแบบและเพิ่มเติมอย่างต่อเนื่อง ตัวเลือกการกู้คืนที่ละเอียดโดยใช้ namespace/แอปพลิเคชัน/PVC/ทรัพยากร การกำหนดตารางเวลาตามนโยบาย ควบคู่ไปกับงานชั่วคราว การกู้คืนข้ามคลัสเตอร์/ข้ามเวอร์ชัน—รวมถึงการย้ายข้อมูลระหว่างแบ็กเอนด์จัดเก็บข้อมูลที่แตกต่างกัน—และการเข้ารหัสข้อมูลที่แข็งแกร่งพร้อมการควบคุมระยะเวลาเก็บรักษา เพื่อให้มีการป้องกันที่พร้อมใช้งานตามข้อกำหนด—ทั้งหมดนี้ได้รับการออกแบบมาเพื่อเพิ่มประสิทธิภาพสูงสุดในขณะที่ลดความเสี่ยงในการดำเนินงานให้น้อยที่สุด

คอนโซลเว็บแบบเข้าใจง่ายทำให้การจัดการสำรองข้อมูลกลายเป็นสี่ขั้นตอนที่เรียบง่าย โดยได้รับการปรับให้เหมาะสมโดยเฉพาะสำหรับสภาพแวดล้อม Kubernetes:

ขั้นตอนที่ 1 เลือกแหล่งที่มาของการสำรองข้อมูล

เลือกแหล่งที่มาของการสำรองข้อมูล

ขั้นตอนที่ 2 เลือกที่จัดเก็บข้อมูลสำรอง

เลือกที่จัดเก็บข้อมูลสำรอง

ขั้นตอนที่ 3 กำหนดกลยุทธ์

กำหนดกลยุทธ์

ขั้นตอนที่ 4 ส่งงาน

ส่งงาน

Vinchin Backup & Recovery ได้รับการยอมรับจากองค์กรหลายพันแห่งทั่วโลกและได้รับการจัดอันดับให้เป็นหนึ่งในโซลูชันการปกป้องข้อมูลชั้นนำ มีบริการทดลองใช้งานฟรี 60 วัน คลิกด้านล่างเพื่อลองสัมผัสประสบการณ์การปกป้องระดับองค์กรที่ราบรื่น

ตัวอย่างคำถามที่พบบ่อยเกี่ยวกับ Kubernetes CronJob

Q1. ผมจะเรียกใช้งานงานตามกำหนดเวลานั้นทันทีแทนที่จะรอได้อย่างไร?

A1. ใช้ KUBECTL CREATE JOB --FROM=CRONJOB/<CRONJOB-NAME> <NEW-JOB-NAME>

Q2.  หากงานเหล่านั้นพลาดช่วงเวลาที่ตั้งไว้ ผมจำกัดระยะเวลาที่งานตามกำหนดเวลาของผมรอได้ไหม?

A2. ได้ ตั้งค่า STARTINGDEADLINESECONDS ใน YAML ของคุณ เช่น startingDeadlineSeconds: 600 อนุญาตให้งานที่พลาดสามารถเริ่มได้ภายในสิบนาทีหลังจากช่วงเวลาที่กำหนดไว้

Q3. เมื่องานตามกำหนดเวลาของผมไม่ทำงาน ผมควรตรวจสอบอะไรเป็นอันดับแรก?

A3. ใช้คำสั่งตรวจสอบ CronJob (KUBECTL DESCRIBE CRONJOB <NAME>) และ Job ที่ผ่านมาล่าสุด (KUBECTL DESCRIBE JOB <NAME>) เพื่อทบทวนเหตุการณ์/ข้อผิดพลาดอย่างรวดเร็ว

บทสรุป

CronJobs ของ Kubernetes ทำให้การอัตโนมัติง่ายขึ้น ตั้งแต่สคริปต์ง่ายๆ ไปจนถึงเวิร์กโฟลว์ที่ซับซ้อน โดยมีความน่าเชื่อถือในตัวเองที่ทำงานได้ทั่วคลัสเตอร์แบบกระจายทั่วโลก เพื่อความมั่นใจอย่างสมบูรณ์เกี่ยวกับความปลอดภัยของข้อมูลควบคู่ไปกับพลังแห่งการอัตโนมัติ Vinchin มีการป้องกันที่แข็งแกร่งพร้อมคอนโซลเว็บที่ใช้งานง่าย ลองใช้ Vinchin ฟรีวันนี้เลย และทำให้การทำงานดำเนินไปอย่างราบรื่น

แชร์บน:

Categories: Tech Tips