Testing Connectivity Between Kubernetes Pods with Iperf3
This document (000020954) is provided subject to the disclaimer at the end of this document.
Environment
- A running Kubernetes cluster
- The kubectl command-line tool installed on your local machine
Situation
In this article, we will show you how to use iperf3 to test the connectivity between Kubernetes pods in your cluster. We will use a Deployment to ensure that iperf3 pods are running on each node in the cluster.
Resolution
Step 1: Deploy Iperf3 as a DaemonSet
To deploy iperf3 as a Deployment on your Kubernetes cluster, you will need to create a YAML file with the following contents:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: iperf3-ds
spec:
selector:
matchLabels:
app: iperf3
template:
metadata:
labels:
app: iperf3
spec:
containers:
- name: iperf3
image: leodotcloud/swiss-army-knife
ports:
- containerPort: 5201
This YAML file creates a Deployment named iperf3-ds of the iperf3 container.
You can then create the DaemonSet by running the following command:
kubectl apply -f iperf3-ds.yaml
Step 2: Verify the DaemonSet
Once the DaemonSet is up and running, you can use the following command to check that iperf3 pods are running on all nodes in the cluster:
kubectl get pods
You should see output similar to the following:
NAME READY STATUS RESTARTS AGE
iperf3-ds-5b7f6f5c8-5wcw5 1/1 Running 0 36s
iperf3-ds-5b7f6f5c8-6q4q4 1/1 Running 0 36s
iperf3-ds-5b7f6f5c8-8wnw7 1/1 Running 0 36s
Step 3: Test Connectivity Between Pods
To test the connectivity between pods, you will need to use the pod's IP addresses. You can use the following command to get the IP addresses of the pods:
kubectl get pods -o wide
You should see output similar to the following:
NAME READY STATUS RESTARTS AGE IP NODE
iperf3-ds-5b7f6f5c8-5wcw5 1/1 Running 0 36s 10.1.0.1 node1
iperf3-ds-5b7f6f5c8-6q4q4 1/1 Running 0 36s 10.1.0.2 node2
iperf3-ds-5b7f6f5c8-8wnw7 1/1 Running 0 36s 10.1.0.3 node3
Once you have the IP addresses of the pods you want to test, you can use the iperf3 command to test the connectivity.
First, choose a pod to run in server mode:
kubectl exec -it <pod-name> -- iperf3 -s -p 12345
Second, choose a pod to run in client mode:
kubectl exec -it <pod-name> -- iperf3 -c <server pod IP address> -p 12345
The iperf3 command will output the network performance statistics, including the bandwidth, packet loss, and jitter.
This is an example output from a test cluster; please note that due to the various layers of networking involved, there is a performance impact that is expected:
Connecting to host 10.42.0.36, port 12345
[ 4] local 10.42.0.37 port 45568 connected to 10.42.0.36 port 12345
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 2.23 GBytes 19.1 Gbits/sec 300 2.88 MBytes
[ 4] 1.00-2.00 sec 2.49 GBytes 21.4 Gbits/sec 737 1.58 MBytes
[ 4] 2.00-3.00 sec 2.42 GBytes 20.8 Gbits/sec 524 2.33 MBytes
[ 4] 3.00-4.00 sec 2.17 GBytes 18.6 Gbits/sec 248 2.41 MBytes
[ 4] 4.00-5.00 sec 2.25 GBytes 19.3 Gbits/sec 151 2.45 MBytes
[ 4] 5.00-6.00 sec 2.36 GBytes 20.2 Gbits/sec 73 3.00 MBytes
[ 4] 6.00-7.00 sec 2.40 GBytes 20.6 Gbits/sec 181 2.84 MBytes
[ 4] 7.00-8.00 sec 2.29 GBytes 19.7 Gbits/sec 73 2.64 MBytes
[ 4] 8.00-9.00 sec 2.35 GBytes 20.2 Gbits/sec 110 2.44 MBytes
[ 4] 9.00-10.00 sec 2.27 GBytes 19.5 Gbits/sec 167 2.43 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 23.2 GBytes 19.9 Gbits/sec 2564 sender
[ 4] 0.00-10.00 sec 23.2 GBytes 19.9 Gbits/sec receiver
Cause
In this article, we have shown you how to use iperf3 to test connectivity between Kubernetes pods in your cluster. We have used a DaemonSet to ensure that iperf3 pods are running on each node in the cluster. We hope that this article has helped demonstrate how to use iperf3 for testing connectivity between pods in your Kubernetes cluster.
Additional Information
https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
Disclaimer
This Support Knowledgebase provides a valuable tool for SUSE customers and parties interested in our products and solutions to acquire information, ideas and learn from one another. Materials are provided for informational, personal or non-commercial use within your organization and are presented "AS IS" WITHOUT WARRANTY OF ANY KIND.