全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan CronHPA untuk penskalaan horizontal terjadwal

更新时间:Nov 11, 2025

Jika pemanfaatan sumber daya aplikasi Anda menunjukkan perubahan periodik dan Anda perlu menskalakan pod berdasarkan jadwal mirip Crontab, Anda dapat menggunakan Penjadwal Horizontal Pod Autoscaler (CronHPA) untuk mencapai penskalaan terjadwal. CronHPA cocok untuk skenario di mana lalu lintas bisnis memiliki periode puncak yang signifikan atau tugas terjadwal.

Tips pra-bacaan

Kluster ACK menyediakan berbagai solusi penskalaan beban kerja (elastisitas lapisan penjadwalan) dan penskalaan node (elastisitas lapisan sumber daya). Kami menyarankan Anda membaca Penyesuaian Skala Otomatis sebelum menggunakan topik ini untuk memahami skenario yang berlaku dan batasan berbagai solusi tersebut.

Templat dan parameter CronHPA

CronHPA diimplementasikan berdasarkan kubernetes-cronhpa-controller. Kubernetes-cronhpa-controller adalah pengontrol penskalaan horizontal pod berbasis waktu yang menggunakan sintaks mirip Crontab untuk mengonfigurasi kebijakan penskalaan terjadwal, sehingga memungkinkan penyesuaian sumber daya dinamis dalam skenario dengan pola lalu lintas siklikal. CronHPA dapat diterapkan pada objek Kubernetes apa pun yang mendukung subresource penskalaan (Scale Subresource), seperti Deployment dan StatefulSet.

Bentangkan untuk melihat contoh dan parameter

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  # Nama beban kerja yang terkait
  excludeDates:                 # Tanggal pengecualian tugas (format Cron), penskalaan tidak akan dilakukan pada tanggal-tanggal ini
  - "* * * 15 11 *"             # Kecualikan 15 November
  - "* * * * * 5"               # Kecualikan hari Jumat
  jobs:
  - name: "scale-down"
    schedule: "30 */1 * * * *"  # Dipicu pada detik ke-30 setiap menit (misalnya, 08:00:30, 08:01:30)
    targetSize: 1               # Jumlah replika target
    runOnce: false              # Mode eksekusi tugas (apakah hanya dijalankan sekali), default adalah false
  - name: "scale-up"
    schedule: "0 */1 * * * *"  # Dipicu pada detik ke-0 setiap menit (misalnya, 08:00:00, 08:01:00)
    targetSize: 3              # Jumlah replika target
    runOnce: false             

Tabel berikut menjelaskan parameter dalam konfigurasi CronHPA.

Parameter

Deskripsi

scaleTargetRef

Menentukan objek yang akan diskalakan. Jika objek tersebut mendukung subresource penskalaan (Scale Subresource), CronHPA dapat mendukungnya.

excludeDates

Array tanggal. Tugas dilewati pada tanggal yang sesuai dengan deskripsi excludeDates. Satuan: hari.

"* * * * * *" merepresentasikan "<Detik> <Menit> <Jam> <Hari dalam bulan> <Bulan> <Hari dalam minggu>".

Jika Anda ingin mengecualikan tugas pada 15 November, tentukan excludeDates seperti pada contoh berikut.

excludeDates:
  - "* * * 15 11 *"

jobs

Anda dapat mengatur beberapa tugas CronHPA di bagian spec. Setiap tugas CronHPA dapat dikonfigurasi dengan bidang-bidang berikut:

  • name: Nama tugas CronHPA.

  • schedule: Sintaks kubernetes-cronhpa-controller (berbasis pustaka go-cron) mirip dengan Crontab standar tetapi mendukung ekspresi yang lebih fleksibel. Atur secara ketat sesuai dengan deskripsi format di bawah ini.

    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 selama penjadwalan.

  • runOnce: Ketika diatur ke true, tugas hanya dijalankan sekali dan keluar setelah eksekusi pertama.

Langkah 1: Instal komponen CronHPA

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

  2. Pada halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, klik Add-ons.

  3. Klik tab Manage Applications, temukan ack-kubernetes-cronhpa-controller, lalu ikuti petunjuk di halaman untuk menyelesaikan instalasi komponen.

Langkah 2: Buat tugas CronHPA

Sebelum membuat tugas CronHPA untuk suatu aplikasi, pastikan komponen CronHPA di kluster berjalan normal dan hanya ada satu objek tugas HPA untuk aplikasi tersebut. Contoh berikut menunjukkan cara mengaktifkan tugas CronHPA untuk aplikasi tanpa status. Langkah-langkah untuk jenis beban kerja lainnya serupa.

Buat tugas CronHPA saat membuat aplikasi

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

  2. Pada halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, pilih Workloads > Deployments.

  3. Pada halaman Deployments, klik Create From Image.

  4. Pada halaman Create, ikuti petunjuk di halaman untuk menyelesaikan konfigurasi informasi dasar aplikasi, konfigurasi kontainer, konfigurasi layanan, dan konfigurasi penskalaan terjadwal guna membuat Deployment yang mendukung CronHPA.

    Untuk informasi lebih lanjut tentang langkah dan parameter, lihat Buat aplikasi tanpa status menggunakan Deployment. Daftar berikut menjelaskan parameter utama.

    • Basic Information: Konfigurasikan informasi dasar aplikasi, seperti nama dan jumlah replika.

    • Container: Konfigurasikan citra, CPU, dan sumber daya memori yang dibutuhkan oleh kontainer.

    • Advanced:

      • Pada bagian Access Control, klik Service yang sesuai dengan Create untuk mengonfigurasi layanan.

      • Pada bagian Scaling, centang CronHPA untuk Enable, ikuti petunjuk di halaman untuk menginstal komponen (abaikan jika sudah diinstal), lalu konfigurasikan kondisi dan parameter untuk penskalaan terjadwal.

        • Job Name: Nama tugas CronHPA.

        • Desired Number Of Replicas: Saat waktu terjadwal tiba, jumlah replika aplikasi secara otomatis diskalakan ke nilai ini.

        • Scaling Schedule: Tetapkan periode penjadwalan. Untuk informasi lebih lanjut, lihat Kubernetes CronHPA Controller.

