DevOps

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
           command: ["time", "curl", "http://my_service:8080/my_path?[1-100]"]    
       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.

Eugene Fedorenko

I am a Senior Architect at Flexagon focusing on ADF and many other things.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to top button