Horizontal Pod Autoscaler in Kubernetes


Делаю:
16.04.2019

По материалам из видео индуса:

https://www.youtube.com/watch?v=uxuyPru3_Lc&list=PL34sAs7_26wNBRWM6BDhnonoA5FMERax0&index=37


Подготовили кластер и окружение как здесь.


Рисунок индуса:

Horizontal Pod Autoscaler


Устанавливаем Metrics server

https://github.com/kubernetes-incubator/metrics-server

$ cd ~/tmp
$ git clone https://github.com/kubernetes-incubator/metrics-server
$ cd metrics-server/deploy/1.8+/


$ vi metrics-server-deployment.yaml


После image: k8s.gcr.io/metrics-server-amd64:v0.3.1 добавили следующее

command:
    - /metrics-server
    - --kubelet-insecure-tls


$ kubectl create -f .


$ kubectl -n kube-system get pods | grep metrics-server
metrics-server-8c667b587-kv88r       1/1     Running   0          19s


$ kubectl -n kube-system logs metrics-server-8c667b587-kv88r


$ kubectl top nodes
NAME         CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
master.k8s   218m         10%    1055Mi          60%
node1.k8s    51m          2%     486Mi           27%
node2.k8s    56m          2%     485Mi           27%


Nginx Deployment

$ kubectl run nginx --image nginx
$ kubectl expose deploy nginx --port 80 --type NodePort


Устанавливаем Resource Limits

$ kubectl edit deploy nginx

В конце блока containers добавляем

resources:
    limits:
        cpu: "100m"
    requests:
        cpu: "100m"


Устанавливаем Horizontal Pod Autoscaler

$ kubectl create -f https://bitbucket.org/sysadm-ru/kubernetes/raw/004fd3d9c66f2eb453324d24e94eaabc65491895/yamls/10-hpa.yaml


// Можно тоже самое написать командой
$ kubectl autoscale deploy nginx --min 1 --max 5 --cpu-percent 20


$ kubectl get all

***
NAME                                        REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
horizontalpodautoscaler.autoscaling/nginx   Deployment/nginx   0%/20%    1         5         1          17s


$ kubectl top pods
NAME                     CPU(cores)   MEMORY(bytes)
nginx-6748b7bf68-h25bn   0m           2Mi


# apt install -y siege

$ curl -I http://node1:32378
OK

$ siege -q -c 5 -t 2m http://node1:32378


// Автоматически увеличилось количество реплик
$ kubectl get all
***
NAME                                        REFERENCE          TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
horizontalpodautoscaler.autoscaling/nginx   Deployment/nginx   101%/20%   1         5         4          9m23s


$ kubectl top pods
NAME                     CPU(cores)   MEMORY(bytes)
nginx-6748b7bf68-4lnqb   59m          2Mi
nginx-6748b7bf68-h25bn   36m          2Mi
nginx-6748b7bf68-jz897   43m          2Mi
nginx-6748b7bf68-pnmzh   46m          2Mi
nginx-6748b7bf68-zgwp7   46m          2Mi


Конец

После того как siege отработала, прошло еще минут 5-10 и количество реплик стало:

$ kubectl get all
***
NAME                                        REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
horizontalpodautoscaler.autoscaling/nginx   Deployment/nginx   0%/20%    1         5         1          18m


$ kubectl top pods
NAME                     CPU(cores)   MEMORY(bytes)
nginx-6748b7bf68-h25bn   0m           2Mi