All Products
Search
Document Center

Container Compute Service:Penjadwalan penskalaan (CronHPA)

Last Updated:Jun 21, 2026

Untuk meningkatkan pemanfaatan resource, mengurangi biaya, dan menghindari pemborosan, Container Compute Service (ACS) menyediakan komponen ack-kubernetes-cronhpa-controller untuk secara otomatis menskalakan resource berdasarkan jadwal yang telah ditentukan. Topik ini menjelaskan cara menggunakan Cron Horizontal Pod Autoscaler (CronHPA) guna menskalakan workload Anda di kluster ACS sesuai jadwal, serta cara mengaktifkan CronHPA dan Horizontal Pod Autoscaler (HPA) agar dapat berinteraksi tanpa konflik.

Prasyarat

Informasi latar belakang

ack-kubernetes-cronhpa-controller adalah controller Kubernetes yang menskalakan workload dalam kluster berdasarkan jadwal mirip cron. Anda dapat menggunakan CronHPA dengan objek Kubernetes apa pun yang mendukung subresource scale, seperti Deployment atau StatefulSet. Untuk informasi lebih lanjut, kunjungi repositori kubernetes-cronhpa-controller.

Tabel berikut menjelaskan parameter dalam konfigurasi CronHPA.

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: cronhpa-sample
  namespace: default 
spec:
   scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: nginx-deployment-basic
   excludeDates:
   # exclude November 15th
   - "* * * 15 11 *"
   # exclude every Friday 
   - "* * * * * 5"
   jobs:
   - name: "scale-down"
     schedule: "30 */1 * * * *"
     targetSize: 1
   - name: "scale-up"
     schedule: "0 */1 * * * *"
     targetSize: 3
     runOnce: false

Parameter

Deskripsi

scaleTargetRef

scaleTargetRef menentukan objek yang ingin Anda skalakan. Jika subresource objek tersebut dapat diskalakan, Anda dapat mengaktifkan CronHPA untuk objek tersebut.

excludeDates

Nilai excludeDates harus berupa array tanggal. Tugas penskalaan tidak akan dieksekusi pada tanggal yang ditentukan dalam excludeDates.

Catatan

Unit waktu terkecil yang dapat Anda kecualikan adalah Day.

Formatnya adalah "* * * * * *", yang merepresentasikan "<Seconds> <Minutes> <Hours> <Day of month> <Month> <Day of week>".

Sebagai contoh, jika Anda tidak ingin mengeksekusi tugas penskalaan pada 15 November, atur excludeDates ke nilai berikut:

excludeDates:
  - "* * * 15 11 *"

jobs

Anda dapat mendefinisikan beberapa tugas CronHPA dalam satu spec. Setiap tugas dapat dikonfigurasi dengan bidang-bidang berikut:

  • name: Nama digunakan untuk membedakan tugas CronHPA. Oleh karena itu, name setiap tugas CronHPA harus unik dalam konfigurasi CronHPA.

  • schedule: jadwal penskalaan, yang mirip dengan crontab. kubernetes-cronhpa-controller menggunakan library Golang untuk mendukung berbagai aturan. Untuk informasi lebih lanjut, lihat go-cron. Format ekspresi cron harus sesuai dengan aturan berikut. Jika tidak, Anda tidak dapat membuat ekspresi cron.

    Buat ekspresi cron berdasarkan aturan berikut:

    Field name   | Mandatory?  | Allowed values  | Allowed special characters
      ----------   | ---------- | --------------  | --------------------------
      Seconds      | Yes        | 0-59            | * / , -
      Minutes      | Yes        | 0-59            | * / , -
      Hours        | Yes        | 0-23            | * / , -
      Day of month | Yes        | 1-31            | * / , - ?
      Month        | Yes        | 1-12 or JAN-DEC | * / , -
      Day of week  | Yes        | 0-6 or SUN-SAT  | * / , - ?
  • targetSize: jumlah pod yang ingin Anda capai pada waktu yang dijadwalkan.

  • runOnce: Jika Anda mengatur runOnce ke true, tugas hanya akan dieksekusi sekali. Tugas akan berhenti setelah dijalankan sekali.

