This post will show the most straightforward yet extremely powerful way to simulate traffic load in your environment, including the Kubernetes cluster. We will be using fortio
for traffic generation for desired duration and requests per second. To see fortio in action, let’s see an example:
we assume our application is an Nginx pod and will send the desired number of queries per second to the nginx pod.
#Create Nginx pod
kubectl run nginx --image nginx
pod/nginx created
#expose the pod via a service of any type, for simplicity I used NodePort
kubectl expose pod nginx --name nginx --port 80 --type NodePort
service/nginx exposed
#validate that the pod is up and service is created
kubectl get all -l run=nginx
NAME READY STATUS RESTARTS AGE
pod/nginx 2/2 Running 0 82s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.233.38.212 <none> 80:31308/TCP 24s
Using the following YAML, create a traffic generator POD.
apiVersion: v1
kind: Pod
metadata:
name: traffic-generator
labels:
app: traffic-generator
spec:
containers:
- name: fortio
image: fortio/fortio
args: ["load", "-t", "0", "-qps", "30", "nginx.default.svc"]
In the above manifest file’s args:
"-t 0" means run the traffic generation perpetually; alternatively, you can set it to some value like 30m for 30 minutes if you want it to run under Kubernetes Jobs(anything not perpetual).
"-qps 30" means the number of queries per second. You can set whatever you like.
"nginx.default.svc" is the target against traffic is generated.
With the help of Istio Addons(Kiali), I can visualize the traffic rate. (optional for this activity)
Summary:
You can find significant details about fortio on its GitHub page linked here.
I have only demoed the -t and -qps flags. However, fortio is a great tool and could be used in many other ways. Consider checking the flags and documentation.
Note: You can download the binary and use it for traffic generation even out of the Kubernetes environment.