Autoscaling

Per questo esercizio occorre Minikube.

Lanciare Minikube:

minikube start --base-image='gcr.io/k8s-minikube/kicbase:v0.0.35'

Abilitare lo add-on Metrics Server:

minikube addons enable metrics-server

Controllare gli add-on:

minikube addons list
mkdir -p ~/ex/auto
wget https://k8s.io/examples/application/php-apache.yaml
mv php-apache.yaml ~/ex/auto/php-apache.yml
cd ~/ex/auto

Applichiamo il deployment:

kubectl apply -f php-apache.yml

L'immagine scaricata compie del lavoro intensivo di CPU:

<?php
  $x = 0.0001;
  for ($i = 0; $i <= 1000000; $i++) {
    $x += sqrt($x);
  }
  echo "OK!";
?>

Creiamo uno Horizontal Pod Autoscaler:

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

Verifichiamo gli HPA:

kubectl get hpa

Per aumentare il carico, in un'altra finestra:

kubectl run -it --rm load-generator --image=busybox /bin/sh

E all'interno del contenitore lanciamo il comando:

while true; do wget -q -O- http://php-apache; done

Sul primo terminale:

kubectl get hpa -w
kubectl get pods

Torniamo sul secondo terminale e interrompiamo con Ctrl-C.

Sul primo terminale ripetiamo:

kubectl get hpa -w
kubectl get pods

Canccellare lo autoscaler:

kubectl delete hpa php-apache

Pulizia:

kubectl delete -f php-apache.yml