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

94 lines
3.4 KiB
Markdown

# 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:
```bash
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:
```bash
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`.