Jika aplikasi Anda perlu menyesuaikan total sumber daya komputasi secara dinamis berdasarkan volume permintaan, gunakan metrik QPS ALB Ingress dari Log Service untuk melakukan autoscale pod aplikasi dengan Horizontal Pod Autoscaler (HPA).
Prasyarat
Pastikan Anda telah:
-
alibaba-cloud-metrics-adapter versi 2.3.0 atau yang lebih baru telah terinstal.
-
ALB Ingress controller telah terinstal.
-
Apache Benchmark telah terinstal.
-
Sebuah Log Service project telah dibuat.
-
Dua vSwitches telah diterapkan di zona berbeda dalam Virtual Private Cloud (VPC) tempat kluster Anda berada.
Cara kerja
-
Buat Deployment dan Service untuk aplikasi Anda.
-
Buat ALB Ingress untuk mengarahkan traffic eksternal ke Service tersebut.
-
Buat Horizontal Pod Autoscaler (HPA) yang memantau metrik
sls_alb_ingress_qpsdari Log Service. -
Saat QPS melebihi ambang batas per pod, HPA melakukan scale-out terhadap Deployment. Saat QPS turun, HPA melakukan scale-in kembali.
Langkah 1: Buat aplikasi dan service
-
Buat file bernama
tea.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment-basic labels: app: tea spec: replicas: 2 selector: matchLabels: app: tea template: metadata: labels: app: tea spec: containers: - name: tea image: nginx:1.7.9 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: tea-svc namespace: default spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: tea type: NodePort -
Terapkan manifes:
kubectl apply -f tea.yaml
Langkah 2: Buat ALB Ingress
Buat objek AlbConfig
-
Temukan proyek Log Service yang terkait dengan kluster Anda. Di Konsol ACK, buka halaman detail kluster, pilih tab Informasi Kluster, temukan Log Service Project, lalu catat nama proyeknya. Buat file bernama
alb-test.yaml:Field Description zoneMappingsMinimal dua ID vSwitch dari zona berbeda dalam VPC yang sama. logProjectNama proyek Log Service. logStoreNama Logstore. Harus diawali dengan alb_. Dibuat otomatis jika belum ada.apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-demo spec: config: name: alb-test addressType: Internet # ALB menghadap Internet zoneMappings: - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # Ganti dengan ID vSwitch pertama Anda - vSwitchId: vsw-uf6nun9tql5t8nh15**** # Ganti dengan ID vSwitch kedua Anda (zona berbeda) accessLogConfig: logProject: "****" # Ganti dengan nama proyek Log Service Anda logStore: "alb_****" # Ganti dengan nama Logstore Anda; harus diawali dengan alb_ -
Terapkan manifes:
kubectl apply -f alb-test.yaml
Buat IngressClass
-
Buat file bernama
alb.yaml:apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb-demo # Harus sesuai dengan metadata.name AlbConfig di atas -
Terapkan manifes:
kubectl apply -f alb.yaml
Buat Ingress
-
Buat file bernama
tea-ingress.yaml:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: tea-ingress spec: ingressClassName: alb rules: - host: demo.ingress.top http: paths: - path: /tea pathType: Prefix backend: service: name: tea-svc port: number: 80 -
Terapkan manifes:
kubectl apply -f tea-ingress.yaml -
Ambil alamat ALB yang ditetapkan untuk Ingress:
kubectl get ingressOutput yang diharapkan:
NAME CLASS HOSTS ADDRESS PORTS AGE tea-ingress alb demo.ingress.top alb-110zvs5nhsvfv*****.cn-chengdu.alb.aliyuncs.com 80 7m5sCatat nilai
ADDRESSuntuk uji beban pada Langkah 4.
Langkah 3: Buat HPA
-
Buat file bernama
hpa.yaml:apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: ingress-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx-deployment-basic # Deployment yang akan diskalakan minReplicas: 2 # Jumlah minimum pod maxReplicas: 10 # Jumlah maksimum pod metrics: - type: External external: metric: name: sls_alb_ingress_qps # Metrik QPS ALB dari Log Service selector: matchLabels: sls.project: "****" # Ganti dengan nama proyek Log Service Anda sls.logstore: "alb_****" # Ganti dengan nama Logstore Anda sls.ingress.route: "default-tea-svc-80" # Format: <namespace>-<service-name>-<port> # Contoh: default-nginx-80 target: type: AverageValue # Skalakan berdasarkan rata-rata QPS per pod averageValue: 2 # Lakukan scale-out saat rata-rata QPS per pod melebihi 2HPA ini menskalakan
nginx-deployment-basicantara 2 hingga 10 pod. HPA melakukan scale-out saat rata-rata QPS per pod melebihi 2, dan scale-in saat QPS turun. -
Terapkan manifes:
kubectl apply -f hpa.yaml -
Verifikasi bahwa HPA telah dibuat:
kubectl get hpaOutput yang diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE ingress-hpa Deployment/nginx-deployment-basic 0/2 (avg) 2 10 2 4h34mQPS bernilai
0karena belum ada traffic yang mencapai aplikasi. Jumlah pod berada pada nilai minimum (2). -
(Opsional) Periksa detail HPA:
kubectl describe hpa ingress-hpaOutput yang diharapkan:
Name: ingress-hpa Namespace: default Labels: <none> Annotations: <none> CreationTimestamp: Tue, 31 Jan 2023 11:35:01 +0800 Reference: Deployment/nginx-deployment-basic Metrics: ( current / target ) "sls_alb_ingress_qps" (target average value): 0 / 2 Min replicas: 2 Max replicas: 10 Deployment pods: 2 current / 2 desired
Langkah 4: Verifikasi autoscaling
Verifikasi scale-out
-
Jalankan uji beban terhadap alamat ALB dari Langkah 2. Ganti placeholder dengan alamat aktual Anda.
ab -c 5 -n 5000 -H Host:demo.ingress.top http://alb-110zvs5nhsvfv*****.cn-chengdu.alb.aliyuncs.com/tea -
Saat uji berlangsung, pantau status HPA secara real-time:
kubectl get hpa ingress-hpa --watchSaat QPS melebihi ambang batas, jumlah replika meningkat. Tekan Ctrl+C untuk menghentikan.
-
Setelah uji beban selesai, konfirmasi scale-out:
kubectl get hpaOutput yang diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE ingress-hpa Deployment/nginx-deployment-basic 12500m/2 (avg) 2 10 10 15mREPLICASbernilai10, yang mengonfirmasi bahwa Deployment telah diskalakan ke maksimum.
Verifikasi scale-in
Setelah uji beban selesai, QPS turun menjadi 0 dan HPA menskalakan kembali Deployment ke jumlah minimum. Proses scale-in memiliki jendela stabilisasi sekitar 5 menit, jadi tunggu sebelum memeriksa.
kubectl get hpa
Output yang diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
ingress-hpa Deployment/nginx-deployment-basic 0/2 (avg) 2 10 2 60m
REPLICAS kembali ke 2, yang mengonfirmasi bahwa Deployment telah diskalakan masuk.
Langkah selanjutnya
-
Sesuaikan perilaku scale-out dan scale-in dengan mengonfigurasi field
behaviordalam spesifikasi HPA. -
Lakukan scaling berdasarkan metrik Alibaba Cloud tambahan.