All Products
Search
Document Center

Container Service for Kubernetes:Jadwalkan pod yang merupakan beban kerja elastis ke ECI dengan menggunakan ack-kubernetes-elastic-workload (pemeliharaan dihentikan)

Last Updated:Jul 02, 2025

Komponen ack-kubernetes-elastic-workload memantau beban kerja Kubernetes, mereplikasi, dan menghasilkan beban kerja berdasarkan kebijakan penjadwalan unit elastis yang telah ditentukan sebelumnya. Jika jumlah replika dalam beban kerja elastis mencapai ambang batas, jumlah replika yang dijadwalkan pada beban kerja sumber dan unit elastis disesuaikan secara dinamis. Topik ini menjelaskan cara menginstal dan menggunakan ack-kubernetes-elastic-workload dalam kluster Container Service for Kubernetes (ACK).

Penting

Anda masih dapat menggunakan Elastic Workload. Namun, Elastic Workload telah berada dalam status pengembangan tidak aktif sejak Juni 2024. Kami menyarankan Anda untuk menggunakan UnitedDeployment sebagai gantinya.

Untuk informasi lebih lanjut tentang solusi penjadwalan node virtual, perbandingan, dan rekomendasi pemilihan, lihat Jadwalkan pod ke node virtual.

Prasyarat

Komponen ack-virtual-node diterapkan di kluster, dan versinya adalah v2.0.0.102-045a06eb4-aliyun atau yang lebih baru. Untuk informasi lebih lanjut, lihat Jadwalkan pod ke instance kontainer elastis.

Batasan

ack-kubernetes-elastic-workload tidak mendukung beban kerja OpenKruise. Kami menyarankan Anda untuk menggunakan kontroler UnitdDeployment.

Terapkan ack-kubernetes-elastic-workload

  1. Masuk ke Konsol ACK.

  2. Di panel navigasi kiri Konsol ACK, pilih Marketplace > App Catalog.

  3. Di halaman Marketplace, klik tab App Catalog. Cari dan klik ack-kubernetes-elastic-workload.

  4. Di halaman ack-kubernetes-elastic-workload, klik Deploy.

  5. Di panel Deploy, pilih kluster dan namespace, lalu klik Next.

  6. Di langkah Parameters, atur parameter dan klik OK.

    Setelah menerapkan ack-kubernetes-elastic-workload, buka halaman detail kluster. Di panel navigasi kiri, pilih Applications > Helm. Anda dapat melihat bahwa ack-kubernetes-elastic-workload telah diterapkan di kluster.

Menggunakan beban kerja elastis

Sebagai contoh, kapasitas direncanakan untuk aplikasi dan aplikasi tersebut diharapkan memiliki hingga empat replika untuk berjalan pada Instance Elastic Compute Service (ECS). Dua replika dipertahankan selama jam-jam sepi. Jika jumlah replika melebihi empat, replika tambahan dijadwalkan ke node virtual. Ini mencegah aplikasi lain pada instance ECS terpengaruh.

Anda harus menyelesaikan masalah berikut saat menggunakan Kubernetes untuk menjadwalkan pod dan mengelola siklus hidup pod:

  • Kontrol bagaimana kebijakan penjadwalan berubah ketika jumlah replika mencapai nilai tertentu.

  • Bagaimana memprioritaskan pod tertentu saat Kubernetes mengelola siklus hidup pod.

