全部产品
Search
文档中心

Container Compute Service:Penskalaan kontainer berbasis cron (CronHPA)

更新时间:Feb 18, 2026

Untuk meningkatkan pemanfaatan resource dan mengurangi biaya, Container Compute Service (ACS) mendukung penskalaan berbasis cron melalui komponen ack-kubernetes-cronhpa-controller. Fitur ini, yang dikenal sebagai Cron Horizontal Pod Autoscaler (CronHPA), membantu mengurangi pemborosan resource. Topik ini menjelaskan cara menerapkan penskalaan kontainer berbasis cron di kluster ACS serta kompatibilitas CronHPA dengan Horizontal Pod Autoscaler (HPA).

Prasyarat

Informasi latar belakang

ack-kubernetes-cronhpa-controller adalah controller HPA Kubernetes yang menskalakan resource kluster pada waktu yang dijadwalkan, mirip dengan crontab. Anda dapat menggunakan CronHPA untuk objek Kubernetes apa pun yang mendukung subresource scale, seperti Deployment atau StatefulSet. Untuk informasi selengkapnya, lihat kubernetes-cronhpa-controller.

Contoh berikut menjelaskan bidang-bidang 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

Field

Description

scaleTargetRef

Bidang scaleTargetRef menentukan objek yang akan diskalakan. CronHPA mendukung objek apa pun yang mendukung subresource Scale.

excludeDates

Bidang excludeDates merupakan array tanggal. Tugas dilewati pada tanggal yang sesuai dengan entri dalam excludeDates.

Catatan

Unit minimumnya adalah day.

Format "* * * * * *" merepresentasikan "<Seconds> <Minutes> <Hours> <Day of month> <Month> <Day of week>".

Misalnya, untuk mencegah tugas berjalan pada 15 November, tentukan excludeDates seperti pada contoh berikut.

excludeDates:
  - "* * * 15 11 *"

jobs

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

  • name: Nama harus unik dalam objek CronHPA. Hal ini memungkinkan Anda membedakan tugas-tugas berbeda berdasarkan name-nya.

  • schedule: Kebijakannya mirip dengan crontab. ack-kubernetes-cronhpa-controller menggunakan library Golang yang kuat (go-cron) yang mendukung lebih banyak aturan ekspresi. Tetapkan jadwal secara ketat sesuai format berikut. Jika tidak, pembuatan akan gagal.

    Format ekspresi cron adalah sebagai 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: Menetapkan jumlah pod yang akan diskalakan saat waktu terjadwal tiba.

  • runOnce: Jika runOnce diatur ke true, tugas hanya berjalan sekali lalu keluar.

Instal komponen CronHPA

Anda dapat menginstal komponen ack-kubernetes-cronhpa-controller sebagai 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 Application Management. Temukan ack-kubernetes-cronhpa-controller, lalu klik Install. Pada kotak dialog yang muncul, klik OK.

Catatan

Jika Anda tidak lagi memerlukan penskalaan kontainer berbasis cron, Anda dapat menghapus komponen CronHPA. Untuk informasi selengkapnya tentang cara menghapus komponen ack-kubernetes-cronhpa-controller, lihat Manage components.

Buat tugas terjadwal CronHPA

Sebelum membuat dan menjalankan CronHPA untuk aplikasi, pastikan komponen CronHPA di kluster berjalan dengan benar dan aplikasi hanya memiliki satu objek HPA. Untuk informasi selengkapnya tentang kebijakan kompatibilitas antara CronHPA dan HPA, lihat Kompatibilitas CronHPA dengan HPA. Anda dapat membuat tugas CronHPA dengan salah satu dari dua cara berikut.

Method 1: Create a CronHPA task when you create an application

Saat membuat aplikasi, buka halaman Advanced Configuration. Di bagian Scaling Configuration, pilih Enable di samping Cron-based Scaling untuk membuat tugas penskalaan terjadwal untuk aplikasi tersebut. Untuk informasi selengkapnya tentang cara membuat aplikasi, lihat Create a stateless workload (Deployment) atau Create a stateful workload (StatefulSet).

