Untuk menyesuaikan jumlah total sumber daya komputasi secara dinamis berdasarkan jumlah permintaan per satuan waktu, Anda dapat menggunakan data queries per second (QPS) yang dikumpulkan oleh instance Application Load Balancer (ALB) untuk mengatur penskalaan otomatis pod aplikasi.
Sebelum Anda mulai
Topik ini mengasumsikan pemahaman dasar tentang fitur ALB ingress.
Cara kerjanya
QPS adalah jumlah permintaan yang diterima per detik. Instance ALB mencatat data akses klien melalui Simple Log Service (SLS). Horizontal Pod Autoscaler (HPA) memantau data QPS berdasarkan data yang direkam dan menskalakan beban kerja yang sesuai (seperti Deployment dan StatefulSet).
Prasyarat
Komponen alibaba-cloud-metrics-adapter telah diinstal, dengan versi 2.3.0 atau lebih baru.
Alat uji stres Apache Benchmark telah diinstal. Untuk informasi lebih lanjut, lihat dokumen resmi Compiling and Installing.
Klien kubectl terhubung ke kluster ACK. Untuk informasi lebih lanjut, lihat Dapatkan file kubeconfig dari kluster dan gunakan kubectl untuk terhubung ke kluster.
Dua switch dibuat di zona ketersediaan yang berbeda dan berada dalam VPC yang sama dengan kluster. Untuk informasi lebih lanjut, lihat Dapatkan file kubeconfig dari kluster dan gunakan kubectl untuk terhubung ke kluster.
Langkah 1: Buat AlbConfig dan asosiasikan Proyek SLS
Periksa Proyek SLS yang diasosiasikan dengan kluster.
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel sebelah kiri, klik Cluster Information.
Di tab Basic Information, temukan sumber daya Log Service Project dan catat nama Proyek SLS di sebelah kanan.
Buat AlbConfig.
Buat dan salin konten berikut ke alb-qps.yaml, lalu isi informasi Proyek SLS di bidang
accessLogConfig.apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-qps spec: config: name: alb-qps addressType: Internet zoneMappings: - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # ID dari virtual switch - vSwitchId: vsw-uf6nun9tql5t8nh15**** accessLogConfig: logProject: <LOG_PROJECT> # Nama proyek log yang diasosiasikan dengan kluster logStore: <LOG_STORE> # Nama penyimpanan log kustom, harus dimulai dengan "alb_" listeners: - port: 80 protocol: HTTPTabel berikut menjelaskan bidang dalam blok kode di atas:
Bidang
Tipe
Deskripsi
logProject
string
Nama proyek Simple Log Service.
Nilai default:
"".logStore
string
Nama Simple Log Service Logstore, yang harus dimulai dengan
alb_. Penyimpanan log SLS akan dibuat secara otomatis jika tidak ada. Untuk informasi lebih lanjut, lihat Aktifkan Simple Log Service untuk mengumpulkan log akses.Nilai default:
"alb_****".Jalankan perintah berikut untuk membuat AlbConfig:
kubectl apply -f alb-qps.yamlKeluaran yang Diharapkan:
albconfig.alibabacloud.com/alb-qps created
Langkah 2: Buat sumber daya contoh
Selain AlbConfig, ALB Ingress memerlukan empat jenis sumber daya untuk berfungsi dengan baik: Deployment, Service, IngressClass, dan Ingress. Gunakan langkah-langkah berikut untuk membuat sumber daya ini:
Buat file qps-quickstart.yaml dengan konten berikut:
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: qps-ingressclass spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb-qps # Sama dengan nama AlbConfig --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: qps-ingress spec: ingressClassName: qps-ingressclass # Sama dengan nama Ingress Class rules: - host: demo.alb.ingress.top # Ganti dengan nama domain Anda http: paths: - path: /qps pathType: Prefix backend: service: name: qps-svc port: number: 80 --- apiVersion: v1 kind: Service metadata: name: qps-svc namespace: default spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: qps-deploy type: NodePort --- apiVersion: apps/v1 kind: Deployment metadata: name: qps-deploy labels: app: qps-deploy spec: replicas: 2 selector: matchLabels: app: qps-deploy template: metadata: labels: app: qps-deploy spec: containers: - name: qps-container image: nginx:1.7.9 ports: - containerPort: 80Jalankan perintah berikut untuk membuat sumber daya contoh:
kubectl apply -f qps-quickstart.yaml
Langkah 3: Buat HPA
Buat file qps-hpa.yaml, salin konten berikut ke dalamnya, lalu simpan:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: qps-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: qps-deploy # Nama beban kerja yang dikendalikan oleh HPA minReplicas: 2 # Jumlah minimum pod maxReplicas: 10 # Jumlah maksimum pod metrics: - type: External # Metrik eksternal (non-metrik Kubernetes asli) external: metric: name: sls_alb_ingress_qps # Nama metrik (ALB Ingress QPS). Jangan ubah. selector: matchLabels: sls.project: <LOG_PROJECT> # Nama proyek Layanan Log (ganti dengan nama proyek aktual) sls.logstore: <LOG_STORE> # Nama Logstore (ganti dengan nama Logstore aktual) sls.ingress.route: default-qps-svc-80 # Format jalur layanan: <namespace>-<svc>-<port> target: type: AverageType # Tipe metrik target (nilai rata-rata) averageValue: 2 # Nilai target yang diharapkan. Dalam contoh ini, rata-rata QPS per pod adalah 2.Tabel berikut menjelaskan bidang dalam blok kode di atas:
Bidang
Deskripsi
scaleTargetRef
Beban kerja yang digunakan oleh aplikasi. Contoh ini menggunakan Deployment bernama qps-deployment yang dibuat di Langkah 1.
minReplicas
Jumlah minimum kontainer yang dapat diskalakan oleh Deployment. Nilai ini perlu diatur ke bilangan bulat lebih besar dari atau sama dengan 1.
maxReplicas
Jumlah maksimum kontainer yang dapat diskalakan oleh Deployment. Nilai ini perlu lebih besar dari jumlah minimum replika.
external.metric.name
Metrik berbasis QPS untuk HPA. Jangan ubah nilainya.
sls.project
Proyek SLS untuk metrik. Atur nilai ke proyek SLS yang ditentukan di AlbConfig.
sls.logstore
Logstore untuk metrik. Atur nilai ke Logstore yang ditentukan di AlbConfig.
sls.ingress.route
Jalur Layanan. Tentukan nilai dalam format <namespace>-<svc>-<port>. Contoh ini menggunakan Layanan qps-svc yang dibuat di Langkah 1.
external.target
Nilai target untuk metrik. Dalam contoh ini, rata-rata QPS untuk semua pod adalah 2. HPA akan menyesuaikan jumlah pod agar QPS sedekat mungkin dengan nilai target.
Jalankan perintah berikut untuk membuat HPA:
kubectl apply -f qps-hpa.yamlJalankan perintah berikut untuk memeriksa status penyebaran HPA:
kubectl get hpaKeluaran yang Diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE qps-hpa Deployment/qps-deploy 0/2 (avg) 2 10 2 5m41sJalankan perintah berikut untuk melihat informasi konfigurasi HPA:
kubectl describe hpa qps-hpaKeluaran yang Diharapkan:
Name: qps-hpa Namespace: default Labels: <none> Annotations: <none> CreationTimestamp: ******** # Timestamp HPA, bisa diabaikan Reference: Deployment/qps-deployment Metrics: ( current / target ) "sls_alb_ingress_qps" (target average value): 0 / 2 Min replicas: 2 Max replicas: 10 Deployment pods: 2 current / 2 desired
(Opsional) Langkah 4: Verifikasi penskalaan otomatis
Verifikasi Peningkatan Skala Aplikasi.
Jalankan perintah berikut untuk melihat informasi Ingress:
kubectl get ingressKeluaran yang Diharapkan:
NAME CLASS HOSTS ADDRESS PORTS AGE qps-ingress qps-ingressclass demo.alb.ingress.top alb-********.alb.aliyuncs.com 80 10m31sCatat nilai
HOSTSdanADDRESSuntuk digunakan pada langkah selanjutnya.Jalankan perintah berikut untuk melakukan uji stres pada aplikasi:
Ganti
demo.alb.ingress.topdanalb-********.alb.aliyuncs.comdengan nilai yang dicatat pada langkah sebelumnya.ab -r -c 5 -n 10000 -H Host:demo.alb.ingress.top http://alb-********.alb.aliyuncs.com/qpsJalankan perintah berikut untuk memeriksa status penskalaan aplikasi:
kubectl get hpaKeluaran yang Diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE qps-hpa Deployment/qps-deploy 14375m/2 (avg) 2 10 10 15mHasil menunjukkan bahwa
REPLICASadalah 10, yang berarti saat data QPS meningkat, aplikasi meningkatkan skalanya ke nilaiMAXPODS(10 pod).
Verifikasi Penurunan Skala Aplikasi.
Setelah uji stres selesai, jalankan perintah berikut untuk memeriksa status penskalaan aplikasi:
kubectl get hpaKeluaran yang Diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE qps-hpa Deployment/qps-deploy 0/2 (avg) 2 10 2 28mHasil menunjukkan bahwa
REPLICASadalah 2, yang berarti setelah data QPS turun menjadi 0, aplikasi menurunkan skalanya ke nilaiMINPODS(2 pod).
Referensi
Untuk penskalaan aplikasi berdasarkan beban CPU atau memori pod, lihat Horizontal Pod Autoscaler (HPA).
Untuk menjadwalkan penskalaan aplikasi, lihat Cron Horizontal Pod Autoscaler (CronHPA).
Untuk penskalaan node otomatis, lihat Penskalaan Node.