Bagian ini menjelaskan cara menggunakan ack-kubernetes-elastic-workload untuk melakukan operasi di atas untuk beban kerja elastis.

  1. Buat Deployment.

    apiVersion: apps/v1 # untuk versi sebelum 1.8.0 gunakan apps/v1beta1
    kind: Deployment
    metadata:
      name: nginx-deployment-basic
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
        #  nodeSelector:
        #    env: test-team
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
            resources:
              limits:
                cpu: "500m"
  2. Tentukan beban kerja elastis.

    apiVersion: autoscaling.alibabacloud.com/v1beta1
    kind: ElasticWorkload
    metadata:
      name: elasticworkload-sample
    spec:
      sourceTarget:
        name: nginx-deployment-basic
        kind: Deployment
        apiVersion: apps/v1
        min: 2        # Jumlah minimum replika.
        max: 4        # Jumlah maksimum replika.
      replicas: 6
      elasticUnit:
      - name: virtual-kubelet
        labels:
          alibabacloud.com/eci: "true"

    ack-kubernetes-elastic-workload digunakan mirip dengan HPA. ack-kubernetes-elastic-workload diterapkan sebagai add-on eksternal dan tidak memengaruhi bisnis Anda yang ada.

    调度

    Komponen ack-kubernetes-elastic-workload memantau beban kerja Kubernetes, mereplikasi, dan menghasilkan beban kerja berdasarkan kebijakan penjadwalan unit elastis yang telah ditentukan sebelumnya. Jika jumlah replika dalam beban kerja elastis mencapai ambang batas, jumlah replika yang dijadwalkan pada beban kerja sumber dan unit elastis disesuaikan secara dinamis.

    Secara umum, beban kerja elastis terdiri dari dua bagian berikut:

    • sourceTarget: menentukan jenis beban kerja sumber dan rentang untuk jumlah replika.

    • elasticUnit: array yang menentukan kebijakan penjadwalan untuk unit elastis. Untuk menentukan kebijakan penjadwalan untuk beberapa unit elastis, tentukan parameter terkait sesuai urutan yang ditunjukkan dalam template.

    Dalam contoh ini:

    • Seperti yang didefinisikan dalam sourceTarget, jumlah replika untuk beban kerja sumber berkisar antara dua hingga empat. Dalam hal ini, jika beban kerja elastis memiliki dua hingga empat replika, replika dijadwalkan ke beban kerja sumber. Jika jumlah replika lebih dari empat, replika tambahan dijadwalkan ke unit elastis (Virtual Node virtual-kubelet).

    • Dalam elasticUnit, unit elastis didefinisikan sebagai node virtual virtual-kubelet, yang sesuai dengan kebijakan penjadwalan labels: alibabacloud.com/eci=true.

  3. Lihat hasil penyebaran.

    • Lihat status beban kerja elastis.

      kubectl describe ew elasticworkload-sample   # sama dengan kubectl get elasticworkload

      Output perintah serupa dengan berikut ini dikembalikan. Nilai Desired Replicas di bagian Status menunjukkan jumlah replika yang dijadwalkan ke unit elastis:

      Name:         elasticworkload-sample
      Namespace:    default
      Labels:       <none>
      Annotations:  <none>
      API Version:  autoscaling.alibabacloud.com/v1beta1
      Kind:         ElasticWorkload
      Metadata:
        Creation Timestamp:  2021-05-21T01:53:58Z
        Generation:          4
        Managed Fields:
          API Version:  autoscaling.alibabacloud.com/v1beta1
          Fields Type:  FieldsV1
          fieldsV1:
            f:spec:
              .:
              f:elasticUnit:
              f:replicas:
              f:sourceTarget:
                .:
                f:apiVersion:
                f:kind:
                f:max:
                f:min:
                f:name:
          Manager:      Apache-HttpClient
          Operation:    Update
          Time:         2021-05-21T01:53:58Z
          API Version:  autoscaling.alibabacloud.com/v1beta1
          Fields Type:  FieldsV1
          fieldsV1:
            f:status:
              .:
              f:elasticUnitsStatus:
              f:replicas:
              f:selector:
              f:sourceTarget:
                .:
                f:apiVersion:
                f:desiredReplicas:
                f:kind:
                f:name:
                f:updateTimestamp:
          Manager:         manager
          Operation:       Update
          Time:            2021-05-21T01:56:45Z
        Resource Version:  8727
        Self Link:         /apis/autoscaling.alibabacloud.com/v1beta1/namespaces/default/elasticworkloads/elasticworkload-sample
        UID:               c4a508aa-2702-4d17-ac25-e6a207c0761a
      Spec:
        Elastic Unit:
          Labels:
            alibabacloud.com/eci:  true
          Name:                    virtual-kubelet
        Replicas:                  6
        Source Target:
          API Version:  apps/v1
          Kind:         Deployment
          Max:          4
          Min:          2
          Name:         nginx-deployment-basic
      Status:
        Elastic Units Status:
          Desired Replicas:  2
          Name:              nginx-deployment-basic-unit-virtual-kubelet
          Update Timestamp:  2021-05-21T01:56:45Z
        Replicas:            6
        Selector:            app=nginx
        Source Target:
          API Version:       apps/v1
          Desired Replicas:  4
          Kind:              Deployment
          Name:              nginx-deployment-basic
          Update Timestamp:  2021-05-21T01:56:45Z
      Events:
        Type    Reason                 Age                  From             Message
        ----    ------                 ----                 ----             -------
        Normal  SourceUpdate           12m                  ElasticWorkload  Source Target scale from 2 to 4
        Normal  UnitCreation           12m                  ElasticWorkload  ElasticWorkloadUnit nginx-deployment-basic-unit-virtual-kubelet created
        Normal  ElasticWorkloadUpdate  9m27s (x9 over 12m)  ElasticWorkload  ElasticWorkload update
        Normal  UnitUpdate             9m27s (x8 over 12m)  ElasticWorkload  ElasticWorkloadUnit virtual-kubelet has been updated
    • Lihat status pod.

      kubectl get pod -o wide

      Output perintah serupa dengan berikut ini dikembalikan. Output tersebut menunjukkan bahwa beban kerja elastis telah mengkloning Deployment dan pod, serta bahwa replika pod dalam Deployment ini dijadwalkan secara dinamis berdasarkan kebijakan penjadwalan yang telah ditentukan sebelumnya.

      NAME                                                           READY   STATUS    RESTARTS   AGE   IP              NODE                           NOMINATED NODE   READINESS GATES
      nginx-deployment-basic-5bf87f5f59-22jnw                        1/1     Running   0          16m   10.34.0.131     cn-beijing.172.16.0.1          <none>           <none>
      nginx-deployment-basic-5bf87f5f59-gfp24                        1/1     Running   0          13m   10.34.0.133     cn-beijing.172.16.0.1          <none>           <none>
      nginx-deployment-basic-5bf87f5f59-pw2zx                        1/1     Running   0          13m   10.34.0.134     cn-beijing.172.16.0.1          <none>           <none>
      nginx-deployment-basic-5bf87f5f59-qvh7m                        1/1     Running   0          16m   10.34.0.132     cn-beijing.172.16.0.1          <none>           <none>
      nginx-deployment-basic-unit-virtual-kubelet-65fb6f4cd7-48ssb   1/1     Running   0          13m   172.16.22.157   virtual-kubelet-cn-beijing-e   <none>           <none>
      nginx-deployment-basic-unit-virtual-kubelet-65fb6f4cd7-gjqhm   1/1     Running   0          13m   172.16.22.158   virtual-kubelet-cn-beijing-e   <none>           <none>

Selain itu, HPAs dapat digunakan untuk beban kerja elastis. Beban kerja elastis dapat menyesuaikan jumlah replika yang dijadwalkan ke setiap unit elastis berdasarkan status HPAs. Sebagai contoh, jika jumlah replika dalam Deployment berubah dari enam menjadi empat untuk beban kerja elastis, beban kerja elastis akan mengurangi replika pada unit elastis terlebih dahulu.

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: elastic-workload-demo
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: autoscaling.alibabacloud.com/v1beta1
    kind: ElasticWorkload
    name: elasticworkload-sample
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

Kesimpulannya, beban kerja elastis dapat menghasilkan Deployment dengan mengkloning dan menimpa kebijakan penjadwalan. Ini memungkinkan Anda mengelola kebijakan penjadwalan. Beban kerja elastis juga dapat menyesuaikan jumlah replika yang dijadwalkan ke beban kerja sumber dan menyesuaikan jumlah replika yang dijadwalkan ke unit elastis dalam rentang yang ditentukan. Ini memungkinkan Anda memprioritaskan pod tertentu untuk manajemen siklus hidup.