Load Testing of a Microservice. Kubernetes way
Let’s assume there is a microservice represented by a composition of containers running on a K8s cluster somewhere in a cloud, e.g.
Oracle Kubernetes Engine (OKE). At some point we want to quickly stress test a specific microservice component or the entire microservice. So we want to know how it works under the load, how it handles many subsequent requests coming from many parallel clients. The good news is that we have already a tool for that. Up and running. This is the Kubernetes cluster itself.
We’re going to use Kubernetes Job for this testing described in the following manifest file:
01 02 03 04 05 06 07 08 09 10 11 12 13 | apiVersion: batch/v1 kind: Job metadata: name: job-load spec: parallelism: 50 template: spec: containers: - name: loader image: eugeneflexagon/aplpine-with-curl: 1.0 . 0 restartPolicy: OnFailure |
This job is going to spin up 50 pods running in parallel and sending 100 requests each to my_service on port 8080 and with path my_path. Having the job created and started by invoking
1 | kubectl apply -f loadjob.yaml |
We can observe all 50 pods created by the job using
kubectl get pods -l job-name=job-load
1 2 3 4 5 6 7 | NAME READY STATUS RESTARTS AGE job-load-4n262 1 / 2 Completed 1 12m job-load-dsqtc 1 / 2 Completed 1 12m job-load-khdn4 1 / 2 Completed 1 12m job-load-kptww 1 / 2 Completed 1 12m job-load-wf9pd 1 / 2 Completed 1 12m ... |
If we look at the logs of any of these pods
1 | kubectl logs job-load-4n262 |
We’ll see something like the following:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 | [ 1 / 100 ]: http: //my_service.my_namespace:8080/my_path?1 --> <stdout> { "id" : 456 , "content" : "Hello world!" } [ 2 / 100 ]: http: //my_service.my_namespace:8080/my_path?2 --> <stdout> { "id" : 457 , "content" : "Hello world!" } [ 3 / 100 ]: http: //my_service.my_namespace:8080/my_path?3 --> <stdout> { "id" : 458 , "content" : "Hello world!" } .... real 0m 10 .04s user 0m 0 .00s sys 0m 0 .04s |
That’s it!
Published on Java Code Geeks with permission by Eugene Fedorenko , partner at our JCG program. See the original article here: Load Testing of a Microservice. Kubernetes way. Opinions expressed by Java Code Geeks contributors are their own. |