全部产品
Search
文档中心

Container Service for Kubernetes:Membuat CronHPA Kompatibel dengan HPA

更新时间:Jun 26, 2025

Cron Horizontal Pod Autoscaler (HPA) dan Horizontal Pod Autoscaler (HPA) tidak saling terkoordinasi. Jika baik CronHPA maupun HPA dikonfigurasi untuk aplikasi Anda, keduanya akan menskalakan aplikasi secara terpisah. Dalam situasi ini, aktivitas penskalaan yang lebih akhir akan menimpa yang sebelumnya. Untuk mengatasi masalah ini, Container Service for Kubernetes (ACK) menyediakan solusi agar CronHPA dapat berinteraksi dengan HPA tanpa konflik. Ketika ACK mendeteksi bahwa baik CronHPA maupun HPA diterapkan, ACK menetapkan HPA sebagai objek penskalaan dari CronHPA. CronHPA memicu HPA untuk menskalakan objek yang diskalakan oleh HPA, seperti Deployment, pada waktu yang dijadwalkan.

Catatan

Jika Anda menerapkan HPA dan CronHPA di Konsol ACK, Anda dapat melewati langkah-langkah yang dijelaskan dalam topik ini. Dalam hal ini, ACK secara otomatis melakukan operasi untuk membuat CronHPA kompatibel dengan HPA.

Perbandingan template CronHPA contoh dan template HPA contoh

Template CronHPA contoh

Template HPA contoh

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	
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-sample
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	

Template di atas menunjukkan informasi berikut:

  • Bidang scaleTargetRef digunakan dalam konfigurasi baik CronHPA maupun HPA untuk menentukan objek yang akan diskalakan.

  • Aturan crontab dalam bagian jobs dari konfigurasi CronHPA menentukan jumlah pod yang akan diskalakan pada waktu yang dijadwalkan.

  • HPA memicu aktivitas penskalaan berdasarkan penggunaan sumber daya.

Jika baik CronHPA maupun HPA diterapkan, CronHPA dan HPA mungkin menskalakan aplikasi yang sama yang ditentukan oleh scaleTargetRef. Untuk mengatasi masalah ini, Anda hanya perlu mengaktifkan CronHPA untuk mendeteksi status HPA.

Solusi

Mekanisme

Jika ACK mendeteksi bahwa baik CronHPA maupun HPA diterapkan, ACK menetapkan HPA sebagai objek penskalaan dari CronHPA. Dalam template HPA contoh, scaleTargetRef menentukan Deployment yang dikelola oleh HPA. Deployment tersebut terkait dengan ReplicaSet. Ketika HPA menskalakan Deployment, ReplicaSet menskalakan pod ke jumlah yang diinginkan.

Dengan menetapkan parameter scaleTargetRef dari CronHPA ke HPA, CronHPA dapat mengetahui nilai-nilai parameter minReplicas, maxReplicas, dan desiredReplicas dari HPA serta jumlah pod saat ini yang menjalankan aplikasi yang ditentukan oleh parameter scaleTargetRef dari HPA. Dengan cara ini, CronHPA membandingkan nilai-nilai tersebut dengan jumlah pod yang diinginkan oleh pekerjaan CronHPA untuk menentukan bagaimana penskalaan diimplementasikan pada aplikasi.

CronHPA tidak langsung mengubah jumlah pod untuk Deployment. Sebagai gantinya, CronHPA memicu HPA untuk menskalakan pod, sehingga mencegah konflik antara CronHPA dan HPA.

Konfigurasi contoh

Tetapkan parameter scaleTargetRef dari CronHPA ke HPA. Contoh:

Konfigurasi asli

Konfigurasi yang dimodifikasi

scaleTargetRef:
   apiVersion: apps/v1
   kind: Deployment
   name: nginx-deployment-basic
scaleTargetRef:
   apiVersion: autoscaling/v2
   # Tetapkan tipe sumber daya ke HPA.
   kind: HorizontalPodAutoscaler
   # Tentukan nama sumber daya HPA.
   name:  hpa-sample 

Misalkan Anda telah membuat sumber daya HPA bernama hpa-sample untuk menangani fluktuasi beban kerja harian dari pukul 09:00 (UTC+8) hingga 17:00 (UTC+8) setiap hari. Dalam hal ini, Anda dapat membuat pekerjaan CronHPA untuk menskalakan sumber daya HPA. Sebagai contoh, Anda dapat mengonfigurasi pekerjaan CronHPA untuk menambah skala aplikasi Anda pada pukul 09:00 (UTC+8) setiap hari dan mengurangi skala aplikasi Anda pada pukul 17:00 (UTC+8) setiap hari.

Blok kode sampel berikut memberikan contoh template 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:    # Tentukan informasi tentang sumber daya HPA.
      apiVersion: autoscaling/v2
      kind: HorizontalPodAutoscaler
      name: hpa-sample 
   jobs:
   - name: "scale-up-9am"  
     schedule: "0 0 9 * * * "
     targetSize: 20
     runOnce: false
   - name: "scale-down-5pm"   
     schedule: "0 0 17 * * *"
     targetSize: 3
     runOnce: false

Aturan kompatibilitas

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

Catatan

Daftar berikut menjelaskan header tabel:

  • HPA (min/maks): rasio parameter minReplicas HPA terhadap parameter maxReplicas HPA.

  • Jumlah replika pod yang diinginkan oleh CronHPA: jumlah replika pod yang diinginkan oleh CronHPA.

  • Jumlah replika pod saat ini: jumlah replika pod saat ini yang menjalankan aplikasi.

  • Jumlah replika pod akhir: jumlah replika pod ke mana aplikasi diskalakan.

Kondisi penskalaan

Hasil penskalaan

Deskripsi

HPA (min/maks)

Jumlah replika pod yang diinginkan oleh CronHPA

Jumlah replika pod saat ini

1/10

5

5

  • HPA (min/maks): 1/10.

  • Jumlah replika pod akhir: 5.

Jika jumlah pod yang diinginkan oleh CronHPA sama dengan jumlah pod saat ini, CronHPA tidak mengubah nilai parameter minReplicas dan maxReplicas dari HPA. Selain itu, tidak ada aktivitas penskalaan yang dipicu.

1/10

4

5

  • HPA (min/maks): 1/10.

  • Jumlah replika pod akhir: 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/maks): 6/10.

  • Jumlah replika pod akhir: 6.

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

  • Jika jumlah pod yang diinginkan oleh CronHPA lebih besar dari nilai parameter minReplicas dari HPA, CronHPA mengubah nilai minReplicas.

5/10

4

5

  • HPA (min/maks): 4/10.

  • Jumlah replika pod akhir: 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 parameter minReplicas dari HPA, CronHPA mengubah nilai minReplicas.

5/10

11

5

  • HPA (min/maks): 11/11.

  • Jumlah replika pod akhir: 11.

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

  • Jika jumlah pod yang diinginkan oleh CronHPA lebih besar dari nilai parameter maxReplicas dari HPA, CronHPA mengubah nilai maxReplicas.

Referensi

Untuk informasi lebih lanjut tentang HPA dan CronHPA, lihat Implementasi Horizontal Pod Autoscaler (HPA) dan Gunakan CronHPA untuk Penskalaan Horizontal Terjadwal.