Buat tugas CronHPA untuk aplikasi yang sudah ada

Buat di halaman Workloads

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

  2. Pada halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, pilih Workloads > Deployments.

  3. Klik beban kerja target, lalu klik tab Pod Scaling. Pada bagian CronHPA, klik Create untuk mengonfigurasi CronHPA.

    create

    Parameter

    Deskripsi

    Job Name

    Nama tugas CronHPA.

    Desired Number Of Replicas

    Saat waktu terjadwal tiba, jumlah replika aplikasi secara otomatis diskalakan ke nilai ini.

    Scaling Schedule

    Periode penjadwalan yang ditetapkan. Untuk informasi lebih lanjut tentang menetapkan periode penjadwalan untuk tugas CronHPA, lihat AliyunContainerService/kubernetes-cronhpa-controller.

Buat di halaman Workload Scaling

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

  2. Pada halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel sisi kiri, klik Workload Scaling.

  3. Di pojok kanan atas halaman, klik Create Auto Scaling.

  4. Klik tab HPA And CronHPA, lalu Select The Target Workload. Pada bagian Configure Scaling Policy, centang CronHPA.

    Anda dapat menambahkan beberapa tugas CronHPA. Ikuti petunjuk di halaman untuk mengonfigurasi informasi kebijakan CronHPA, lalu klik OK.

    • CronHPA Name: Masukkan nama CronHPA.

    • Job Name: Masukkan nama tugas CronHPA.

    • Desired Number Of Replicas: Tetapkan jumlah replika target saat waktu terjadwal tiba.

    • Scaling Schedule: Tetapkan periode penjadwalan. Untuk informasi lebih lanjut, lihat Kubernetes CronHPA Controller.

Gunakan kubectl

  1. Buat dan salin konten berikut ke file cronhpa.yaml.

    apiVersion: autoscaling.alibabacloud.com/v1beta1
    kind: CronHorizontalPodAutoscaler
    metadata:
      name: cronhpa-sample
      namespace: default 
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx-deployment-basic  
      excludeDates:                 
      - "* * * 15 11 *"
      - "* * * * * 5"
      jobs:
      - name: "scale-down"
        schedule: "30 */1 * * * *"  
        targetSize: 1  
        runOnce: false              
      - name: "scale-up"
        schedule: "0 */1 * * * *"  
        targetSize: 3              
        runOnce: true         
  2. Jalankan perintah berikut untuk membuat tugas CronHPA untuk beban kerja yang sudah ada.

    kubectl apply -f cronhpa.yaml

    Hasil yang diharapkan:

    cronhorizontalpodautoscaler.autoscaling.alibabacloud.com/cronhpa-sample created

Operasi terkait

Lihat, tambahkan, atau ubah tugas CronHPA

Setelah membuat tugas CronHPA, Anda dapat melihat status dan daftar tugas CronHPA di daftar CronHPA. Anda dapat menambahkan tugas CronHPA atau mengubah konfigurasi CronHPA yang sudah ada melalui titik masuk berikut.

  • Titik masuk Workload Scaling

    1. Pada halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel sisi kiri, klik Workload Scaling.

    2. Klik tab CronHPA, lalu klik Edit di kolom Actions dari tugas CronHPA target.

  • Titik masuk Workloads (menggunakan aplikasi tanpa status sebagai contoh; langkah untuk jenis beban kerja lainnya serupa)

    1. Pada halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, pilih Workloads > Deployments.

    2. Pada halaman Deployments, klik Details di kolom Actions dari Deployment target. Lalu klik tab Pod Scaling. Di bagian CronHPA, klik Add Or Edit Job di kolom Actions.

Implementasikan koordinasi antara CronHPA dan HPA

Penjadwal Horizontal Pod Autoscaler (CronHPA) dan Horizontal Pod Autoscaler (HPA) tidak saling mengetahui keberadaan masing-masing. Jika kedua CronHPA dan HPA dikonfigurasi untuk aplikasi Anda, CronHPA dan HPA akan menskalakan aplikasi Anda secara terpisah. Dalam kasus ini, aktivitas penskalaan yang lebih baru akan menimpa yang sebelumnya. Untuk mengatasi masalah ini, Container Service for Kubernetes (ACK) menyediakan solusi agar CronHPA dapat berinteraksi dengan HPA tanpa konflik. Jika ACK mendeteksi bahwa CronHPA dan HPA keduanya diterapkan, ACK akan menetapkan HPA sebagai objek penskalaan CronHPA. CronHPA memicu HPA untuk menskalakan objek yang diskalakan oleh HPA, seperti Deployment, pada waktu terjadwal.

Untuk informasi lebih lanjut, lihat Implementasikan Koordinasi Antara CronHPA dan HPA.