Topik ini menjelaskan cara menginstal SchedulerX agent di lingkungan Kubernetes untuk menjadwalkan Pod dan Job Kubernetes native. SchedulerX menyediakan pemantauan status, peringatan, pengumpulan log, dan diagnostik untuk job Anda.
Cara kerja
Diagram berikut menggambarkan cara SchedulerX menjadwalkan job Kubernetes:

Tabel berikut membandingkan kasus penggunaan job Kubernetes dan job skrip.
|
Skenario |
Script job |
Kubernetes job |
|
Eksekusi jarang dengan konsumsi resource tinggi. |
Tidak disarankan. Membuat proses anak untuk setiap eksekusi mengonsumsi resource pada mesin agen dan dapat membebani sistem. |
Disarankan. Kubernetes menggunakan strategi load balancing-nya untuk meluncurkan Pod baru pada setiap eksekusi, memastikan stabilitas tinggi. |
|
Eksekusi sering dengan konsumsi resource rendah. |
Disarankan. Membuat proses anak cepat dan hemat resource. |
Tidak disarankan. Menarik image dan memulai Pod untuk setiap eksekusi lambat. Pemanggilan API server yang sering untuk menjadwalkan Pod atau Job dapat menyebabkan rate limiting. |
|
Cara membangun dependensi. |
Deploy dependensi secara manual ke instans ECS terlebih dahulu. |
Bangun dependensi ke dalam base image. Anda harus membangun ulang base image jika dependensi berubah. |
Prasyarat
Sambungkan ke SchedulerX. Untuk informasi selengkapnya, lihat Deploy SchedulerX in a Kubernetes cluster.
Buat Kubernetes job
Shell script
Untuk menjalankan skrip shell di dalam Pod tanpa membuat image sendiri, buat Kubernetes job di halaman Tasks dan pilih Shell-Script sebagai tipe resource. Image default adalah BusyBox, tetapi Anda dapat menggantinya dengan image milik Anda sendiri.
Konfigurasi contoh: Atur Task type ke K8s dan resource type ke Shell-Script. Image default adalah BusyBox. Masukkan konten skrip shell Anda, seperti echo hello schedulerx, di editor skrip.
Klik Run once. Sebuah Pod bernama schedulerx-shell-{JobId} dimulai di kluster Kubernetes.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
schedulerx-shell-xxx 1/1 Running 0 xxx
Di halaman Task Management di Konsol SchedulerX, Anda dapat melihat riwayat eksekusi dan log Pod. Area output log menampilkan hasil skrip, seperti hello schedulerx, beserta waktu eksekusi dan statusnya.
Python script
Untuk menjalankan skrip Python di dalam Pod tanpa membuat image sendiri, buat Kubernetes job di halaman Tasks dan pilih Python-Script sebagai tipe resource. Image default adalah python, yang dapat Anda ganti dengan image milik Anda sendiri.
Konfigurasi contoh: Atur Task type ke K8s dan resource type ke Python-Script. Image default adalah python. Masukkan konten skrip Python Anda, seperti print('hello schedulerx'), di editor skrip.
Klik Run once. Sebuah Pod bernama schedulerx-python-{JobId} dimulai di kluster Kubernetes.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
schedulerx-python-xxx 1/1 Running 0 xxx
Di halaman Task Management di Konsol SchedulerX, Anda dapat melihat riwayat eksekusi dan log Pod. Prosedurnya sama seperti skrip shell. Area output log menampilkan hasil skrip.
PHP script
Untuk menjalankan skrip PHP di dalam Pod tanpa membuat image sendiri, buat Kubernetes job di halaman Tasks dan pilih Php-Script sebagai tipe resource. Image default adalah php:7.4-cli, tetapi Anda dapat menggantinya dengan image milik Anda sendiri.
Konfigurasi contoh: Atur Task type ke K8s dan resource type ke Php-Script. Image default adalah php:7.4-cli. Masukkan konten skrip PHP Anda di editor skrip.
Klik Run once. Sebuah Pod bernama schedulerx-php-{JobId} dimulai di kluster Kubernetes.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
schedulerx-php-xxx 1/1 Running 0 xxx
Di halaman Task Management di Konsol SchedulerX, Anda dapat melihat riwayat eksekusi dan log Pod. Prosedurnya sama seperti skrip shell. Area output log menampilkan hasil skrip.
Node.js script
Untuk menjalankan skrip Node.js di dalam Pod tanpa membuat image sendiri, buat Kubernetes job di halaman Tasks dan pilih Node.js-Script sebagai tipe resource. Image default adalah node:16, tetapi Anda dapat menggantinya dengan image milik Anda sendiri.
Konfigurasi contoh: Atur Task type ke K8s dan resource type ke Node.js-Script. Image default adalah node:16. Masukkan konten skrip Node.js Anda, seperti console.log('hello schedulerx'), di editor skrip.
Klik Run once. Sebuah Pod bernama schedulerx-node-{JobId} dimulai di kluster Kubernetes.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
schedulerx-node-xxx 1/1 Running 0 xxx
Di halaman Task Management di Konsol SchedulerX, Anda dapat melihat riwayat eksekusi dan log Pod. Prosedurnya sama seperti skrip shell. Area output log menampilkan hasil skrip.
Job-YAML
Anda juga dapat menggunakan SchedulerX untuk menjalankan Job Kubernetes native. Untuk melakukannya, atur task type ke K8s dan resource type ke Job-YAML.
Konfigurasi contoh: Atur Task type ke K8s dan resource type ke Job-YAML. Masukkan definisi Job Kubernetes standar di editor YAML, termasuk field seperti apiVersion, kind, metadata, dan spec.
Klik Run once. Job dan Pod terkaitnya dimulai di kluster Kubernetes.
$ kubectl get jobs
NAME COMPLETIONS DURATION AGE
schedulerx-xxx 1/1 xxx xxx
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
schedulerx-xxx 0/1 Completed 0 xxx
Di halaman Task Management di Konsol SchedulerX, Anda dapat melihat riwayat eksekusi dan log Pod. Area output log menampilkan hasil Job, waktu eksekusi, dan statusnya.
Saat menjalankan Kubernetes Job dengan SchedulerX, kami tidak menyarankan penggunaan CronJob. Sebagai gantinya, konfigurasikan jadwal di SchedulerX untuk memastikan bahwa riwayat eksekusi dan log setiap Pod dikumpulkan.
Pod-YAML
Anda juga dapat menggunakan SchedulerX untuk menjalankan Pod Kubernetes native. Untuk melakukannya, atur task type ke K8s dan resource type ke Pod-YAML.
Konfigurasi contoh: Atur Task type ke K8s dan resource type ke Pod-YAML. Masukkan definisi Pod Kubernetes standar di editor YAML, termasuk field seperti apiVersion, kind, metadata, dan spec.
Klik Run once. Pod tersebut dimulai di kluster Kubernetes.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
schedulerx-xxx 1/1 Running 0 xxx
Di halaman Task Management di Konsol SchedulerX, Anda dapat melihat riwayat eksekusi dan log Pod. Area output log menampilkan hasil Pod, waktu eksekusi, dan statusnya.
Saat Anda menggunakan SchedulerX untuk menjalankan Pod Kubernetes, kami menyarankan agar Anda tidak menjalankan Pod berumur panjang, seperti Pod untuk aplikasi web yang tidak pernah berhenti. Anda harus mengatur restart policy ke Never. Jika tidak, Pod akan terus-menerus restart.
Parameter job dari variabel lingkungan
SchedulerX dapat menyuntikkan parameter job sebagai variabel lingkungan. Skrip, Pod, dan Job kemudian dapat dengan mudah membaca parameter ini dari lingkungan.
Fitur ini memerlukan SchedulerX agent versi 1.10.14 atau lebih baru.
|
Parameter |
Deskripsi |
|
SCHEDULERX_JOB_NAME |
Nama pekerjaan. |
|
SCHEDULERX_SCHEDULE_TIMESTAMP |
Timestamp penjadwalan job. |
|
SCHEDULERX_DATA_TIMESTAMP |
Waktu data untuk job. |
|
SCHEDULERX_WORKFLOW_INSTANCE_ID |
ID instance alur kerja, jika job merupakan bagian dari alur kerja. |
|
SCHEDULERX_JOB_PARAMETERS |
Parameter job. |
|
SCHEDULERX_INSTANCE_PARAMETERS |
Parameter instance job. |
|
SCHEDULERX_JOB_SHARDING_PARAMETER |
Parameter sharding, jika job merupakan job yang di-shard. |
Contoh berikut menunjukkan cara mengambil parameter job SchedulerX:
Contoh: Masukkan nilai di bidang Job Parameters dalam konfigurasi job. Di skrip Anda, Anda kemudian dapat membaca variabel lingkungan SCHEDULERX_JOB_PARAMETERS untuk mengakses nilai ini. Misalnya, skrip shell dapat menggunakan echo $SCHEDULERX_JOB_PARAMETERS untuk mencetak parameter tersebut.
Keunggulan
Dibandingkan dengan fitur Kubernetes Job native, menjadwalkan Kubernetes Job dengan SchedulerX menawarkan keunggulan berikut:
Edit skrip online
Kasus penggunaan umum untuk Kubernetes Job adalah tugas pemrosesan data atau operasional, yang sering kali diimplementasikan sebagai skrip. Alur kerja native mengharuskan Anda memaketkan skrip ke dalam image dan mengonfigurasi perintah dalam file YAML. Setiap perubahan skrip mengharuskan developer untuk membangun ulang dan menerapkan ulang image. Contohnya:
apiVersion: batch/v1
kind: Job
metadata:
name: hello
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["sh", "/root/hello.sh"]
restartPolicy: Never
backoffLimit: 4
Saat Anda mengelola Kubernetes Job dengan SchedulerX, Anda tidak perlu membangun image atau menulis YAML untuk mengonfigurasi skrip. Anda dapat langsung mengedit skrip untuk Shell, Python, PHP, dan Node.js di konsol, dan sistem secara otomatis menjalankannya di dalam Pod. Untuk memperbarui skrip, cukup edit dan simpan di konsol. Skrip yang diperbarui akan dijalankan pada waktu terjadwal berikutnya. Hal ini secara signifikan meningkatkan efisiensi pengembangan dan pengelolaan Kubernetes Job. Dengan menyembunyikan detail terkait kontainer, SchedulerX juga mempermudah developer yang tidak terbiasa dengan layanan kontainer untuk bekerja dengan Kubernetes, sehingga meningkatkan produktivitas mereka.
Contohnya:
Di halaman edit job di Konsol SchedulerX, Anda dapat menulis dan memodifikasi konten skrip langsung di script editor. Setelah selesai, klik Save. Versi terbaru skrip akan secara otomatis dijalankan pada waktu terjadwal berikutnya.
Orkestrasi job visual
Di ekosistem Kubernetes, Argo adalah solusi populer untuk orkestrasi alur kerja. Contohnya:
# Alur kerja berikut mengeksekusi alur kerja berbentuk berlian
#
# A
# / \
# B C
# \ /
# D
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: dag-diamond-
spec:
entrypoint: diamond
templates:
- name: diamond
dag:
tasks:
- name: A
template: echo
arguments:
parameters: [{name: message, value: A}]
- name: B
depends: "A"
template: echo
arguments:
parameters: [{name: message, value: B}]
- name: C
depends: "A"
template: echo
arguments:
parameters: [{name: message, value: C}]
- name: D
depends: "B && C"
template: echo
arguments:
parameters: [{name: message, value: D}]
- name: echo
inputs:
parameters:
- name: message
container:
image: alpine:3.7
command: [echo, "{{inputs.parameters.message}}"]
Fitur alur kerja SchedulerX memungkinkan Anda melakukan orkestrasi Kubernetes Job secara visual menggunakan antarmuka drag-and-drop.
Dibandingkan dengan Argo, SchedulerX memberikan pengalaman yang lebih ramah pengguna. Saat runtime, sistem menampilkan graf alur kerja visual yang secara jelas melacak progres job, sehingga memudahkan identifikasi dan lokalisasi bottleneck atau tugas yang gagal.
Di tampilan instance alur kerja, setiap node tugas diberi kode warna berdasarkan statusnya (misalnya, hijau untuk sukses dan merah untuk gagal), memungkinkan Anda mengidentifikasi kegagalan secara visual.
Pemantauan dan peringatan
Saat Anda menjadwalkan Pod dan Job Anda dengan SchedulerX, Anda dapat menggunakan sistem pemantauan dan peringatan bawaannya untuk pelacakan status dan peringatan pengecualian yang efisien.
-
Saluran peringatan yang didukung: SMS, panggilan telepon, email, dan webhook (untuk DingTalk, WeCom, dan Lark).
-
Kebijakan peringatan yang didukung: peringatan saat gagal dan peringatan saat timeout eksekusi.
Layanan log
Saat Anda menggunakan SchedulerX untuk menjadwalkan Pod dan Job Anda, sistem secara otomatis mengumpulkan log yang dihasilkan selama eksekusi Pod. Anda tidak perlu mengaktifkan layanan log tambahan. Jika Pod gagal, Anda dapat langsung melihat dan menganalisis penyebab kegagalannya secara rinci di Konsol SchedulerX untuk troubleshooting cepat.
Di detail instance tugas, Anda dapat melihat log lengkap yang dihasilkan selama eksekusi Pod, termasuk stack trace dan alasan kegagalan, untuk membantu Anda mengidentifikasi dan memperbaiki masalah dengan cepat.
Dasbor pemantauan
Dengan menggunakan SchedulerX untuk menjadwalkan Pod dan Job Anda, Anda dapat mengakses dasbor pemantauan job bawaan tanpa perlu mengaktifkan layanan seperti Prometheus.
Dasbor pemantauan menampilkan metrik utama seperti jumlah eksekusi job, tingkat keberhasilan dan kegagalan, serta tren durasi eksekusi, memberikan gambaran menyeluruh tentang status operasional job Anda.
Penerapan job campuran
Untuk job online yang memerlukan performa real-time tinggi, seperti pemrosesan pesanan, Anda dapat memanggil metode secara langsung dalam proses yang sama untuk penanganan efisien dan integrasi tanpa hambatan dengan layanan online. Untuk job offline yang memiliki persyaratan real-time lebih rendah tetapi mengonsumsi resource signifikan, seperti ekspor laporan terjadwal, Anda dapat menulis skrip dan menjalankannya di Pod terpisah. Platform SchedulerX mendukung tipe job Java dan Kubernetes, memungkinkan Anda menerapkan penerapan campuran job online dan offline untuk memenuhi berbagai kebutuhan.