All Products
Search
Document Center

Container Service for Kubernetes:Implementasikan penjadwalan elastis multitingkat dengan ack-co-scheduler

Last Updated:Nov 11, 2025

Dalam skenario Cloud Hibrida, penjadwalan elastis multitingkat memungkinkan bisnis Anda yang diterapkan di lingkungan on-premises dan cloud untuk lebih memanfaatkan keunggulan Cloud Hibrida. Fitur ini membantu mencapai Ketersediaan tinggi serta memungkinkan permintaan sumber daya elastis berdasarkan periode puncak dan tidak sibuk. Topik ini menjelaskan cara mengimplementasikan penjadwalan elastis multitingkat dengan ack-co-scheduler.

Prasyarat

  • Kluster terdaftar telah dibuat dan kluster Kubernetes eksternal telah dihubungkan ke kluster terdaftar tersebut. Untuk informasi selengkapnya, lihat Buat kluster terdaftar di Konsol ACK.

  • Tabel berikut mencantumkan versi yang diperlukan untuk komponen sistem.

    Komponen

    Persyaratan versi

    Kubernetes

    1.18.8 atau yang lebih baru

    Helm

    3.0 atau yang lebih baru

    Docker

    19.03.5

    Sistem operasi

    CentOS 7.6, CentOS 7.7, Ubuntu 16.04, Ubuntu 18.04, dan Alibaba Cloud Linux

Informasi latar belakang

Penjadwalan elastis multitingkat dalam skenario Cloud Hibrida merupakan perluasan dari penjadwalan prioritas sumber daya elastis kustom dengan penambahan tipe sumber daya elastis IDC. Penjadwalan prioritas sumber daya elastis kustom adalah kebijakan penjadwalan elastis yang disediakan oleh Alibaba Cloud. Selama Penerapan atau penskalaan aplikasi, Anda dapat menyesuaikan kebijakan sumber daya (ResourcePolicy) untuk mengatur urutan penjadwalan Pod instans aplikasi ke berbagai jenis sumber daya node. Selama skala-masuk, Pod dihapus dalam urutan terbalik dari urutan penjadwalan awal. Untuk informasi selengkapnya, lihat Penjadwalan prioritas sumber daya elastis kustom.

Batasan

  • Fitur ini bertentangan dengan pod-deletion-cost dan tidak dapat digunakan secara bersamaan. Untuk informasi selengkapnya tentang pod-deletion-cost, lihat pod-deletion-cost.

  • Fitur ini saat ini tidak mendukung penggunaan campuran dengan penjadwalan elastis ECI. Untuk informasi selengkapnya tentang penjadwalan elastis ECI, lihat Implementasikan penjadwalan elastis ECI menggunakan ElasticResource (Tidak lagi dipelihara).

  • Saat Anda memodifikasi ResourcePolicy, Pod yang telah dijadwalkan akan diskala-masuk berdasarkan urutan ResourcePolicy asli, sedangkan Pod yang baru dibuat akan diskala-masuk berdasarkan urutan ResourcePolicy yang diperbarui.

  • Saat digunakan bersama kelompok node elastis, fitur ini dapat menyebabkan pengusiran node dari kelompok node elastis menjadi tidak efektif. Saat menggunakan fitur ini, masukkan kelompok node elastis ke dalam Unit dan jangan atur bidang max untuk Unit yang berisi kelompok node elastis tersebut.

  • Jangan memodifikasi ResourcePolicy saat Pod yang terkait dengannya belum sepenuhnya dihapus.

Penggunaan

Gunakan konten berikut untuk membuat ResourcePolicy yang menentukan prioritas sumber daya elastis.

apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
  name: xxx
  namespace: xxx
spec:
  selector:
    key1: value1
  strategy: prefer
  units:
  - resource: idc
    max: 3
  - resource: ecs
    nodeSelector:
      key2: value2
  - resource: ecs
    nodeSelector:
      key3: value3
  - resource: eci
  • selector: Menentukan bahwa ResourcePolicy berlaku untuk Pod di namespace yang sama dengan label key1=value1.

  • strategy: Pemilihan strategi penjadwalan. Saat ini, hanya prefer yang didukung.

  • units: Unit penjadwalan yang ditentukan pengguna. Selama skala keluar, sumber daya ditambahkan sesuai urutan yang ditentukan dalam units. Selama skala-masuk, sumber daya dihapus dalam urutan terbalik.

    • resource: Jenis sumber daya elastis. Saat ini, eci, ecs, dan idc didukung.

    • nodeSelector: Menggunakan node labels untuk mengidentifikasi node dalam unit penjadwalan. Ini hanya berlaku untuk sumber daya ecs.

    • max: Jumlah maksimum instans yang dapat diterapkan dalam kelompok sumber daya ini.