Instal controller CronHPA

Anda dapat menginstal controller CronHPA ack-kubernetes-cronhpa-controller dengan salah satu metode berikut.

  1. Masuk ke Konsol ACS. Di panel navigasi kiri, klik Clusters.

  2. Pada halaman Clusters, klik nama kluster target. Di panel navigasi kiri, klik Add-ons.

  3. Pada halaman Add-ons, klik tab Manage Applications. Temukan ack-kubernetes-cronhpa-controller, klik Install, lalu klik OK pada kotak dialog yang muncul.

Catatan

Anda dapat menguninstall controller CronHPA jika tidak lagi digunakan. Untuk informasi lebih lanjut tentang cara menguninstall ack-kubernetes-cronhpa-controller, lihat Manage add-ons.

Buat tugas CronHPA

Sebelum membuat dan menjalankan tugas CronHPA untuk aplikasi Anda, pastikan controller CronHPA berjalan normal di kluster Anda dan hanya ada satu tugas HPA yang dibuat untuk aplikasi tersebut. Untuk informasi lebih lanjut tentang cara mengaktifkan CronHPA dan HPA agar berinteraksi tanpa konflik, lihat Aktifkan CronHPA dan HPA agar berinteraksi tanpa konflik. Anda dapat membuat tugas CronHPA dengan salah satu metode berikut:

Metode 1: Buat tugas saat pembuatan aplikasi

Pada halaman Advanced wizard pembuatan aplikasi, navigasikan ke bagian Scaling. Pilih Enable di samping CronHPA. Untuk langkah-langkah detail pembuatan aplikasi, lihat Buat workload tanpa status (Deployment) atau Buat workload stateful (StatefulSet).

Jika Anda diminta bahwa komponen ack-kubernetes-cronhpa-controller belum diinstal, klik Install untuk menginstalnya.

Konsol ACK secara otomatis memeriksa apakah komponen CronHPA telah diinstal. Jika belum diinstal, tombol Install akan muncul. Setelah menginstal komponen CronHPA, pengaturan konfigurasi untuk tugas penskalaan terjadwal akan ditampilkan. Tabel berikut menjelaskan parameter-parameter tersebut.

Parameter

Deskripsi

Job Name

Masukkan nama untuk tugas CronHPA. Nama setiap tugas CronHPA harus unik.

Desired Number of Replicas

Pod replikasi diskalakan ke jumlah yang diinginkan pada waktu yang dijadwalkan.

Scaling Schedule

Atur jadwal penskalaan.

Untuk informasi lebih lanjut tentang cara mengatur jadwal penskalaan untuk tugas CronHPA, lihat predefined-schedules.

Metode 2: Buat tugas untuk aplikasi yang sudah ada

Contoh berikut menunjukkan cara membuat tugas CronHPA untuk aplikasi yang sudah ada. Aplikasi tanpa status digunakan dalam contoh ini.

  1. Masuk ke Konsol ACS. Di panel navigasi kiri, klik Clusters.

  2. Pada halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Workloads > Deployments.

  3. Pada halaman Deployments, temukan aplikasi, lalu klik Details di kolom Actions.

  4. Klik tab Pod Scaling dan konfigurasikan tugas penskalaan terjadwal.

    • Jika komponen CronHPA belum diinstal, tombol Install akan muncul. Klik Install lalu lanjutkan ke langkah berikutnya.

    • Jika controller CronHPA telah diinstal, lakukan langkah-langkah berikut.

  5. Klik Create di sebelah kanan CronHPA. Pada kotak dialog Create, atur parameter untuk tugas tersebut.

    Tabel berikut menjelaskan parameter-parameter tersebut.

    Parameter

    Deskripsi

    Job Name

    Masukkan nama untuk tugas CronHPA. Nama setiap tugas CronHPA harus unik.

    Desired Number of Replicas

    Pod replikasi diskalakan ke jumlah yang diinginkan pada waktu yang dijadwalkan.

    Scaling Schedule

    Atur jadwal penskalaan. Untuk informasi lebih lanjut tentang cara mengatur jadwal penskalaan untuk tugas CronHPA, lihat predefined-schedules.

