11.6.4 基于Serving实现自动伸缩示例

1)部署示例Knative Service,如下所示:


kubectl create -f autoscale.yaml

2)找到入口主机名和IP并导出为环境变量,如下所示:


export IP_ADDRESS=`kubectl get svc knative-ingressgateway --namespace istio-system --output jsonpath="{.status.loadBalancer.ingress[*].ip}"`

3)向自动伸缩应用程序发出请求,并检查消耗资源情况,如下所示:


curl --header "Host: autoscale-go.default.{domain.name}" "http://${IP_ADDRESS?}?sleep=100&prime=10000&bloat=5"

注意,使用你的域名后缀替换{domain.name},例如:


curl --header "Host: autoscale-go.default.aliyun.com" "http://${IP_ADDRESS?}?sleep=100&prime=10000&bloat=5"
Allocated 5 Mb of memory.
The largest prime less than 10000 is 9973.
Slept for 100.11 milliseconds.

4)通过以下命令安装负载生成器:


go get -u github.com/rakyll/hey

5)维持50个并发请求,发送30秒的流量,如下所示:


hey -z 30s -c 50 \
  -host "autoscale-go.default.aliyun.com" \
  "http://${IP_ADDRESS?}?sleep=100&prime=10000&bloat=5" \
  && kubectl get pods

下面是运行30秒的流量请求状态,Knative服务随着请求数量的增大也自动扩容:


Summary:
  Total:  30.1172 secs
  Slowest:  0.2685 secs
  Fastest:  0.1065 secs
  Average:  0.1177 secs
  Requests/sec: 423.8442

  Total data: 1276026 bytes
  Size/request: 99 bytes

Response time histogram:
  0.107 [1] |
  0.123 [10454] |
  0.139 [1757]  |
  0.155 [220] |
  0.171 [97]  |
  0.187 [87]  |
  0.204 [60]  |
  0.220 [37]  |
  0.236 [29]  |
  0.252 [19]  |
  0.268 [4] |


Latency distribution:
  10% in 0.1095 secs
  25% in 0.1107 secs
  50% in 0.1130 secs
  75% in 0.1194 secs
  90% in 0.1282 secs
  95% in 0.1367 secs
  99% in 0.1922 secs

Details (average, fastest, slowest):
  DNS+dialup: 0.0001 secs, 0.1065 secs, 0.2685 secs
  DNS-lookup: 0.0000 secs, 0.0000 secs, 0.0000 secs
  req write:  0.0000 secs, 0.0000 secs, 0.0027 secs
  resp wait:  0.1175 secs, 0.1064 secs, 0.2590 secs
  resp read:  0.0001 secs, 0.0000 secs, 0.0012 secs

Status code distribution:
  [200] 12765 responses



NAME                                             READY   STATUS      RESTARTS   AGE
autoscale-go-00001-deployment-58f8d956d9-57hqb   3/3     Running     0          26s
autoscale-go-00001-deployment-58f8d956d9-6x4v5   3/3     Running     0          20s
autoscale-go-00001-deployment-58f8d956d9-9c5pz   3/3     Running     0          24s
autoscale-go-00001-deployment-58f8d956d9-c5bxv   3/3     Running     0          1m
autoscale-go-00001-deployment-58f8d956d9-ktxf6   3/3     Running     0          20s
autoscale-go-00001-deployment-58f8d956d9-tmv4k   3/3     Running     0          24s
autoscale-go-00001-deployment-58f8d956d9-wn8vh   3/3     Running     0          26s

6)查看仪表板。通过执行以下命令可以查看Knative Serving Scaling和Request仪表板:


kubectl port-forward --namespace knative-monitoring $(kubectl get pods --namespace knative-monitoring --selector=app=grafana --output=jsonpath="{.items..metadata.name}") 3000

打开http://localhost:3000可以看到如图11-11所示的Grafana界面。

图11-11 Grafana界面