一、什么是弹性伸缩
Horizontal Pod Autoscaler的操作对象是Replication Controller、ReplicaSet或Deployment对应的Pod,根据观察到的CPU使用量与用户的阈值进行比对,做出是否需要增减实例数量的决策。controller目前使用heapSter来检测CPU使用量,检测周期默认是30秒
二、创建hpa
nginx-rc.yaml
[root@master hpa]# cat nginx-rc.yaml apiVersion: v1 kind: ReplicationController metadata: name: myweb1 spec: replicas: 2 selector: app: myweb1 template: metadata: labels: app: myweb1 spec: containers: - name: myweb1 image: 192.168.118.18:5000/nginx:1.13 ports: - containerPort: 80 resources: limits: cpu: 100m memory: 50Mi requests: cpu: 100m memory: 50Mi
创建检查
[root@master hpa]# kubectl create -f nginx-rc.yaml replicationcontroller "myweb1" created [root@master hpa]# kubectl get pods -o wide --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE default mysql-3qkf1 1/1 Running 0 1d 172.16.60.7 192.168.118.19 default myweb1-g1x3r 1/1 Running 0 25s 172.16.56.5 192.168.118.18 default myweb1-xxxqs 1/1 Running 0 25s 172.16.60.2 192.168.118.19 kube-system heapster-hrfmb 1/1 Running 0 36m 172.16.56.3 192.168.118.18 kube-system influxdb-grafana-0lj0n 2/2 Running 0 36m 172.16.56.4 192.168.118.18 kube-system kube-dns-1835838994-jm5bk 4/4 Running 0 7h 172.16.99.3 192.168.118.20 kube-system kubernetes-dashboard-latest-2728556226-fc2pc 1/1 Running 0 5h 172.16.60.6 192.168.118.19 luoahong myweb-qsml7 1/1 Running 0 3h 172.16.60.8 192.168.118.19 luoahong myweb-sbsw2 1/1 Running 0 3h 172.16.99.4 192.168.118.20 [root@master hpa]# kubectl get rc -o wide --all-namespaces NAMESPACE NAME DESIRED CURRENT READY AGE CONTAINER(S) IMAGE(S) SELECTOR default mysql 1 1 1 1d mysql 192.168.118.18:5000/mysql:5.7 app=mysql default myweb1 2 2 2 45s myweb1 192.168.118.18:5000/nginx:1.13 app=myweb1 kube-system heapster 1 1 1 36m heapster 192.168.118.18:5000/heapster:canary k8s-app=heapster,version=v6 kube-system influxdb-grafana 1 1 1 36m influxdb,grafana 192.168.118.18:5000/heapster_influxdb:v0.5,192.168.118.18:5000/heapster_grafana:v2.6.0 name=influxGrafana luoahong myweb 2 2 2 3h myweb 192.168.118.18:5000/nginx:1.13 app=myweb
创建hpa
[root@master hpa]# kubectl autoscale replicationcontroller myweb1 --max=8 --min=1 --cpu-percent=10 replicationcontroller "myweb1" autoscaled [root@master hpa]# kubectl get pods -o wide --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE default mysql-3qkf1 1/1 Running 0 1d 172.16.60.7 192.168.118.19 default myweb1-xxxqs 1/1 Running 0 7m 172.16.60.2 192.168.118.19 kube-system heapster-hrfmb 1/1 Running 0 42m 172.16.56.3 192.168.118.18 kube-system influxdb-grafana-0lj0n 2/2 Running 0 42m 172.16.56.4 192.168.118.18 kube-system kube-dns-1835838994-jm5bk 4/4 Running 0 7h 172.16.99.3 192.168.118.20 kube-system kubernetes-dashboard-latest-2728556226-fc2pc 1/1 Running 0 6h 172.16.60.6 192.168.118.19 luoahong myweb-qsml7 1/1 Running 0 3h 172.16.60.8 192.168.118.19 luoahong myweb-sbsw2 1/1 Running 0 3h 172.16.99.4 192.168.118.2
三、压力测试
1、执行压力测试命令
[root@master hpa]# ab -n 500000 -c 100 http://172.16.60.2/index.html This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 172.16.60.2 (be patient) Completed 50000 requests Completed 100000 requests Completed 150000 requests Completed 200000 requests Completed 250000 requests Completed 300000 requests Completed 350000 requests Completed 400000 requests Completed 450000 requests Completed 500000 requests Finished 500000 requests Server Software: nginx/1.13.12 Server Hostname: 172.16.60.2 Server Port: 80 Document Path: /index.html Document Length: 612 bytes Concurrency Level: 100 Time taken for tests: 389.121 seconds Complete requests: 500000 Failed requests: 0 Write errors: 0 Total transferred: 423000000 bytes HTML transferred: 306000000 bytes Requests per second: 1284.95 [#/sec] (mean) Time per request: 77.824 [ms] (mean) Time per request: 0.778 [ms] (mean, across all concurrent requests) Transfer rate: 1061.59 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 18 146.3 3 15028 Processing: 0 60 80.5 74 5091 Waiting: 0 59 79.2 73 5091 Total: 2 78 171.3 77 15103 Percentage of the requests served within a certain time (ms) 50% 77 66% 89 75% 96 80% 98 90% 100 95% 284 98% 303 99% 1077 100% 15103 (longest request)
2、查看容器状态描述
1、查看pod数量
[root@master kubernetes]# kubectl get pods -o wide |grep myweb1 myweb1-46kz9 1/1 Running 0 11s 172.16.99.5 192.168.118.20 myweb1-9nq3c 1/1 Running 0 4m 172.16.99.2 192.168.118.20 myweb1-9nsks 1/1 Running 0 11s 172.16.60.4 192.168.118.19 myweb1-flbds 1/1 Running 0 11s 172.16.60.3 192.168.118.19 myweb1-nhkqr 1/1 Running 0 11s 172.16.56.7 192.168.118.18 myweb1-q722p 1/1 Running 0 4m 172.16.56.6 192.168.118.18 myweb1-q78qh 1/1 Running 0 4m 172.16.56.5 192.168.118.18 myweb1-xxxqs 1/1 Running 0 14m 172.16.60.2 192.168.118.19
2、查看HPA状态描述
[root@master kubernetes]# kubectl describe hpa myweb1 Name: myweb1 Namespace: default Labels: <none> Annotations: <none> CreationTimestamp: Wed, 13 May 2020 17:59:04 +0800 Reference: ReplicationController/myweb1 Target CPU utilization: 10% Current CPU utilization: 25% Min replicas: 1 Max replicas: 8 ReplicationController pods: 8 current / 8 desired Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 12m 12m 2 {horizontal-pod-autoscaler } Normal MetricsNotAvailableYet unable to get metrics for resource cpu: no metrics returned from heapster 12m 12m 3 {horizontal-pod-autoscaler } Normal DesiredReplicasComputed Computed the desired num of replicas: 0 (avgCPUutil: 0, current replicas: 2) 12m 12m 1 {horizontal-pod-autoscaler } Normal SuccessfulRescale New size: 1; reason: All metrics below target 11m 4m 16 {horizontal-pod-autoscaler } Normal DesiredReplicasComputed Computed the desired num of replicas: 0 (avgCPUutil: 0, current replicas: 1) 4m 4m 1 {horizontal-pod-autoscaler } Normal DesiredReplicasComputed Computed the desired num of replicas: 4 (avgCPUutil: 39, current replicas: 1) 4m 4m 1 {horizontal-pod-autoscaler } Normal SuccessfulRescale New size: 4; reason: CPU utilization above target 3m 2m 3 {horizontal-pod-autoscaler } Normal DesiredReplicasComputed Computed the desired num of replicas: 10 (avgCPUutil: 99, current replicas: 4) 2m 15s 7 {horizontal-pod-autoscaler } Normal DesiredReplicasComputed Computed the desired num of replicas: 10 (avgCPUutil: 25, current replicas: 4) 15s 15s 1 {horizontal-pod-autoscaler } Normal SuccessfulRescale New size: 8; reason: CPU utilization above target 15s 15s 2 {horizontal-pod-autoscaler } Normal DesiredReplicasComputed Computed the desired num of replicas: 10 (avgCPUutil: 25, current replicas: 8)