image.png

Konsol ACS secara otomatis memeriksa apakah komponen CronHPA telah diinstal. Jika belum diinstal, pesan Click to install akan muncul. Setelah Anda menginstal komponen CronHPA, pengaturan konfigurasi untuk tugas penskalaan terjadwal akan ditampilkan. Tabel berikut menjelaskan parameter-parameternya.

Configuration Item

Description

Scheduled Task Name

Tentukan nama untuk tugas terjadwal. Nama setiap tugas harus unik.

Target Replicas

Jumlah replika aplikasi secara otomatis diskalakan ke nilai ini pada waktu terjadwal.

Scheduling Cycle

Tetapkan siklus penjadwalan.

Untuk informasi selengkapnya tentang cara menetapkan siklus penjadwalan untuk tugas penskalaan terjadwal, lihat predefined-schedules.

Method 2: Create a CronHPA task for an existing application

Langkah-langkah berikut menunjukkan cara membuat tugas CronHPA untuk aplikasi tanpa status yang sudah ada.

  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 Stateless, klik Details di kolom Actions untuk aplikasi tersebut.

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

    • Jika komponen CronHPA belum diinstal, pesan Click to install akan muncul. Klik Click to install, lalu lanjutkan ke langkah berikutnya.

    • Jika komponen CronHPA sudah diinstal, lanjutkan langsung ke langkah berikutnya.

  5. Klik Create di samping Cron-based Scaling (CronHPA). Pada kotak dialog Create, tetapkan parameter untuk tugas penskalaan terjadwal.

    create

    Tabel berikut menjelaskan item konfigurasi.

    Configuration Item

    Description

    Task Name

    Tentukan nama untuk tugas terjadwal. Nama setiap tugas harus unik.

    Target Replicas

    Jumlah replika aplikasi secara otomatis diskalakan ke nilai ini pada waktu terjadwal.

    Scheduling Cycle

    Tetapkan siklus penjadwalan. Untuk informasi selengkapnya tentang cara menetapkan siklus penjadwalan untuk tugas penskalaan terjadwal, lihat predefined-schedules.

Tambah atau ubah tugas penskalaan terjadwal

  1. Ikuti langkah-langkah di Buat tugas terjadwal CronHPA untuk membuka halaman Container Scaling.

  2. Pada tab Container Scaling, di bagian Cron-based Scaling (CronHPA), temukan tugas target dan klik Add or Edit Task di kolom Actions.

  3. Pada kotak dialog Edit, klik Add Task untuk membuat tugas, atau klik tugas CronHPA yang sudah ada untuk mengubahnya. Lalu, klik OK.

    modify

    Catatan

    Anda dapat menghapus tugas CronHPA seperti yang ditunjukkan pada gambar berikut. Pada kotak dialog Edit, klik ikon hapus di pojok kanan atas nama tugas, lalu klik OK.delete

Templat definisi 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	
	

Kompatibilitas CronHPA dengan HPA

CronHPA dan HPA sama-sama bekerja pada workload, seperti Deployment atau StatefulSet. Mengonfigurasi keduanya pada workload yang sama dapat menyebabkan konflik. Untuk mengatasi masalah ini, CronHPA mendukung penargetan objek HPA itu sendiri sebagai objek penskalaannya, sehingga kompatibel dengan fungsionalitas asli HPA.

Membandingkan templat definisi CronHPA dan HPA menunjukkan hal-hal berikut:

  • CronHPA dan HPA sama-sama menggunakan bidang spec.scaleTargetRef untuk mendapatkan objek penskalaan.

  • CronHPA menggunakan aturan crontab dalam spec.jobs untuk menskalakan jumlah replika pada waktu terjadwal.

  • HPA menentukan penskalaan berdasarkan pemanfaatan resource.

Jika Anda mengatur CronHPA dan HPA secara bersamaan, keduanya mungkin mencoba mengoperasikan scaleTargetRef yang sama secara bersamaan. Karena CronHPA dan HPA bersifat independen dan tidak saling mengetahui, kedua controller tersebut akan bekerja secara terpisah, dan operasi yang lebih akhir akan menimpa operasi sebelumnya.