Instal komponen terkait

Untuk menggunakan penjadwalan elastis multitingkat, Anda perlu menginstal komponen-komponen berikut.

  • ack-virtual-node: Komponen opsional. Anda perlu menginstal komponen ack-virtual-node di kluster terdaftar hanya jika ingin menggunakan kemampuan ECI elastis.

  • ack-co-scheduler: Komponen ini memungkinkan Anda menentukan objek CR ResourcePolicy kustom dan menggunakan fitur penjadwalan elastis multitingkat.

    Instal dengan onectl

    1. Instal onectl di mesin on-premises Anda. Untuk informasi selengkapnya, lihat Gunakan onectl untuk mengelola kluster terdaftar.

    2. Jalankan perintah berikut untuk menginstal komponen ack-virtual-node dan ack-co-scheduler.

      onectl addon install ack-virtual-node
      onectl addon install ack-co-scheduler

      Keluaran yang diharapkan:

      Addon ack-virtual-node, version **** installed.
      Addon ack-co-scheduler, version **** installed.

    Instal melalui konsol

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

    2. Pada halaman Clusters, klik nama kluster target. Di panel navigasi sebelah kiri, klik Components.

    3. Pada halaman Components, cari komponen ack-virtual-node dan ack-co-scheduler di kotak pencarian, lalu klik Install di pojok kanan bawah masing-masing kartu komponen.

    4. Pada kotak dialog yang muncul, klik OK.

Skenario 1: Penjadwalan prioritas multitingkat

  1. Gunakan konten YAML berikut untuk membuat ResourcePolicy yang menyesuaikan urutan penjadwalan kelompok node.

    apiVersion: scheduling.alibabacloud.com/v1alpha1
    kind: ResourcePolicy
    metadata:
      name: cost-balance-policy
    spec:
      selector:
        app: nginx
      strategy: prefer
      units:
      - resource: idc
      - resource: ecs
        nodeSelector:
          alibabacloud.com/nodepool-id=np7b30bxxxxxxa3940936c19ea42b  # Ganti dengan ID Node aktual Anda
      - resource: eci
  2. Gunakan konten YAML berikut untuk membuat Penyebaran yang menerapkan 2 Pod.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          annotations:
            addannotion: "true"
          labels:
            app: nginx      # Ini harus cocok dengan selector pada ResourcePolicy yang dibuat pada langkah sebelumnya.
        spec:
          schedulerName: ack-co-scheduler
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            resources:
              requests:
                cpu: 200m
              limits:
                cpu: 1
  3. Jalankan perintah berikut untuk membuat aplikasi Nginx.

    kubectl apply -f nginx.yaml
  4. Jalankan perintah berikut untuk memperluas kapasitas Pod.

    kubectl scale deployment nginx --replicas 10

    Keluaran yang diharapkan:

    deployment.apps/nginx scaled
  5. Jalankan perintah berikut untuk memeriksa status Pod.

    kubectl get pod -o wide

    Keluaran yang diharapkan:

    Perluas untuk melihat keluaran yang diharapkan

    NAME                          READY   STATUS   RESTARTS        AGE    IP             NODE                           NOMINATED NODE   READINESS GATES
    nginx-load-85b845cffd-58bhb   1/1     Running   0              32s   10.100.XX.XX    idc-oneline-hz-work****         <none>           <none>
    nginx-load-85b845cffd-7bv5h   1/1     Running   0              32s   10.200.XX.XX    virtual-kubelet-cn-****         <none>           <none>
    nginx-load-85b845cffd-9bsz2   1/1     Running   0              32s   10.200.XX.XX    cn-hangzhou.10.200.XX.XX        <none>           <none>
    nginx-load-85b845cffd-bh7bs   1/1     Running   0              32s   10.200.XX.XX    cn-hangzhou.10.200.XX.XX        <none>           <none>
    nginx-load-85b845cffd-crqhv   1/1     Running   0              32s   10.100.XX.XX    idc-oneline-hz-work****         <none>           <none>
    nginx-load-85b845cffd-crrnz   1/1     Running   0              32s   10.100.XX.XX    idc-oneline-hz-work****         <none>           <none>
    nginx-load-85b845cffd-h8swv   1/1     Running   0              32s   10.200.XX.XX    cn-hangzhou.10.200.XX.XX        <none>           <none>
    nginx-load-85b845cffd-hfdkv   1/1     Running   0              32s   10.200.XX.XX    virtual-kubelet-cn-****         <none>           <none>
    nginx-load-85b845cffd-ttrhg   1/1     Running   0              32s   10.100.XX.XX    idc-oneline-hz-work****         <none>           <none>
    nginx-load-85b845cffd-vf8lg   1/1     Running   0              32s   10.200.XX.XX    cn-hangzhou.10.200.XX.XX        <none>           <none>

    Setelah mengontrol jumlah replika untuk aplikasi Nginx dan memeriksa hasil penjadwalan, Anda dapat melihat bahwa strategi penerapan sesuai harapan: urutan penjadwalan sumber daya memprioritaskan sumber daya IDC, diikuti oleh sumber daya ECS, dan terakhir sumber daya ECI.

