Kubernetes - automatyczne skalowanie
Autoscalingjest jedną z kluczowych funkcji klastra Kubernetes. Jest to funkcja, w której klaster jest w stanie zwiększać liczbę węzłów w miarę wzrostu zapotrzebowania na odpowiedź usługi i zmniejszać liczbę węzłów w miarę zmniejszania się wymagań. Ta funkcja automatycznego skalowania jest obecnie obsługiwana w Google Cloud Engine (GCE) i Google Container Engine (GKE) i niedługo zostanie uruchomiona w AWS.
Aby skonfigurować skalowalną infrastrukturę w GCE, musimy najpierw mieć aktywny projekt GCE z włączonymi funkcjami monitorowania w chmurze Google, rejestrowania w chmurze Google i włączonego sterownika Stackdriver.
Najpierw skonfigurujemy klaster z kilkoma działającymi w nim węzłami. Po zakończeniu musimy ustawić następującą zmienną środowiskową.
Zmienna środowiskowa
export NUM_NODES = 2
export KUBE_AUTOSCALER_MIN_NODES = 2
export KUBE_AUTOSCALER_MAX_NODES = 5
export KUBE_ENABLE_CLUSTER_AUTOSCALER = true
Po zakończeniu uruchomimy klaster, uruchamiając kube-up.sh. Spowoduje to utworzenie klastra wraz z dodatkiem auto-skalarnym klastra.
./cluster/kube-up.sh
Podczas tworzenia klastra możemy sprawdzić nasz klaster za pomocą następującego polecenia kubectl.
$ kubectl get nodes
NAME STATUS AGE
kubernetes-master Ready,SchedulingDisabled 10m
kubernetes-minion-group-de5q Ready 10m
kubernetes-minion-group-yhdx Ready 8m
Teraz możemy wdrożyć aplikację w klastrze, a następnie włączyć poziomy autoskaler podów. Można to zrobić za pomocą następującego polecenia.
$ kubectl autoscale deployment <Application Name> --cpu-percent = 50 --min = 1 --
max = 10
Powyższe polecenie pokazuje, że będziemy utrzymywać co najmniej jedną i maksymalnie 10 replik POD w miarę wzrostu obciążenia aplikacji.
Stan autoskalera możemy sprawdzić, uruchamiając plik $kubclt get hpaKomenda. Zwiększymy obciążenie strąków za pomocą następującego polecenia.
$ kubectl run -i --tty load-generator --image = busybox /bin/sh
$ while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done
Możemy sprawdzić hpa biegiem $ kubectl get hpa Komenda.
$ 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
Możemy sprawdzić liczbę działających podów za pomocą następującego polecenia.
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
I wreszcie możemy uzyskać status węzła.
$ 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