全部产品
Search
文档中心

Container Compute Service:Klaster ACK Pro mendukung penjadwalan kolokasi Instance ECS dan daya komputasi ACS

更新时间:Jul 06, 2025

Penjadwalan sumber daya berbasis prioritas disediakan oleh Alibaba Cloud untuk memenuhi kebutuhan elastisitas dalam penjadwalan pod. Saat meluncurkan aplikasi atau melakukan penskalaan, Anda dapat mengonfigurasi kebijakan sumber daya kustom untuk menjadwalkan pod aplikasi ke Container Compute Service (ACS) dari Alibaba Cloud. Dengan cara ini, Instance Elastic Compute Service (ECS) dan pod ACS dapat ditempatkan secara kolokasi.

Penting

Pada kube-scheduler v1.x.x-aliyun-6.4 dan versi lebih baru, parameter ignorePreviousPod dari ResourcePolicy diatur ke False dan parameter ignoreTerminatingPod diatur ke True secara default. ResourcePolicy yang ada yang menggunakan parameter sebelumnya tidak terpengaruh oleh perubahan ini atau pembaruan lebih lanjut.

Batasan

  • Jika Anda menggunakan fitur ini bersama dengan pod-deletion-cost dalam skenario penskalaan masuk, Anda tidak dapat melakukan penskalaan masuk dalam urutan terbalik.

  • Parameter max hanya tersedia jika klaster Anda menjalankan Kubernetes 1.26 atau lebih baru dan versi scheduler yang terinstal di klaster Anda adalah 6.7 atau lebih baru.

  • Jika Anda menggunakan fitur ini bersama dengan pool node elastis, node yang tidak valid mungkin ditambahkan ke pool node elastis. Pastikan bahwa pool node elastis termasuk dalam unit. Jangan tentukan parameter max untuk unit-unit tersebut.

Cara Penggunaan

Untuk informasi lebih lanjut tentang fitur penjadwalan berbasis prioritas dari klaster Container Service for Kubernetes (ACK) Pro, lihat Konfigurasikan penjadwalan sumber daya berbasis prioritas.

Prasyarat

  • Klaster ACK Pro yang menjalankan Kubernetes 1.26 atau lebih baru telah dibuat. Untuk informasi lebih lanjut tentang cara memperbarui versi Kubernetes dari klaster ACK, lihat Perbarui versi Kubernetes dari klaster ACK.

  • Versi scheduler tertentu diperlukan berdasarkan versi Kubernetes dari klaster. Tabel berikut menjelaskan versi scheduler yang diperlukan dan versi node virtual untuk setiap versi Kubernetes.

    Versi Kubernetes

    Versi Scheduler

    Versi Node Virtual

    ≥ V1.26

    ≥ V1.26.3-aliyun-6.7.0

    ≥ V2.13.0

  • Untuk informasi lebih lanjut tentang fitur-fitur dari versi scheduler yang berbeda, lihat kube-scheduler.

  • Untuk informasi lebih lanjut tentang cara mengaktifkan daya komputasi ACS untuk klaster ACK Pro, lihat Gunakan daya komputasi ACS dalam klaster ACK Pro.

Penjadwalan kolokasi Instance ECS dan daya komputasi ACS