Buat atau modifikasi tugas CronHPA

  1. Ikuti langkah-langkah dalam Buat tugas CronHPA penskalaan terjadwal untuk membuka halaman Pod Scaling.

  2. Pada tab Pod Scaling, di bagian CronHPA, temukan tugas target dan klik Add or Modify Job di bawah kolom Actions.

  3. Pada kotak dialog Edit, klik Add Task untuk membuat tugas baru atau klik tugas yang sudah ada untuk memodifikasinya. Setelah selesai, klik OK.

    Formulir konfigurasi tugas mencakup bidang-bidang berikut: Job Name, Desired Number of Replicas, dan Scaling Schedule (yang mendukung lima metode: By Hour, By Day, By Week, By Month, atau cron expression). Jika Anda memilih cron expression, masukkan ekspresi dalam kotak input dengan format: Seconds Minutes Hours Day-of-month Month Day-of-week (misalnya, 1 2 3 4 * * berarti pukul 03:02:01 pada tanggal 4 setiap bulan).

    Catatan

    Anda dapat menghapus tugas CronHPA. Pada kotak dialog Edit, tugas yang sudah ada muncul sebagai tag. Anda dapat menghapus tugas dengan mengklik ikon hapus di samping namanya. Untuk menambahkan tugas baru, masukkan nama di kotak input Job Name dan klik Add Job. Setelah melakukan perubahan, klik OK.

Templat CronHPA dan HPA

CronHPA

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: cronhpa-sample
spec:
   scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: nginx-deployment-basic
   jobs:
   - name: "scale-down"
     schedule: "30 */1 * * * *"
     targetSize: 1
   - name: "scale-up"
     schedule: "0 */1 * * * *"
     targetSize: 11	
	

HPA

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-deployment-basic-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment-basic
  minReplicas: 4
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50	
	

Aktifkan CronHPA dan HPA agar berinteraksi tanpa konflik

CronHPA dan HPA berlaku pada workload, seperti Deployment atau StatefulSet. Jika Anda menggunakan CronHPA dan HPA untuk menskalakan workload secara bersamaan, konflik dapat terjadi. Untuk menyelesaikan konflik tersebut, CronHPA memungkinkan Anda menggunakan HPA sebagai objek yang akan diskalakan, yang kompatibel dengan fitur-fitur HPA.

Konfigurasi CronHPA dan HPA menunjukkan informasi berikut:

  • Keduanya menggunakan bidang spec.scaleTargetRef untuk mengidentifikasi target penskalaan.

  • CronHPA menggunakan aturan crontab dalam spec.jobs untuk menjadwalkan penskalaan replika.

  • HPA memicu aktivitas penskalaan berdasarkan penggunaan resource.

Jika CronHPA dan HPA keduanya diterapkan, keduanya dapat menskalakan pod untuk aplikasi yang sama yang ditentukan oleh scaleTargetRef. CronHPA dan HPA bersifat independen dan tidak saling mengetahui keberadaan satu sama lain. Akibatnya, controller CronHPA dan controller HPA secara terpisah menskalakan pod untuk aplikasi tersebut. Aktivitas penskalaan yang terakhir akan menimpa aktivitas sebelumnya.

Solusi kompatibilitas untuk CronHPA dan HPA

Sebagaimana disebutkan, konflik dapat diselesaikan jika CronHPA mengetahui status terkini HPA. Untuk mencapai hal ini, ACK mengonfigurasi scaleTargetRef dalam CronHPA agar mengarah ke objek HPA itu sendiri, bukan objek workload akhir. Saat melakukan operasi penskalaan, CronHPA pertama-tama menemukan scaleTargetRef yang sebenarnya melalui objek HPA, lalu menyesuaikan objek workload berdasarkan status tersebut. Hal ini mencegah controller saling menimpa dan memastikan penskalaan konsisten serta dapat diprediksi.

