Kubernetes - escalonamento automático

Autoscalingé um dos principais recursos do cluster Kubernetes. É um recurso no qual o cluster é capaz de aumentar o número de nós conforme a demanda por resposta de serviço aumenta e diminuir o número de nós conforme o requisito diminui. Este recurso de escalonamento automático é atualmente compatível com o Google Cloud Engine (GCE) e o Google Container Engine (GKE) e começará com a AWS em breve.

Para configurar a infraestrutura escalonável no GCE, primeiro precisamos ter um projeto GCE ativo com recursos de monitoramento de nuvem do Google, registro em nuvem do Google e stackdriver habilitado.

Primeiro, vamos configurar o cluster com poucos nós em execução. Uma vez feito isso, precisamos configurar a seguinte variável de ambiente.

Variável de ambiente

export NUM_NODES = 2
export KUBE_AUTOSCALER_MIN_NODES = 2
export KUBE_AUTOSCALER_MAX_NODES = 5
export KUBE_ENABLE_CLUSTER_AUTOSCALER = true

Uma vez feito isso, vamos iniciar o cluster executando kube-up.sh. Isso criará um cluster junto com o complemento auto-escalar do cluster.

./cluster/kube-up.sh

Na criação do cluster, podemos verificar nosso cluster usando o seguinte comando kubectl.

$ kubectl get nodes
NAME                             STATUS                       AGE
kubernetes-master                Ready,SchedulingDisabled     10m
kubernetes-minion-group-de5q     Ready                        10m
kubernetes-minion-group-yhdx     Ready                        8m

Agora, podemos implantar um aplicativo no cluster e habilitar o autoescalador horizontal do pod. Isso pode ser feito usando o seguinte comando.

$ kubectl autoscale deployment <Application Name> --cpu-percent = 50 --min = 1 --
max = 10

O comando acima mostra que manteremos pelo menos uma e no máximo 10 réplicas do POD conforme a carga no aplicativo aumenta.

Podemos verificar o status do autoescalador executando o $kubclt get hpacomando. Vamos aumentar a carga nos pods usando o seguinte comando.

$ kubectl run -i --tty load-generator --image = busybox /bin/sh
$ while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done

Podemos verificar o hpa Correndo $ kubectl get hpa comando.

$ kubectl get hpa
NAME         REFERENCE                     TARGET CURRENT
php-apache   Deployment/php-apache/scale    50%    310%

MINPODS  MAXPODS   AGE
  1        20      2m
  
$ kubectl get deployment php-apache
NAME         DESIRED    CURRENT    UP-TO-DATE    AVAILABLE   AGE
php-apache      7          7           7            3        4m

Podemos verificar o número de pods em execução usando o seguinte comando.

jsz@jsz-desk2:~/k8s-src$ kubectl get pods
php-apache-2046965998-3ewo6 0/1        Pending 0         1m
php-apache-2046965998-8m03k 1/1        Running 0         1m
php-apache-2046965998-ddpgp 1/1        Running 0         5m
php-apache-2046965998-lrik6 1/1        Running 0         1m
php-apache-2046965998-nj465 0/1        Pending 0         1m
php-apache-2046965998-tmwg1 1/1        Running 0         1m
php-apache-2046965998-xkbw1 0/1        Pending 0         1m

E, finalmente, podemos obter o status do nó.

$ kubectl get nodes
NAME                             STATUS                        AGE
kubernetes-master                Ready,SchedulingDisabled      9m
kubernetes-minion-group-6z5i     Ready                         43s
kubernetes-minion-group-de5q     Ready                         9m
kubernetes-minion-group-yhdx     Ready                         9m