-
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 ฟรีวันนี้เลย และทำให้การทำงานดำเนินไปอย่างราบรื่น
แชร์บน: