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.
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 |
| |
Template di atas menunjukkan informasi berikut:
Bidang
scaleTargetRefdigunakan dalam konfigurasi baik CronHPA maupun HPA untuk menentukan objek yang akan diskalakan.Aturan crontab dalam bagian
jobsdari 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 |
| |
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: falseAturan kompatibilitas
Tabel berikut menjelaskan aturan kompatibilitas yang memungkinkan CronHPA dan HPA berinteraksi tanpa konflik.
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 |
| 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 |
| Jika jumlah pod yang diinginkan oleh CronHPA kurang dari jumlah pod saat ini, tidak ada aktivitas penskalaan yang dipicu. |
1/10 | 6 | 5 |
|
|
5/10 | 4 | 5 |
|
|
5/10 | 11 | 5 |
|
|
Referensi
Untuk informasi lebih lanjut tentang HPA dan CronHPA, lihat Implementasi Horizontal Pod Autoscaler (HPA) dan Gunakan CronHPA untuk Penskalaan Horizontal Terjadwal.