diff --git a/README.txt b/README.txt index c4713a0..9d1a863 100644 --- a/README.txt +++ b/README.txt @@ -1,6 +1,12 @@ Since THPA comprises of 2 components custom kube-controller-manager and scheduler-extender so we need to modify these: +*** Collecting nodes traffic *** + +- Copy kube-proxy binary file in kube-proxy directory to /usr/local/bin/ in kube-proxy container running on each node and then reset it. + +- Check that enpoint is created on each node whenever new deployment is created to make sure we configure correctly. + *** set nodes label *** - For worker nodes, set the following label to them: node-role.kubernetes.io/worker=true @@ -9,7 +15,7 @@ we need to modify these: - cd to kube-controller-manager directory. -- Copy binary file "kube-controller-manager" to home directory. +- Unzip and copy binary file "kube-controller-manager" to home directory. - Copy kube-controller-manager.yaml to /etc/kubernetes/manifests/ diff --git a/add_delay.sh b/add_delay.sh new file mode 100755 index 0000000..538dec3 --- /dev/null +++ b/add_delay.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +#example: ./add_delay_rule.sh 10.244.1.0 10.244.3.0 5 + +ip1=$1 +ip2=$2 +delay1=$3 +delay2=$4 +dis=1 #echo $delay/5 | bc` +echo "ip1 = $ip1, ip2 = $ip2, delay1 = $delay1, delay2 = $delay2, dis = $dis" +#echo "ip1 = $ip1, delay = $delay, dis = $dis" + +sudo tc qdisc del dev flannel.1 root +#sudo tc qdisc add dev flannel.1 root handle 1: prio +sudo tc qdisc add dev flannel.1 root handle 1: prio priomap 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +sudo tc qdisc add dev flannel.1 parent 1:2 handle 20: netem delay ${delay1}ms ${dis}ms distribution normal +sudo tc qdisc add dev flannel.1 parent 1:3 handle 30: netem delay ${delay2}ms ${dis}ms distribution normal +sudo tc filter add dev flannel.1 protocol ip parent 1:0 u32 match ip dst $ip1/24 flowid 1:2 +sudo tc filter add dev flannel.1 protocol ip parent 1:0 u32 match ip dst $ip2/24 flowid 1:3 diff --git a/experimental-scripts/sectionV_A/auto_hey_test_all_notEqualTraffic b/experimental-scripts/sectionV_A/auto_hey_test_all_notEqualTraffic new file mode 100755 index 0000000..bdfa35c --- /dev/null +++ b/experimental-scripts/sectionV_A/auto_hey_test_all_notEqualTraffic @@ -0,0 +1,73 @@ +#!/bin/bash + +# send to ip address of worker node 2 +#con=$1 # number of concurrency requests +duration=$1 +numOfRequest=$2 +Port=$3 +con1=$4 +con2=$5 +con3=$6 +HOSTNAMES=("node1" "node2" "node3") + +./cleanLog + +if [[ $con1 -gt 0 ]] +then + count=0 + echo "test node1" + while [ $count -lt $con1 ] + do + echo "Thread: $count" + hey -c 1 -z $duration's' -q 16 -n $numOfRequest -disable-keepalive http://node1:$Port/ > heytestNode1_${count}.log & + count=$((count+1)) + done + #hey -c $con1 -z $duration -q 60 -n 50000 http://node1:$Port/ > heytestNode1_load & +fi + +if [[ $con2 -gt 0 ]] +then + count=0 + echo "test node2" + while [ $count -lt $con2 ] + do + echo "Thread: $count" + hey -c 1 -z $duration's' -q 16 -n $numOfRequest -disable-keepalive http://node2:$Port/ > heytestNode2_${count}.log & + count=$((count+1)) + done + #hey -c $con2 -z $duration -q 60 -n 50000 http://node2:$Port/ > heytestNode2_load & +fi + +if [[ $con3 -gt 0 ]] +then + count=0 + echo "test node3" + while [ $count -lt $con3 ] + do + echo "Thread: $count" + hey -c 1 -z $duration's' -q 16 -n $numOfRequest -disable-keepalive http://node3:$Port/ > heytestNode3_${count}.log & + count=$((count+1)) + done + #hey -c $con3 -z $duration -q 60 -n 50000 http://node3:$Port/ > heytestNode3_load & +fi + +echo "Performing test" +sleep $duration +echo "Done" + +#rm -rf ${con1}_${con2}_${con3}_test +#touch ${con1}_${con2}_${con3}_test + +#CPU=$(kubectl get hpa | awk '{print $3}' | tail -n +2 | cut -d'/' -f 1 | cut -d'%' -f 1) + +#while $CPU -gt 10 +#do +# CPU=$(kubectl get hpa | awk '{print $3}' | tail -n +2 | cut -d'/' -f 1 | cut -d'%' -f 1) +# sleep 2 +#done + +#currentReplicas=$(kubectl get hpa | awk '{print $6}' | tail -n +2) + +#echo "$currentReplicas $con1:$con2:$con3 $currentReplicas $(kubectl get pods -o wide | grep -c "node1"):$(kubectl get pods -o wide | grep -c "node2"):$(kubectl get pods -o wide | grep -c "node3")" > ${con1}_${con2}_${con3}_test + + diff --git a/experimental-scripts/sectionV_A/autoscling_realTime_test b/experimental-scripts/sectionV_A/autoscling_realTime_test new file mode 100755 index 0000000..6c4832a --- /dev/null +++ b/experimental-scripts/sectionV_A/autoscling_realTime_test @@ -0,0 +1,13 @@ +#!/bin/bash + + +echo "Begin" +echo "1-1-1" +./auto_hey_test_all_notEqualTraffic 30 100000 30009 1 1 1 +echo "8-8-8" +./auto_hey_test_all_notEqualTraffic 120 100000 30009 8 8 8 +echo "8-0-0" +./auto_hey_test_all_notEqualTraffic 420 100000 30009 8 0 0 +echo "1-1-1" +./auto_hey_test_all_notEqualTraffic 420 100000 30009 1 1 1 +echo "finish" diff --git a/experimental-scripts/sectionV_B/auto_ab_eva_node b/experimental-scripts/sectionV_B/auto_ab_eva_node new file mode 100755 index 0000000..32882ff --- /dev/null +++ b/experimental-scripts/sectionV_B/auto_ab_eva_node @@ -0,0 +1,44 @@ +#!/bin/bash + +#con=$1 # number of concurrency requests +duration=60 +numOfRequest=50000 +ipWithPort=$1 +eva_case=$2 + +rm eva_$eva_case +touch eva_$eva_case + +for i in 3 6 9 12 + +do + rm log_test_send_$i + ab -c $i -t $duration -n $numOfRequest http://$ipWithPort/ > log_test_send_$i + sleep 40 +done + +for i in 3 6 9 8 12 + +do + + sum=0 + sum_mean=0 + sum_sd=0 + nr=`cat log_test_send_$i | grep "Requests per second" | sed 's/[^0-9.]*//g'` + + sum=`echo $sum + $nr | bc` + + totaltime=`cat log_test_send_$i | grep "Total:"` + + mean=`echo $totaltime | awk '{print $3}'` + + sum_mean=`echo $sum_mean + $mean | bc` + + sd=`echo $totaltime | awk '{print $4}'` + + sum_sd=`echo $sum_sd + $sd | bc` + + + echo "${sum} ${sum_mean} ${sum_sd}" >> eva_$eva_case +done + diff --git a/experimental-scripts/sectionV_C_1/auto_ab_eva_node b/experimental-scripts/sectionV_C_1/auto_ab_eva_node new file mode 100755 index 0000000..32882ff --- /dev/null +++ b/experimental-scripts/sectionV_C_1/auto_ab_eva_node @@ -0,0 +1,44 @@ +#!/bin/bash + +#con=$1 # number of concurrency requests +duration=60 +numOfRequest=50000 +ipWithPort=$1 +eva_case=$2 + +rm eva_$eva_case +touch eva_$eva_case + +for i in 3 6 9 12 + +do + rm log_test_send_$i + ab -c $i -t $duration -n $numOfRequest http://$ipWithPort/ > log_test_send_$i + sleep 40 +done + +for i in 3 6 9 8 12 + +do + + sum=0 + sum_mean=0 + sum_sd=0 + nr=`cat log_test_send_$i | grep "Requests per second" | sed 's/[^0-9.]*//g'` + + sum=`echo $sum + $nr | bc` + + totaltime=`cat log_test_send_$i | grep "Total:"` + + mean=`echo $totaltime | awk '{print $3}'` + + sum_mean=`echo $sum_mean + $mean | bc` + + sd=`echo $totaltime | awk '{print $4}'` + + sum_sd=`echo $sum_sd + $sd | bc` + + + echo "${sum} ${sum_mean} ${sum_sd}" >> eva_$eva_case +done + diff --git a/experimental-scripts/sectionV_C_2/ab_test_cummulative_diff b/experimental-scripts/sectionV_C_2/ab_test_cummulative_diff new file mode 100755 index 0000000..47ca875 --- /dev/null +++ b/experimental-scripts/sectionV_C_2/ab_test_cummulative_diff @@ -0,0 +1,49 @@ +#!/bin/bash + +# send to ip address of worker node 2 +#con=$1 # number of concurrency requests +duration=60 +numOfRequest=50000 +Port=$1 +con1=$2 +con2=$3 +con3=$4 +eva_case=$5 +HOSTNAMES=("node1" "node2" "node3") + +rm eva_all_notEqualTraffic_$eva_case +touch eva_all_notEqualTraffic_$eva_case + +rm log_node1 +rm log_node2 +rm log_node3 + +ab -c $con1 -t $duration -n $numOfRequest http://node1:$Port/ > log_node1 & +ab -c $con2 -t $duration -n $numOfRequest http://node2:$Port/ > log_node2 & +ab -c $con3 -t $duration -n $numOfRequest http://node3:$Port/ > log_node3 & + +sleep 70 + +for HOST in ${HOSTNAMES[@]} +do + + sum=0 + sum_mean=0 + sum_sd=0 + nr=`cat log_$HOST | grep "Requests per second" | sed 's/[^0-9.]*//g'` + + sum=`echo $sum + $nr | bc` + + totaltime=`cat log_$HOST | grep "Total:"` + + mean=`echo $totaltime | awk '{print $3}'` + + sum_mean=`echo $sum_mean + $mean | bc` + + sd=`echo $totaltime | awk '{print $4}'` + + sum_sd=`echo $sum_sd + $sd | bc` + + echo "$HOST ${sum} ${sum_mean} ${sum_sd}" >> eva_all_notEqualTraffic_$eva_case +done + diff --git a/experimental-scripts/sectionV_C_2/ab_test_cummulative_even b/experimental-scripts/sectionV_C_2/ab_test_cummulative_even new file mode 100755 index 0000000..964ed18 --- /dev/null +++ b/experimental-scripts/sectionV_C_2/ab_test_cummulative_even @@ -0,0 +1,45 @@ +#!/bin/bash + +# send to ip address of worker node 2 +#con=$1 # number of concurrency requests +duration=60 +numOfRequest=50000 +Port=$1 +con=$2 +eva_case=$3 +HOSTNAMES=("node1" "node2" "node3") + +rm eva_all_$eva_case +touch eva_all_$eva_case + +for HOST in ${HOSTNAMES[@]} +do + echo $HOST + rm log_$HOST + ab -c $con -t $duration -n $numOfRequest http://$HOST:$Port/ > log_$HOST & +done + +sleep 70 + +for HOST in ${HOSTNAMES[@]} +do + + sum=0 + sum_mean=0 + sum_sd=0 + nr=`cat log_$HOST | grep "Requests per second" | sed 's/[^0-9.]*//g'` + + sum=`echo $sum + $nr | bc` + + totaltime=`cat log_$HOST | grep "Total:"` + + mean=`echo $totaltime | awk '{print $3}'` + + sum_mean=`echo $sum_mean + $mean | bc` + + sd=`echo $totaltime | awk '{print $4}'` + + sum_sd=`echo $sum_sd + $sd | bc` + + echo "$HOST ${sum} ${sum_mean} ${sum_sd}" >> eva_all_$eva_case +done diff --git a/experimental_setup.txt b/experimental_setup.txt new file mode 100644 index 0000000..a090673 --- /dev/null +++ b/experimental_setup.txt @@ -0,0 +1,34 @@ +- Experimental set up: + + + Machines specs: as mentioned in THPA paper. + + + Kubernetes version: 1.18.0 + + + Docker version: 19.03.13 + + + Round trip delay between node = 10ms. + + Execute "add_delay.sh" script to add delay between nodes: + + ./add_delay.sh + Ex: ./add_delay.sh 192.168.1.2 192.168.1.19 5 (delay between 2 nodes is 10ms Round trip) + + + Apache tool should be installed for traffic generation + + + Switch kube-proxy to ipvs mode + + +- Section V_A - Evaluate 3 nodes + ++ Use script "autoscaling_realTime_test" in experimental-script to test and get the result + +- Section V_B - Evaluate 3 node + ++ Use script "auto_ab_eva_node" in experimental-scripts/sectionV_B to generate traffic toward 3 nodes at the same time and get the results. + +- Section V_C-1 - In this evaluation only Node 1 is evaluated + ++ Use script "auto_ab_eva_node" in experimental-scripts/sectionV_C_1 to generate traffic toward node 1 only to get the result. + +- Section V_C_2 - Evaluate 3 nodes + ++ Use script "ab_test_cummulative_diff" and "ab_test_cummulative_even" in +experimental-scripts/sectionV_C_2 folder to get the result diff --git a/kube-proxy/kube-proxy b/kube-proxy/kube-proxy new file mode 100755 index 0000000..09c1288 Binary files /dev/null and b/kube-proxy/kube-proxy differ