Tìm hiểu CronJob trong Kubernetes là gì ?

10

Tìm hiểu CronJob trong Kubernetes là gì ?Cuongquach.com | Bạn muốn chạy một số tác vụ tự động trong hệ thống Kubernetes Cluster, giống như cách sử dụng crontab trên Linux/UNIX. Vậy thì Kubernetes có hỗ trợ bạn đấy : CronJob. Cùng tìm hiểu cách sử dụng CronJob trong Kubernetes nhé.

cronjob-kubernetes-la-gi

CronJob trong Kubernetes là gì ?

Cũng giống như Cronjob trong Linux, CronJob trong Kubernetes dùng để chạy các tác vụ tại một thời điểm cụ thể hoặc tại các khoảng thời gian được quy định. Là một lựa chọn khá tốt cho các tác vụ tự động như :

  • Backup dữ liệu
  • Tổng hợp báo cáo
  • Gửi email
  • Các tác vụ dọn dẹp

CronJob sẽ sử dụng Job object để cấu hình do vậy việc khởi tạo, quản lý, mở rộng và xoá bỏ CronJob cũng giống như Job trong Kubernetes. CronJob sẽ được quản lý bởi CronJob Controller.

Quản lý CronJob trong Kubernetes

Tạo CronJob Kubernetes

Mình tạo một CronJob với nội dung là : cứ 1 phút in một câu lệnh date và output message. Còn trong thực tế, thì thường người ta sẽ build một Docker Image riêng cho các hoạt động tự động hoá tác vụ mà bạn mong muốn. Sau đó chỉ cần chỉ định CMD hoặc ENTRYPOINT để chạy cú pháp lệnh script trong Docker Image đó.

Chú ý:

+ Schedule

Cấu hình spec.schedule dùng để quy định khung thời gian mà CronJob sẽ chạy, cú pháp thì giống hệt Unix crontab. Thời gian cho CronJob mặc định đều là UTC. Có tổng cộng 5 cột, cách nhau bởi khoảng trắng, mỗi cột đại diện giá trị thông tin như sau :

  • Phút (từ 0 đến 59)
  • Giờ (từ 0 đến 23)
  • Ngày của tháng (từ 1 đến 31)
  • Tháng (từ 1 đến 12)
  • Ngày trong tuần (từ 0 đến 6)

+ Job Template

Cấu hình .spec.jobTemplate quy định các cấu hình để chạy một Job. Có cấu trúc y hệt như lúc cấu hình Job Kubernetes, từ đây giúp bạn chỉ định : container được chạy; các lệnh như CMD, ENTRYPOINT, ARGS, .. được sử dụng để chạy tác vụ.

+ Starting Deadline

CronJob controller sẽ kiểm tra mỗi 10 giây danh sách các CronJob được tạo bởi Kubernetes Client. Deadline sẽ quy định thời gian mà CronJob Controller sẽ kiểm tra trong vòng [n] thời gian đã qua, có bao nhiêu Scheduled Job bị failed thì sẽ khởi động lại các Scheduled Job đó.

Ví dụ:

  • Bạn set Cronjob thực thi lúc 9:3010:30 (1 tiếng 1 lần). startingDeadlineSeconds là 300 giây.
  • Lúc 9:29 , Cronjob Controller hoặc hệ thống bị lỗi , downtime. Vì vậy Scheduled Job lúc 9:30 không thực thi được. Hệ thống ghi nhận miss scheduled job (failed).
  • Lúc 9:34, hệ thống khôi phục lại, kiểm tra trong vòng 300s trước đó từ 9:299:34 , có một miss scheduled job.
  • Thì lập tức start lại miss scheduled job đó.

Lưu ý:
– Nếu nhiều hơn 100 scheduled job bị failed cho một CronJob thì Cronjob Controller sẽ thông báo lỗi như sau :

+ Chính sách chạy đồng thời 

Khi bạn sử dụng cấu hình .spec.concurrencyPolicy sẽ giúp bạn quy định chính sách cho trường hợp các Job chạy đồng thời được tạo bởi CronJob Controller. Mặc định thì nhiều Job được tạo bởi một CronJob sẽ được phép chạy đồng thời. Lưu ý là, các Job trong cùng 1 CronJob nhé. Còn các CronJob khác nhau sẽ vẫn tạo các Job khác nhau chạy bình thường đồng thời.

Trường hợp này xảy ra khi nào : ví dụ bạn chạy mỗi phút 1 cronjob, mà một job lại tốn đến 2 phút hoàn thành thì tất nhiên phút kế tiếp sẽ start một Job pod mới chạy tiếp trong khi Job pod cũ chưa chạy xong.

Một số cấu hình hỗ trợ như sau :

  • Allow: cho phép các Job trong 1 CronJob chạy đồng thời.
  • Forbid: không cho phép các Job trong 1 CronJob chạy đồng thời.
  • Replace: nếu Job cũ chưa chạy xong, thì sẽ thay thế job cũ chạy mới.

+ CronJob History

CronJob sẽ khởi tạo một Pod mỗi lần job tác vụ chạy. Để thuận tiện cho việc coi lại thông tin trạng thái của các CronJob đã được thực thi, cũng như log của các Pod thực thi đó, sẽ được quy định trong phần “CronJob History” (lịch sử chạy CronJob).

Bạn có thể cấu hình tối đa số lượng CronJob đã thực thi thành công và thất bại được lưu trữ lại bởi 2 giá trị . Giả sử mình cho lưu trữ các CronJob thực thi thành công là 5 và thất bại là 2 , thì khi bạn liệt kê các Pod liên quan đến CronJob sẽ thấy 5 Pod được giữ lại :

  • spec.successfulJobsHistoryLimit: 5 (mặc định là 3)
  • spec.failedJobsHistoryLimit: 2 (mặc định là 1)

Xem thông tin CronJob Kubernetes

Bạn có thể liệt kê toàn bộ cronjob trong Kubernetes:

Hoặc liệt kê cụ thể cronjob có tên .

Kế đến bạn có thể xem thông tin cụ thể cấu hình của CronJob đó.

Bạn có thể ngồi coi thông tin Job được khởi tạo bởi CronJob cuongquach-cronjob-notify .

Giờ mình có nhu cầu coi output của CronJob đã được tạo và chạy. Thì mình cần tìm các Pod được khởi tạo bởi Scheduled Job trước đó, rồi coi log của Pod đó.

Xoá CronJob Kubernetes

Xoá một CronJob trong Kubernetes cũng dễ dàng :

Khá là dễ hiểu phải không nào? Chúc các bạn hiểu rõ cách sử dụng CronJob trong Kubernetes nhé.

Nguồn: https://cuongquach.com/

LEAVE A REPLY

Please enter your comment!
Please enter your name here