Jika aplikasi Anda perlu menyesuaikan sumber daya komputasinya secara dinamis berdasarkan volume permintaan, gunakan data queries per second (QPS) dari instans Application Load Balancer (ALB) untuk mengonfigurasi skalabilitas elastis bagi Pod aplikasi tersebut.
Sebelum memulai
Sebelum memulai, baca Buat dan gunakan ALB Ingress untuk mengekspos layanan guna memahami dasar-dasar penggunaan ALB Ingress.
Cara kerja
Queries per second (QPS) adalah jumlah permintaan yang diterima per detik. Instans Application Load Balancer (ALB) mencatat data akses klien menggunakan Simple Log Service (SLS). Horizontal Pod Autoscaler (HPA) memantau data QPS untuk layanan tersebut dari catatan ini dan menyesuaikan beban kerja terkait, seperti Deployment dan StatefulSet.
Prasyarat
-
Komponen alibaba-cloud-metrics-adapter versi 2.3.0 atau yang lebih baru telah diinstal. Untuk informasi selengkapnya, lihat Deploy komponen ack-alibaba-cloud-metrics-adapter.
-
Alat uji stres Apache Benchmark telah diinstal. Untuk informasi selengkapnya, lihat dokumen resmi Compiling and Installing.
Klien kubectl telah terhubung ke kluster ACK. Untuk informasi selengkapnya, lihat Hubungkan ke kluster ACK menggunakan kubectl.
Langkah 1: Buat AlbConfig dan asosiasikan dengan proyek Simple Log Service
-
Lihat proyek Simple Log Service yang terkait dengan kluster.
-
Masuk ke Container Service Management Console . Di panel navigasi sebelah kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi sebelah kiri, klik Cluster Information.
-
Pada tab Basic Information, temukan resource Log Service Project dan catat nama proyek di sebelah kanannya.
-
-
Buat AlbConfig.
-
Buat file bernama alb-qps.yaml, salin konten berikut ke dalam file tersebut, lalu masukkan informasi proyek Simple Log Service pada bidang
accessLogConfig.apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-qps spec: config: name: alb-qps addressType: Internet zoneMappings: - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # The ID of the vSwitch - vSwitchId: vsw-uf6nun9tql5t8nh15**** accessLogConfig: logProject: <LOG_PROJECT> # The name of the Simple Log Service project associated with the cluster logStore: <LOG_STORE> # A custom Logstore name. The name must start with "alb_". listeners: - port: 80 protocol: HTTPTabel berikut menjelaskan bidang-bidang tersebut.
-
Jalankan perintah berikut untuk membuat AlbConfig.
kubectl apply -f alb-qps.yamlOutput yang diharapkan:
albconfig.alibabacloud.com/alb-qps created
-
Langkah 2: Buat resource contoh
Selain AlbConfig, ALB Ingress memerlukan Deployment, Service, IngressClass, dan Ingress agar dapat berfungsi. Ikuti langkah-langkah berikut untuk membuat resource tersebut dengan cepat.
-
Buat file bernama 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 # Must be the same as the name of the AlbConfig --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: qps-ingress spec: ingressClassName: qps-ingressclass # Must be the same as the name of the IngressClass rules: - host: demo.alb.ingress.top # Replace with your domain name 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: 80 -
Jalankan perintah berikut untuk membuat resource contoh.
kubectl apply -f qps-quickstart.yaml
Langkah 3: Buat HPA
-
Buat dan simpan file bernama qps-hpa.yaml dengan konten berikut.
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: qps-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: qps-deploy # The name of the workload controlled by the HPA minReplicas: 2 # The minimum number of pods maxReplicas: 10 # The maximum number of pods metrics: - type: External # Use external metrics (non-native Kubernetes metrics) external: metric: name: sls_alb_ingress_qps # The metric name (QPS of Alibaba Cloud ALB Ingress). Do not modify this value. selector: matchLabels: sls.project: <LOG_PROJECT> # The name of the Simple Log Service project. Replace with your actual project name. sls.logstore: <LOG_STORE> # The name of the Logstore. Replace with your actual Logstore name. sls.ingress.route: default-qps-svc-80 # The path of the service. The format is <namespace>-<svc>-<port>. target: type: AverageValue # The target metric type (average value) averageValue: "2" # The target value for the metric. In this example, the average QPS for all pods is 2.Tabel berikut menjelaskan bidang-bidang tersebut.
Bidang
Deskripsi
scaleTargetRef
Beban kerja yang digunakan oleh aplikasi. Contoh ini menggunakan Deployment bernama
qps-deployyang dibuat di Langkah 1.minReplicas
Jumlah minimum Pod tempat Deployment dapat diskalakan masuk. Nilai ini harus berupa bilangan bulat yang lebih besar dari atau sama dengan 1.
maxRaplicas
Jumlah maksimum Pod tempat Deployment dapat diskalakan keluar. Nilai ini harus lebih besar dari jumlah replika minimum.
external.metric.name
Metrik untuk data QPS yang digunakan oleh HPA. Jangan ubah nilai ini.
sls.project
Proyek Simple Log Service yang menyediakan data metrik. Harus sama dengan proyek yang ditentukan dalam AlbConfig.
sls.logstore
Logstore yang menyediakan data metrik. Harus sama dengan Logstore yang ditentukan dalam AlbConfig.
sls.ingress.route
Jalur Service, diformat sebagai <namespace>-<svc>-<port>, yaitu Service qps-svc yang Anda buat di Langkah 1.
external.target
Nilai target untuk metrik tersebut. Pada contoh ini, rata-rata QPS untuk semua Pod adalah 2. HPA menyesuaikan jumlah Pod agar QPS sedekat mungkin dengan nilai target.
-
Jalankan perintah berikut untuk membuat HPA.
kubectl apply -f qps-hpa.yaml -
Jalankan perintah berikut untuk melihat status deployment HPA.
kubectl get hpaOutput yang diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE qps-hpa Deployment/qps-deploy 0/2 (avg) 2 10 2 5m41s -
Jalankan perintah berikut untuk melihat detail konfigurasi HPA.
kubectl describe hpa qps-hpaOutput yang diharapkan:
Name: qps-hpa Namespace: default Labels: <none> Annotations: <none> CreationTimestamp: ******** # The timestamp of the HPA. You can ignore this. Reference: Deployment/qps-deploy Metrics: ( current / target ) "sls_alb_ingress_qps" (target average value): 0 / 2 Min replicas: 2 Max replicas: 10 Deployment pods: 2 current / 2 desired
Opsi: Langkah 4: Verifikasi hasil
-
Verifikasi scale-out aplikasi.
-
Jalankan perintah berikut untuk melihat informasi Ingress.
kubectl get ingressOutput 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 nanti. -
Jalankan perintah berikut untuk melakukan uji stres pada aplikasi.
Ganti
demo.alb.ingress.topdanalb-********.alb.aliyuncs.comdengan nilai yang telah Anda catat pada langkah sebelumnya.ab -r -c 5 -n 10000 -H Host:demo.alb.ingress.top http://alb-********.alb.aliyuncs.com/qps -
Jalankan perintah berikut untuk melihat status penskalaan aplikasi.
kubectl get hpaOutput yang diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE qps-hpa Deployment/qps-deploy 14375m/2 (avg) 2 10 10 15mNilai
REPLICASpada output adalah 10. Hal ini menunjukkan bahwa seiring peningkatan QPS, aplikasi melakukan scale-out hingga mencapai batas maksimum 10 Pod yang ditentukan olehMAXPODS.
-
-
Verifikasi scale-in aplikasi.
Setelah uji stres selesai, jalankan perintah berikut untuk melihat status penskalaan aplikasi.
kubectl get hpaOutput yang diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE qps-hpa Deployment/qps-deploy 0/2 (avg) 2 10 2 28mNilai
REPLICASpada output adalah 2. Hal ini menunjukkan bahwa setelah QPS turun menjadi 0, aplikasi melakukan scale-in hingga mencapai batas minimum 2 Pod yang ditentukan olehMINPODS.
Referensi
-
Untuk menskalakan aplikasi berdasarkan beban CPU atau memori Pod, lihat Horizontal pod autoscaling (HPA).
-
Untuk menskalakan aplikasi berdasarkan jadwal, lihat Scheduled horizontal pod autoscaling (CronHPA).
-
Untuk penskalaan node, lihat Node scaling.