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).
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
Masuk ke Konsol ACK.
Di panel navigasi kiri Konsol ACK, pilih .
Di halaman Marketplace, klik tab App Catalog. Cari dan klik ack-kubernetes-elastic-workload.
Di halaman ack-kubernetes-elastic-workload, klik Deploy.
Di panel Deploy, pilih kluster dan namespace, lalu klik Next.
Di langkah Parameters, atur parameter dan klik OK.
Setelah menerapkan ack-kubernetes-elastic-workload, buka halaman detail kluster. Di panel navigasi kiri, pilih . 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.
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"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.
Lihat hasil penyebaran.
Lihat status beban kerja elastis.
kubectl describe ew elasticworkload-sample # sama dengan kubectl get elasticworkloadOutput 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 updatedLihat status pod.
kubectl get pod -o wideOutput 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: 50Kesimpulannya, 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.