Anda ingin menjadwalkan pod dari Deployment ke beberapa jenis sumber daya, seperti instance ECS berlangganan, instance ECS bayar sesuai pemakaian, dan pod ACS. Untuk mengurangi biaya sumber daya, Anda ingin menjadwalkan pod ke sumber daya berdasarkan prioritas berikut: instance ECS berlangganan > instance ECS bayar sesuai pemakaian > pod ACS. Dalam aktivitas penskalaan masuk, Anda ingin menghapus pod dari sumber daya ini berdasarkan urutan berikut: pod ACS, instance ECS bayar sesuai pemakaian, dan instance ECS berlangganan. Dalam contoh ini, setiap node memiliki 2 vCore dan 4 GB memori. Lakukan langkah-langkah berikut untuk mengonfigurasi penjadwalan kolokasi Instance ECS dan daya komputasi ACS:

  1. Jalankan perintah berikut untuk menambahkan label yang menunjukkan metode pembayaran yang berbeda ke node. Anda juga dapat menggunakan pool node untuk secara otomatis menambahkan label ke node.

    kubectl label node cn-beijing.10.0.3.137 paidtype=subscription 
    kubectl label node cn-beijing.10.0.3.138 paidtype=subscription
    kubectl label node cn-beijing.10.0.6.46 paidtype=pay-as-you-go
    kubectl label node cn-beijing.10.0.6.47 paidtype=pay-as-you-go

    Node label deskripsi.

    • paidtype=subscription: berlangganan

    • paidtype=pay-as-you-go: bayar sesuai pemakaian

  2. Buat ResourcePolicy berdasarkan konten berikut:

    apiVersion: scheduling.alibabacloud.com/v1alpha1
    kind: ResourcePolicy
    metadata:
      name: nginx
      namespace: default
    spec:
      selector:
        app: nginx               # Anda harus menentukan label pod yang ingin Anda terapkan ResourcePolicy.
      strategy: prefer
      units:
      - resource: ecs
        nodeSelector:
          paidtype: subscription
      - resource: ecs
        nodeSelector:
          paidtype: pay-as-you-go
      - resource: acs 
  3. Gunakan template berikut untuk membuat Deployment yang menyediakan dua pod:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          labels:
            app: nginx                                           # Label pod harus sama dengan yang Anda tentukan untuk selector dalam ResourcePolicy.
            alibabacloud.com/compute-class: general-purpose      # Kelas komputasi dari daya komputasi ACS. Nilai default: general-purpose.
            alibabacloud.com/compute-qos: default                # Kelas kualitas layanan (QoS) dari pod ACS. Nilai default: default.
        spec:
          containers:
          - name: nginx
            image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6
            resources:
              limits:
                cpu: 2
              requests:
                cpu: 2
  4. Sebarkan aplikasi NGINX dan tanyakan pod.

    1. Jalankan perintah berikut untuk menyebarkan aplikasi NGINX:

      kubectl apply -f nginx.yaml 

      Output yang diharapkan:

      deployment.apps/nginx created
    2. Jalankan perintah berikut untuk menanyakan pod:

      kubectl get pods -o wide

      Output yang diharapkan:

      NAME                    READY   STATUS    RESTARTS   AGE   IP               NODE                    NOMINATED NODE   READINESS GATES
      nginx-9cdf7bbf9-b****   1/1     Running   0          66s   172.29.112.215   cn-beijing.10.0.3.137   <none>           <none>
      nginx-9cdf7bbf9-r****   1/1     Running   0          66s   172.29.113.23    cn-beijing.10.0.3.138   <none>           <none>

      Output menunjukkan bahwa dua pod dijadwalkan ke node yang memiliki paidtype=subscription label. Dalam contoh ini, cn-beijing.10.0.3.137 dan cn-beijing.10.0.3.138 digunakan.

  5. Tambahkan pod untuk aplikasi NGINX.

    1. Jalankan perintah berikut untuk meningkatkan jumlah pod menjadi empat:

      kubectl scale deployment nginx --replicas 4

      Output yang diharapkan:

      deployment.apps/nginx scaled
    2. Jalankan perintah berikut untuk menanyakan status pod:

      kubectl get pods -o wide

      Output yang diharapkan:

      NAME                    READY   STATUS    RESTARTS   AGE     IP               NODE                    NOMINATED NODE   READINESS GATES
      nginx-9cdf7bbf9-4****   1/1     Running   0          16s     172.29.113.155   cn-beijing.10.0.6.47    <none>           <none>
      nginx-9cdf7bbf9-b****   1/1     Running   0          3m48s   172.29.112.215   cn-beijing.10.0.3.137   <none>           <none>
      nginx-9cdf7bbf9-f****   1/1     Running   0          16s     172.29.113.88    cn-beijing.10.0.6.46    <none>           <none>
      nginx-9cdf7bbf9-r****   1/1     Running   0          3m48s   172.29.113.23    cn-beijing.10.0.3.138   <none>           <none>

      Output menunjukkan bahwa pod baru dijadwalkan ke node yang memiliki paidtype=pay-as-you-go label karena node yang memiliki paidtype=subscription label tidak mencukupi. Dalam contoh ini, cn-beijing.10.0.6.46 dan cn-beijing.10.0.6.47 digunakan.

    3. Jalankan perintah berikut untuk meningkatkan jumlah pod menjadi enam:

      kubectl scale deployment nginx --replicas 6

      Output yang diharapkan:

      deployment.apps/nginx scaled
    4. Jalankan perintah berikut untuk menanyakan status pod:

      kubectl get pods -o wide

      Output yang diharapkan:

      NAME                    READY   STATUS    RESTARTS   AGE     IP               NODE                           NOMINATED NODE   READINESS GATES
      nginx-9cdf7bbf9-4****   1/1     Running   0          3m10s   172.29.113.155   cn-beijing.10.0.6.47           <none>           <none>
      nginx-9cdf7bbf9-b****   1/1     Running   0          6m42s   172.29.112.215   cn-beijing.10.0.3.137          <none>           <none>
      nginx-9cdf7bbf9-f****   1/1     Running   0          3m10s   172.29.113.88    cn-beijing.10.0.6.46           <none>           <none>
      nginx-9cdf7bbf9-r****   1/1     Running   0          6m42s   172.29.113.23    cn-beijing.10.0.3.138          <none>           <none>
      nginx-9cdf7bbf9-s****   1/1     Running   0          36s     10.0.6.68        virtual-kubelet-cn-beijing-j   <none>           <none>
      nginx-9cdf7bbf9-v****   1/1     Running   0          36s     10.0.6.67        virtual-kubelet-cn-beijing-j   <none>           <none>

      Output menunjukkan bahwa instance ECS kekurangan sumber daya. Pod dijadwalkan ke ACS. Dalam contoh ini, virtual-kubelet-cn-beijing-j digunakan.

  6. Kurangi pod untuk aplikasi NGINX.

    1. Jalankan perintah berikut untuk mengurangi jumlah pod menjadi empat:

      kubectl scale deployment nginx --replicas 4

      Output yang diharapkan:

      deployment.apps/nginx scaled
    2. Jalankan perintah berikut untuk menanyakan status pod:

      kubectl get pods -o wide

      Output yang diharapkan:

      NAME                    READY   STATUS        RESTARTS   AGE     IP               NODE                           NOMINATED NODE   READINESS GATES
      nginx-9cdf7bbf9-4****   1/1     Running       0          4m59s   172.29.113.155   cn-beijing.10.0.6.47           <none>           <none>
      nginx-9cdf7bbf9-b****   1/1     Running       0          8m31s   172.29.112.215   cn-beijing.10.0.3.137          <none>           <none>
      nginx-9cdf7bbf9-f****   1/1     Running       0          4m59s   172.29.113.88    cn-beijing.10.0.6.46           <none>           <none>
      nginx-9cdf7bbf9-r****   1/1     Running       0          8m31s   172.29.113.23    cn-beijing.10.0.3.138          <none>           <none>
      nginx-9cdf7bbf9-s****   1/1     Terminating   0          2m25s   10.0.6.68        virtual-kubelet-cn-beijing-j   <none>           <none>
      nginx-9cdf7bbf9-v****   1/1     Terminating   0          2m25s   10.0.6.67        virtual-kubelet-cn-beijing-j   <none>           <none>

      Output menunjukkan bahwa pod yang berjalan di ACS dihapus.

    3. Jalankan perintah berikut untuk mengurangi jumlah pod menjadi dua:

      kubectl scale deployment nginx --replicas 2

      Output yang diharapkan:

      deployment.apps/nginx scaled
    4. Jalankan perintah berikut untuk menanyakan status pod:

      kubectl get pods -o wide

      Output yang diharapkan:

      NAME                    READY   STATUS        RESTARTS   AGE     IP               NODE                    NOMINATED NODE   READINESS GATES
      nginx-9cdf7bbf9-4****   0/1     Terminating   0          6m43s   172.29.113.155   cn-beijing.10.0.6.47    <none>           <none>
      nginx-9cdf7bbf9-b****   1/1     Running       0          10m     172.29.112.215   cn-beijing.10.0.3.137   <none>           <none>
      nginx-9cdf7bbf9-f****   0/1     Terminating   0          6m43s   172.29.113.88    cn-beijing.10.0.6.46    <none>           <none>
      nginx-9cdf7bbf9-r****   1/1     Running       0          10m     172.29.113.23    cn-beijing.10.0.3.138   <none>           <none>

      Output menunjukkan bahwa pod pada node yang memiliki paidtype=pay-as-you-go label dihapus.

    5. Tunggu beberapa menit dan jalankan perintah berikut untuk menanyakan status pod lagi:

      kubectl get pods -o wide

      Output yang diharapkan:

      NAME                    READY   STATUS    RESTARTS   AGE   IP               NODE                    NOMINATED NODE   READINESS GATES
      nginx-9cdf7bbf9-b****   1/1     Running   0          11m   172.29.112.215   cn-beijing.10.0.3.137   <none>           <none>
      nginx-9cdf7bbf9-r****   1/1     Running   0          11m   172.29.113.23    cn-beijing.10.0.3.138   <none>           <none>

      Output menunjukkan bahwa pod hanya berjalan pada node dengan paidtype=subscription label.

Referensi

  • Saat Anda menyebarkan klaster ACK, Anda dapat mengonfigurasi toleransi dan afinitas node untuk memungkinkan scheduler hanya menggunakan instance ECS atau daya komputasi ACS, atau mengizinkan scheduler secara otomatis mengajukan sumber daya komputasi ACS ketika instance ECS tidak mencukupi. Anda dapat mengonfigurasi kebijakan penjadwalan yang berbeda untuk menskalakan sumber daya dalam skenario yang berbeda. Untuk informasi lebih lanjut, lihat Gunakan daya komputasi ACS dalam klaster ACK Pro.

  • Ketersediaan tinggi dan performa tinggi sangat penting untuk pekerjaan terdistribusi. Dalam klaster ACK Pro, Anda dapat menggunakan semantik penjadwalan asli Kubernetes untuk menyebarkan pekerjaan terdistribusi di zona untuk ketersediaan tinggi. Anda juga dapat menggunakan semantik penjadwalan asli Kubernetes untuk menyebarkan pekerjaan terdistribusi di zona tertentu berdasarkan pengaturan afinitas untuk performa tinggi. Untuk informasi lebih lanjut, lihat Penjadwalan afinitas node.