docs/docs/getting-started/first-autoscale.md

3.4 KiB

Autoscaling

Knative Serving provides automatic scaling, also known as autoscaling. This means that a Knative Service by default scales down to zero running pods when it is not in use.

List your Knative Service

Use the Knative (kn) CLI to view the URL where your Knative Service is hosted:

=== "kn" View a list of Knative Services by running the command: bash kn service list !!! Success "Expected output" bash NAME URL LATEST AGE CONDITIONS READY hello http://hello.default.${LOADBALANCER_IP}.sslip.io hello-00001 13s 3 OK / 3 True === "kubectl" View a list of Knative Services by running the command: bash kubectl get ksvc !!! Success "Expected output" bash NAME URL LATESTCREATED LATESTREADY READY REASON hello http://hello.default.${LOADBALANCER_IP}.sslip.io hello-00001 hello-00001 True

Access your Knative Service

Access your Knative Service by opening the previous URL in your browser or by running the command:

echo "Accessing URL $(kn service describe hello -o url)"
curl "$(kn service describe hello -o url)"

!!! Success "Expected output" { .bash .no-copy } Hello World!

??? question "Are you seeing curl: (6) Could not resolve host: hello.default.${LOADBALANCER_IP}.sslip.io?"

In some cases your DNS server may be set up not to resolve `*.sslip.io` addresses. If you encounter this problem, it can be fixed by using a different nameserver to resolve these addresses.

The exact steps will differ according to your distribution. For example, with Ubuntu derived systems which use `systemd-resolved`, you can add the following entry to the `/etc/systemd/resolved.conf`:

```ini
[Resolve]
DNS=8.8.8.8
Domains=~sslip.io.
```

Then simply restart the service with `sudo service systemd-resolved restart`.

For MacOS users, you can add the DNS and domain using the network settings as explained [here](https://support.apple.com/en-gb/guide/mac-help/mh14127/mac).

Observe autoscaling

Watch the pods and see how they scale to zero after traffic stops going to the URL:

kubectl get pod -l serving.knative.dev/service=hello -w

!!! note It may take up to 2 minutes for your pods to scale down. Pinging your service again resets this timer.

!!! Success "Expected output" { .bash .no-copy } NAME READY STATUS hello-world 2/2 Running hello-world 2/2 Terminating hello-world 1/2 Terminating hello-world 0/2 Terminating

Scale up your Knative Service

Rerun the Knative Service in your browser. You can see a new pod running again:

!!! Success "Expected output" { .bash .no-copy } NAME READY STATUS hello-world 0/2 Pending hello-world 0/2 ContainerCreating hello-world 1/2 Running hello-world 2/2 Running

Exit the kubectl watch command with Ctrl+c.