|
||
---|---|---|
.. | ||
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 hey
for 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 --watch
Note: 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