|
|
||
|---|---|---|
| .. | ||
| hey | ||
| Dockerfile | ||
| OWNERS | ||
| README.md | ||
| autoscale.go | ||
| sample.yaml | ||
README.md
Autoscale Sample
A demonstration of the autoscaling capabilities of an Knative Serving Revision.
Prerequisites
- A Kubernetes cluster with Knative Serving installed.
- Install Docker.
- Check out the code:
go get -d github.com/knative/docs/serving/samples/autoscale-go
Setup
Build the application container and publish it to a container registry:
-
Move into the sample directory:
cd $GOPATH/src/github.com/knative/docs -
Set your preferred container registry:
export REPO="gcr.io/<YOUR_PROJECT_ID>"- This example shows how to use Google Container Registry (GCR). You will need a Google Cloud Project and to enable the Google Container Registry API.
-
Use Docker to build your application container:
docker build \ --tag "${REPO}/serving/samples/autoscale-go" \ --file=serving/samples/autoscale-go/Dockerfile . -
Push your container to a container registry:
docker push "${REPO}/serving/samples/autoscale-go" -
Replace the image reference with our published image:
perl -pi -e \ "s@github.com/knative/docs/serving/samples/autoscale-go@${REPO}/serving/samples/autoscale-go@g" \ serving/samples/autoscale-go/sample.yaml
Deploy the Service
-
Deploy the Knative Serving sample:
kubectl apply -f serving/samples/autoscale-go/sample.yaml -
Find the ingress hostname and IP and export as an environment variable:
export SERVICE_HOST=`kubectl get route autoscale-route -o jsonpath="{.status.domain}"` export SERVICE_IP=`kubectl get svc knative-ingressgateway -n istio-system -o jsonpath="{.status.loadBalancer.ingress[*].ip}"`
View the Autoscaling Capabilities
-
Request the largest prime less than 40,000,000 from the autoscale app. Note that it consumes about 1 cpu/sec.
time curl --header "Host:$SERVICE_HOST" http://${SERVICE_IP?}/primes/40000000 -
Ramp up traffic on the autoscale app (about 300 QPS):
kubectl delete namespace hey --ignore-not-found && kubectl create namespace heyfor i in `seq 2 2 60`; do kubectl -n hey run hey-$i --image josephburnett/hey --restart Never -- \ -n 999999 -c $i -z 2m -host $SERVICE_HOST \ "http://${SERVICE_IP?}/primes/40000000" sleep 1 done -
Watch the Knative Serving deployment pod count increase.
kubectl get deploy --watchNote: Use CTRL+C to exit watch mode.
-
Watch the pod traffic ramp up.
kubectl get pods -n hey --show-all --watch -
Look at the latency, requests/sec and success rate of each pod.
for i in `seq 2 2 60`; do kubectl -n hey logs hey-$i ; done
Cleanup
kubectl delete namespace hey
kubectl delete -f serving/samples/autoscale-go/sample.yaml