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界面