Solution for CronHPA and HPA compatibility

Konflik dapat diselesaikan jika CronHPA mengetahui status terkini HPA. Untuk mencapai hal ini, ACS mengatur scaleTargetRef dalam CronHPA ke objek HPA itu sendiri, bukan ke objek workload akhir. Saat CronHPA melakukan operasi penskalaan, pertama-tama ia menemukan scaleTargetRef sebenarnya melalui objek HPA. Kemudian, ia menyesuaikan objek workload berdasarkan status tersebut. Hal ini mencegah penimpaan dan memastikan operasi penskalaan konsisten serta dapat diprediksi.

image

Berikut adalah templat definisi CronHPA yang kompatibel dengan HPA.

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

Dengan definisi CronHPA di atas, CronHPA dapat membaca nilai spec.minReplicas, spec.maxReplicas, dan status.desiredReplicas dari HPA. CronHPA juga mengetahui jumlah replika saat ini untuk spec.scaleTargetRef dalam HPA. CronHPA berinteraksi dengan HPA dengan menyesuaikannya. CronHPA membandingkan jumlah replika targetnya dengan jumlah replika saat ini dan mengambil nilai yang lebih besar untuk memutuskan apakah akan melakukan scale-out atau mengubah batas atas HPA. CronHPA membandingkan jumlah replika targetnya dengan konfigurasi HPA dan mengambil nilai yang lebih kecil untuk memutuskan apakah akan mengubah batas bawah HPA.

Tabel berikut menjelaskan aturan kompatibilitas CronHPA dan HPA dalam berbagai skenario.

HPA (min/max)

CronHPA

Deployment

Hasil Penskalaan

Deskripsi Aturan Kompatibilitas

1/10

5

5

  • HPA (min/max): 1/10

  • Deployment: 5

Ketika jumlah replika target CronHPA sama dengan jumlah replika saat ini, nilai min/max HPA dan jumlah replika aplikasi saat ini tidak berubah.

1/10

4

5

  • HPA (min/max): 1/10

  • Deployment: 5

Ketika jumlah replika target CronHPA lebih rendah daripada jumlah replika saat ini, jumlah replika saat ini dipertahankan.

1/10

6

5

  • HPA (min/max): 6/10

  • Deployment: 6

  • Ketika jumlah replika target CronHPA lebih tinggi daripada jumlah replika saat ini, jumlah replika target CronHPA digunakan.

  • Ketika jumlah replika target CronHPA lebih tinggi daripada replika minimum HPA (minReplicas), replika minimum HPA diperbarui.

5/10

4

5

  • HPA (min/max): 4/10

  • Deployment: 5

  • Ketika jumlah replika target CronHPA lebih rendah daripada jumlah replika saat ini, jumlah replika aplikasi saat ini dipertahankan.

  • Ketika jumlah replika target CronHPA lebih rendah daripada replika minimum HPA (minReplicas), replika minimum HPA diperbarui.

5/10

11

5

  • HPA (min/max): 11/11

  • Deployment: 11

  • Ketika jumlah replika target CronHPA lebih tinggi daripada jumlah replika saat ini, jumlah replika target CronHPA digunakan.

  • Ketika jumlah replika target CronHPA lebih tinggi daripada replika maksimum HPA (maxReplicas), replika maksimum HPA diperbarui.

Tabel berikut menjelaskan parameter-parameternya.

  • HPA (min/max): Jumlah replika minimum dan maksimum yang didefinisikan dalam HPA.

  • CronHPA: Jumlah replika yang ditetapkan oleh CronHPA.

  • Deployment: Jumlah replika sebelum aplikasi diskalakan.

Seperti yang ditunjukkan di atas, CronHPA tidak secara langsung menyesuaikan jumlah replika dalam Deployment. Sebaliknya, ia beroperasi pada Deployment melalui HPA. Hal ini menghindari konflik antara HPA dan CronHPA.