Skenario 2: Penerapan hibrida lintas lingkungan on-premises dan cloud

  1. Gunakan konten YAML berikut untuk membuat ResourcePolicy yang menyesuaikan urutan penjadwalan kelompok node.

    apiVersion: scheduling.alibabacloud.com/v1alpha1
    kind: ResourcePolicy
    metadata:
      name: load-balance-policy
    spec:
      selector:
        app: nginx
      strategy: prefer
      units:
      - resource: idc
        max: 2
      - resource: ecs
        nodeSelector:
          alibabacloud.com/nodepool-id=np7b30b52e99194275a3940936c19ea42b
        max: 4
      - resource: eci
  2. Gunakan konten YAML berikut untuk membuat Penyebaran yang menerapkan 2 Pod.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          annotations:
            addannotion: "true"
          labels:
            app: nginx    # Ini harus cocok dengan selector pada ResourcePolicy yang dibuat pada langkah sebelumnya.
        spec:
          schedulerName: ack-co-scheduler
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            resources:
              requests:
                cpu: 200m
              limits:
                cpu: 1                      
  3. Jalankan perintah berikut untuk membuat aplikasi Nginx.

    kubectl apply -f nginx.yaml
  4. Jalankan perintah berikut untuk memperluas kapasitas Pod.

    kubectl scale deployment nginx --replicas 10

    Keluaran yang diharapkan:

    deployment.apps/nginx scaled
  5. Jalankan perintah berikut untuk memeriksa status Pod.

    kubectl get pod -o wide

    Keluaran yang diharapkan:

    Perluas untuk melihat keluaran yang diharapkan

    NAME                          READY   STATUS   RESTARTS        AGE    IP             NODE                           NOMINATED NODE   READINESS GATES
    nginx-load-85b845cffd-6r7lv   1/1     Running   0              33s   10.200.XX.XX    virtual-kubelet-cn-****         <none>           <none>
    nginx-load-85b845cffd-dk6nr   1/1     Running   0              33s   10.100.XX.XX    idc-oneline-hz-work****         <none>           <none>
    nginx-load-85b845cffd-lkgxk   1/1     Running   0              33s   10.200.XX.XX    virtual-kubelet-cn-****         <none>           <none>
    nginx-load-85b845cffd-r8ngs   1/1     Running   0              33s   10.200.XX.XX    cn-hangzhou.10.200.XX.XX        <none>           <none>
    nginx-load-85b845cffd-rftlj   1/1     Running   0              33s   10.100.XX.XX    idc-oneline-hz-work****         <none>           <none>
    nginx-load-85b845cffd-rrht6   1/1     Running   0              33s   10.200.XX.XX    cn-hangzhou.10.200.XX.XX        <none>           <none>
    nginx-load-85b845cffd-skrqm   1/1     Running   0              33s   10.200.XX.XX    cn-hangzhou.10.200.XX.XX        <none>           <none>
    nginx-load-85b845cffd-tnrqf   1/1     Running   0              33s   10.200.XX.XX    virtual-kubelet-cn-****         <none>           <none>
    nginx-load-85b845cffd-tv7rt   1/1     Running   0              33s   10.200.XX.XX    virtual-kubelet-cn-****         <none>           <none>
    nginx-load-85b845cffd-vprqr   1/1     Running   0              33s   10.200.XX.XX    cn-hangzhou.10.200.XX.XX        <none>           <none>

    Setelah mengontrol jumlah replika untuk aplikasi Nginx dan memeriksa hasil penjadwalan, Anda dapat melihat bahwa strategi penerapan sesuai harapan: ketika sumber daya mencukupi, 2 Pod berada di IDC, 4 Pod berada di ECS, dan sisa replika berada di ECI.