Let's try to put into practice the tools learned in the first type of test. Let's see how reactive our cluster is, or how long it takes to react to changes, as the workload on it varies. To put the cluster in "crisis", we will use the tools already encountered in the parent chapter.

As we have already done, we entrust the php-apache application to HPA and create a replica of infinite-calls. In this case we limit ourselves to creating only 2 replicas, because we want to test the reactivity of the cluster at a medium-low intensity load. As mentioned in the introductory part of this chapter, the data are the result of tests carried out on 3 different flavors, shown in descending order

LoadTest (xLarge)
$ kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=20
$ kubectl scale deploy infinite-calls --replicas=2
$ kubectl get hpa --watch
NAME         REFERENCE               TARGETS    MINPODS   MAXPODS  REPLICAS   AGE
php-apache   Deployment/php-apache   0%/50%     1         20       1          11m # Starting the workload
php-apache   Deployment/php-apache   119%/50%   1         20       1          11m
php-apache   Deployment/php-apache   119%/50%   1         20       3          11m
php-apache   Deployment/php-apache   180%/50%   1         20       3          12m
php-apache   Deployment/php-apache   180%/50%   1         20       6          12m
php-apache   Deployment/php-apache   180%/50%   1         20       11         13m
php-apache   Deployment/php-apache   51%/50%    1         20       11         13m # Beginning of the plateau
php-apache   Deployment/php-apache   49%/50%    1         20       11         14m
php-apache   Deployment/php-apache   52%/50%    1         20       11         15m
php-apache   Deployment/php-apache   50%/50%    1         20       11         16m
php-apache   Deployment/php-apache   51%/50%    1         20       11         17m
php-apache   Deployment/php-apache   50%/50%    1         20       11         18m
php-apache   Deployment/php-apache   48%/50%    1         20       11         19m
php-apache   Deployment/php-apache   50%/50%    1         20       11         20m
php-apache   Deployment/php-apache   49%/50%    1         20       11         21m
php-apache   Deployment/php-apache   49%/50%    1         20       11         23m # End of the plateau
php-apache   Deployment/php-apache   24%/50%    1         20       11         24m	
php-apache   Deployment/php-apache   0%/50%     1         20       11         25m
php-apache   Deployment/php-apache   0%/50%     1         20       11         29m
php-apache   Deployment/php-apache   0%/50%     1         20       6          29m
php-apache   Deployment/php-apache   0%/50%     1         20       6          30m
php-apache   Deployment/php-apache   0%/50%     1         20       1          30m # End of workload
LoadTest (large)
$ kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=20
$ kubectl scale deploy infinite-calls --replicas=2
$ kubectl get hpa --watch
NAME         REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   0%/50%     1         20        1          9m42s # Starting the workload
php-apache   Deployment/php-apache   250%/50%   1         20        1          10m
php-apache   Deployment/php-apache   250%/50%   1         20        4          10m
php-apache   Deployment/php-apache   250%/50%   1         20        5          10m
php-apache   Deployment/php-apache   115%/50%   1         20        5          11m
php-apache   Deployment/php-apache   115%/50%   1         20        10         11m
php-apache   Deployment/php-apache   56%/50%    1         20        10         12m
php-apache   Deployment/php-apache   56%/50%    1         20        10         13m
php-apache   Deployment/php-apache   56%/50%    1         20        12         13m
php-apache   Deployment/php-apache   47%/50%    1         20        12         14m # Beginning of the plateau
php-apache   Deployment/php-apache   45%/50%    1         20        12         15m
php-apache   Deployment/php-apache   44%/50%    1         20        12         16m
php-apache   Deployment/php-apache   45%/50%    1         20        12         17m
php-apache   Deployment/php-apache   47%/50%    1         20        12         18m
php-apache   Deployment/php-apache   46%/50%    1         20        12         19m
php-apache   Deployment/php-apache   45%/50%    1         20        12         20m
php-apache   Deployment/php-apache   46%/50%    1         20        12         21m
php-apache   Deployment/php-apache   46%/50%    1         20        12         22m
php-apache   Deployment/php-apache   45%/50%    1         20        12         24m
php-apache   Deployment/php-apache   45%/50%    1         20        12         25m
php-apache   Deployment/php-apache   45%/50%    1         20        12         26m # End of the plateau
php-apache   Deployment/php-apache   0%/50%     1         20        12         27m
php-apache   Deployment/php-apache   0%/50%     1         20        12         32m
php-apache   Deployment/php-apache   0%/50%     1         20        1          32m # End the workload
LoadTest (medium)
$ k autoscale deployment php-apache --cpu-percent=50 --min=1 --max=20
$ k scale deploy infinite-calls --replicas=2
$ kubectl get hpa --watch
NAME         REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   0%/50%     1         20        1          35m # Starting the workload
php-apache   Deployment/php-apache   251%/50%   1         20        1          36m
php-apache   Deployment/php-apache   251%/50%   1         20        4          36m
php-apache   Deployment/php-apache   251%/50%   1         20        6          36m
php-apache   Deployment/php-apache   89%/50%    1         20        6          37m
php-apache   Deployment/php-apache   89%/50%    1         20        9          37m
php-apache   Deployment/php-apache   62%/50%    1         20        9          38m
php-apache   Deployment/php-apache   62%/50%    1         20        12         38m 
php-apache   Deployment/php-apache   47%/50%    1         20        12         39m # Beginning of the plateau
php-apache   Deployment/php-apache   45%/50%    1         20        12         40m
php-apache   Deployment/php-apache   47%/50%    1         20        12         41m
php-apache   Deployment/php-apache   45%/50%    1         20        12         42m
php-apache   Deployment/php-apache   46%/50%    1         20        12         43m
php-apache   Deployment/php-apache   45%/50%    1         20        12         44m
php-apache   Deployment/php-apache   46%/50%    1         20        12         45m
php-apache   Deployment/php-apache   47%/50%    1         20        12         46m
php-apache   Deployment/php-apache   45%/50%    1         20        12         47m
php-apache   Deployment/php-apache   45%/50%    1         20        12         48m
php-apache   Deployment/php-apache   45%/50%    1         20        12         49m
php-apache   Deployment/php-apache   45%/50%    1         20        12         50m # End of the plateau
php-apache   Deployment/php-apache   0%/50%     1         20        12         51m
php-apache   Deployment/php-apache   0%/50%     1         20        12         56m
php-apache   Deployment/php-apache   0%/50%     1         20        1          56m # End of workload

We note that the reaction time of the cluster, from the rest position to the plateau and vice versa, is about 4-5 minutes, regardless of the flavor used. Of course, the same behavior can also be seen by analyzing the metrics obtained by Grafana (the stress namespace is the one used for our tests).LoadTest (xLarge)

LoadTest (large)

LoadTest (medium)

  • No labels