Templat YAML berikut menunjukkan konfigurasi yang memungkinkan CronHPA dan HPA berinteraksi tanpa konflik:

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: cronhpa-sample
spec:
   scaleTargetRef:
      apiVersion: autoscaling/v1
      kind: HorizontalPodAutoscaler
      name:  nginx-deployment-basic-hpa
   jobs:
   - name: "scale-down"
     schedule: "30 */1 * * * *"
     targetSize: 1
     runOnce: false
   - name: "scale-up"
     schedule: "0 */1 * * * *"
     targetSize: 3
     runOnce: false

Berdasarkan definisi CronHPA, objek CronHPA dapat menentukan nilai spec.minReplicas, spec.maxReplicas, dan status.desiredReplicas dalam HPA. CronHPA juga mengetahui jumlah replika saat ini dari workload yang ditentukan oleh spec.scaleTargetRef. CronHPA berinteraksi dengan HPA dengan menyesuaikannya. CronHPA menggunakan nilai yang lebih besar antara jumlah replika targetnya dan jumlah replika saat ini untuk menentukan apakah akan menskalakan workload atau menaikkan batas atas HPA. CronHPA menggunakan nilai yang lebih kecil antara jumlah replika targetnya dan konfigurasi HPA untuk menentukan apakah akan memodifikasi batas bawah HPA.

Tabel berikut menjelaskan aturan yang memungkinkan CronHPA dan HPA berinteraksi tanpa konflik.

HPA (min/max)

CronHPA

Deployment

Hasil penskalaan

Deskripsi

1/10

5

5

  • HPA (min/max): 1/10

  • Deployment: 5

Jika jumlah pod yang diinginkan oleh CronHPA sama dengan jumlah pod saat ini, CronHPA tidak mengubah jumlah maksimum dan minimum pod dalam konfigurasi HPA. Selain itu, tidak ada aktivitas penskalaan yang dipicu.

1/10

4

5

  • HPA (min/max): 1/10

  • Deployment: 5

Jika jumlah pod yang diinginkan oleh CronHPA kurang dari jumlah pod saat ini, tidak ada aktivitas penskalaan yang dipicu.

1/10

6

5

  • HPA (min/max): 6/10

  • Deployment: 6

  • Jika jumlah pod yang diinginkan oleh CronHPA lebih besar daripada jumlah pod saat ini, CronHPA menambahkan pod hingga mencapai jumlah yang diinginkan.

  • Jika jumlah pod yang diinginkan oleh CronHPA lebih besar daripada nilai minReplicas dalam konfigurasi HPA, CronHPA mengubah nilai minReplicas.

5/10

4

5

  • HPA (min/max): 4/10

  • Deployment: 5

  • Jika jumlah pod yang diinginkan oleh CronHPA kurang dari jumlah pod saat ini, tidak ada aktivitas penskalaan yang dipicu.

  • Jika jumlah pod yang diinginkan oleh CronHPA kurang dari nilai minReplicas dalam konfigurasi HPA, CronHPA mengubah nilai minReplicas.

5/10

11

5

  • HPA (min/max): 11/11

  • Deployment: 11

  • Jika jumlah pod yang diinginkan oleh CronHPA lebih besar daripada jumlah pod saat ini, CronHPA menambahkan pod hingga mencapai jumlah yang diinginkan.

  • Jika jumlah pod yang diinginkan oleh CronHPA lebih besar daripada nilai maxReplicas dalam konfigurasi HPA, CronHPA mengubah nilai maxReplicas.

Daftar berikut menjelaskan parameter dalam tabel:

  • HPA (min/max): jumlah minimum dan maksimum pod yang ditentukan dalam konfigurasi HPA.

  • CronHPA: jumlah pod yang diinginkan yang ditentukan dalam konfigurasi CronHPA.

  • Deployment: Jumlah replika untuk aplikasi sebelum penskalaan.

CronHPA tidak secara langsung mengubah jumlah pod untuk Deployment. Sebaliknya, CronHPA memicu HPA untuk menskalakan pod. Hal ini menyelesaikan konflik antara CronHPA dan HPA.