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
Anda telah membuat kluster ACS.
Anda telah terhubung ke kluster Kubernetes menggunakan kubectl.
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: falseField | 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 Misalnya, untuk mencegah tugas berjalan pada 15 November, tentukan excludeDates seperti pada contoh berikut. |
jobs | Anda dapat mendefinisikan beberapa tugas CronHPA dalam satu
|
Instal komponen CronHPA
Anda dapat menginstal komponen ack-kubernetes-cronhpa-controller sebagai berikut.
Masuk ke Konsol ACS. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster target. Di panel navigasi kiri, klik Add-ons.
Pada halaman Add-ons, klik tab Application Management. Temukan ack-kubernetes-cronhpa-controller, lalu klik Install. Pada kotak dialog yang muncul, klik OK.
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).

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.
Masuk ke Konsol ACS. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Workloads > Deployments.
Pada halaman Stateless, klik Details di kolom Actions untuk aplikasi tersebut.
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.
Klik Create di samping Cron-based Scaling (CronHPA). Pada kotak dialog Create, tetapkan parameter untuk tugas penskalaan terjadwal.

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
Ikuti langkah-langkah di Buat tugas terjadwal CronHPA untuk membuka halaman Container Scaling.
Pada tab Container Scaling, di bagian Cron-based Scaling (CronHPA), temukan tugas target dan klik Add or Edit Task di kolom Actions.
Pada kotak dialog Edit, klik Add Task untuk membuat tugas, atau klik tugas CronHPA yang sudah ada untuk mengubahnya. Lalu, klik OK.
CatatanAnda 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.

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.scaleTargetRefuntuk mendapatkan objek penskalaan.CronHPA menggunakan aturan crontab dalam
spec.jobsuntuk 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.
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: falseDengan 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 |
| 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 |
| Ketika jumlah replika target CronHPA lebih rendah daripada jumlah replika saat ini, jumlah replika saat ini dipertahankan. |
1/10 | 6 | 5 |
|
|
5/10 | 4 | 5 |
|
|
5/10 | 11 | 5 |
|
|
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.