From 02d68ba49158d8255405f76161a8905977f34045 Mon Sep 17 00:00:00 2001 From: Markus Lehtonen Date: Thu, 10 Sep 2020 09:39:46 +0300 Subject: [PATCH] demo: make demo runnable again Fix workload template specs: - update node affinity in "demo-pod-with-discovery.cloverleaf" - fix broken "demo-pod-without-discovery" Fix runner scripts to be runnable from anywhere gqYour current working dir shouldn't matter. Also make the scripts exit on any error. Also remove trailing whitespace. Minor fixes in README. --- demo/README.md | 6 ++-- .../helper-scripts/aggregate-logs-and-plot.sh | 22 +++++++----- demo/helper-scripts/clean-up.sh | 21 ++++++----- ...od-with-discovery.yaml.cloverleaf.template | 36 ++++++------------- .../demo-pod-without-discovery.yaml.template | 4 +-- demo/helper-scripts/run-with-discovery.sh | 28 ++++++++------- demo/helper-scripts/run-without-discovery.sh | 27 ++++++++------ 7 files changed, 74 insertions(+), 70 deletions(-) diff --git a/demo/README.md b/demo/README.md index 28feb319b..3ea2f0f01 100644 --- a/demo/README.md +++ b/demo/README.md @@ -30,7 +30,7 @@ While our example illustrates the benefits of using node feature discovery with Scripts to reproduce our demo results can be found in [helper-scripts](helper-scripts/). ### Prerequisites -1. `Kubectl` should be configured properly to work with your Kubernetes cluster. +1. `kubectl` should be configured properly to work with your Kubernetes cluster. 2. Node feature discovery should have been already deployed on your Kubernetes cluster. ### Instructions @@ -41,8 +41,8 @@ Follow these easy steps to reproduce the demo. 3. `./run-with-discovery.sh -a cloverleaf` 4. `./run-without-discovery.sh -a parsec` 5. `./run-without-discovery.sh -a cloverleaf` -6. `/aggregate-logs-and-plot.sh -a parsec` -7. `/aggregate-logs-and-plot.sh -a cloverleaf` +6. `./aggregate-logs-and-plot.sh -a parsec` +7. `./aggregate-logs-and-plot.sh -a cloverleaf` Following the above steps will produce the performance and normalized performance logs and their corresponding plots for each application. diff --git a/demo/helper-scripts/aggregate-logs-and-plot.sh b/demo/helper-scripts/aggregate-logs-and-plot.sh index 4b8ccdea5..fed69d9c1 100755 --- a/demo/helper-scripts/aggregate-logs-and-plot.sh +++ b/demo/helper-scripts/aggregate-logs-and-plot.sh @@ -1,7 +1,13 @@ #!/usr/bin/env bash -show_help() { + +set -eo pipefail + +this=`basename $0` +this_dir=`dirname $0` + +show_help() { cat << EOF - Usage: ${0##*/} [-a APPLICATION_NAME] + Usage: $this [-a APPLICATION_NAME] Aggregate the results from the specified application and plot the result. -a APPLICATION_NAME run the pods with APPLICATION_NAME application. @@ -21,7 +27,7 @@ OPTIND=1 options="ha:" while getopts $options option do - case $option in + case $option in a) if [ "$OPTARG" == "parsec" ] || [ "$OPTARG" == "cloverleaf" ] then @@ -32,11 +38,11 @@ do exit 0 fi ;; - h) + h) show_help exit 0 ;; - '?') + '?') show_help exit 1 ;; @@ -59,7 +65,7 @@ rm -f temp.log labels-with-discovery-$app.log minimum=$(awk 'min=="" || $2 < min {min=$2} END {print min}' performance.log) awk -v min=$minimum '{print $1,((($2/min)*100))-100}' performance.log > performance-norm.log -./box-plot.R performance.log performance-comparison-$app.pdf -./box-plot-norm.R performance-norm.log performance-comparison-$app-norm.pdf +"$this_dir/box-plot.R" performance.log performance-comparison-$app.pdf +"$this_dir/box-plot-norm.R" performance-norm.log performance-comparison-$app-norm.pdf -./clean-up.sh -a $app +"$this_dir/clean-up.sh" -a $app diff --git a/demo/helper-scripts/clean-up.sh b/demo/helper-scripts/clean-up.sh index a71e17930..0c6bb3870 100755 --- a/demo/helper-scripts/clean-up.sh +++ b/demo/helper-scripts/clean-up.sh @@ -1,8 +1,13 @@ #!/usr/bin/env bash -show_help() { + +set -eo pipefail + +this=`basename $0` + +show_help() { cat << EOF - Usage: ${0##*/} [-a APPLICATION_NAME] - Clean-up pods with and without discovery enabled for the specified application. + Usage: $this [-a APPLICATION_NAME] + Clean-up pods with and without discovery enabled for the specified application. -a APPLICATION_NAME clean-up the pods with APPLICATION_NAME application. APPLICATION_NAME can be one of parsec or cloverleaf. @@ -21,7 +26,7 @@ OPTIND=1 options="ha:" while getopts $options option do - case $option in + case $option in a) if [ "$OPTARG" == "parsec" ] || [ "$OPTARG" == "cloverleaf" ] then @@ -32,11 +37,11 @@ do exit 0 fi ;; - h) + h) show_help exit 0 ;; - '?') + '?') show_help exit 1 ;; @@ -45,11 +50,11 @@ done echo "Using application name = $app." for i in {1..10} -do +do kubectl delete po demo-$app-$i-wo-discovery done for i in {1..10} -do +do kubectl delete po demo-$app-$i-with-discovery done diff --git a/demo/helper-scripts/demo-pod-with-discovery.yaml.cloverleaf.template b/demo/helper-scripts/demo-pod-with-discovery.yaml.cloverleaf.template index 78b5b7f0f..80aea1318 100644 --- a/demo/helper-scripts/demo-pod-with-discovery.yaml.cloverleaf.template +++ b/demo/helper-scripts/demo-pod-with-discovery.yaml.cloverleaf.template @@ -1,30 +1,14 @@ apiVersion: v1 kind: Pod metadata: - name: demo-cloverleaf-NUM - annotations: - scheduler.alpha.kubernetes.io/affinity: | - { - "nodeAffinity": { - "requiredDuringSchedulingIgnoredDuringExecution": { - "nodeSelectorTerms": [ - { - "matchExpressions": [ - { - "key": "feature.node.kubernetes.io/cpu-pstate.turbo", - "operator": "DoesNotExist" - } - ] - } - ] - } - } - } + name: demo-cloverleaf-NUM spec: - containers: - - name: demo-container-cloverleaf-NUM - image: quay.io/kubernetes_incubator/node-feature-discovery-APP - ports: - - containerPort: 3551 - hostPort: 10001 - restartPolicy: Never + containers: + - name: demo-container-cloverleaf-NUM + image: quay.io/kubernetes_incubator/node-feature-discovery-APP + ports: + - containerPort: 3551 + hostPort: 10001 + nodeSelector: + feature.node.kubernetes.io/cpu-pstate.turbo: 'false' + restartPolicy: Never diff --git a/demo/helper-scripts/demo-pod-without-discovery.yaml.template b/demo/helper-scripts/demo-pod-without-discovery.yaml.template index 1b95c7789..24fbcc0ea 100644 --- a/demo/helper-scripts/demo-pod-without-discovery.yaml.template +++ b/demo/helper-scripts/demo-pod-without-discovery.yaml.template @@ -5,8 +5,8 @@ metadata: spec: containers: - image: quay.io/kubernetes_incubator/node-feature-discovery-IMG - name: demo-container-APP-NUM + name: demo-container-APP-NUM ports: - containerPort: 3351 - hostPort: 10001 + hostPort: 10001 restartPolicy: Never diff --git a/demo/helper-scripts/run-with-discovery.sh b/demo/helper-scripts/run-with-discovery.sh index b868fff6e..1eadfd992 100755 --- a/demo/helper-scripts/run-with-discovery.sh +++ b/demo/helper-scripts/run-with-discovery.sh @@ -1,7 +1,13 @@ #!/usr/bin/env bash -show_help() { + +set -eo pipefail + +this=`basename $0` +this_dir=`dirname $0` + +show_help() { cat << EOF - Usage: ${0##*/} [-a APPLICATION_NAME] + Usage: $this [-a APPLICATION_NAME] Runs pods ten times with discovery enabled. -a APPLICATION_NAME run the pods with APPLICATION_NAME application. @@ -21,7 +27,7 @@ OPTIND=1 options="ha:" while getopts $options option do - case $option in + case $option in a) if [ "$OPTARG" == "parsec" ] || [ "$OPTARG" == "cloverleaf" ] then @@ -32,11 +38,11 @@ do exit 0 fi ;; - h) + h) show_help exit 0 ;; - '?') + '?') show_help exit 1 ;; @@ -49,14 +55,12 @@ for i in {1..10} do if [ "$app" == "parsec" ] then - sed -e "s/NUM/$i-with-discovery/" -e "s/APP/demo-1/" demo-pod-with-discovery.yaml.parsec.template > demo-pod-with-discovery.yaml - kubectl create -f demo-pod-with-discovery.yaml + sed -e "s/NUM/$i-with-discovery/" -e "s/APP/demo-1/" \ + "$this_dir/demo-pod-with-discovery.yaml.parsec.template" | kubectl create -f - else - sed -e "s/NUM/$i-with-discovery/" -e "s/APP/demo-2/" demo-pod-with-discovery.yaml.cloverleaf.template > demo-pod-with-discovery.yaml - kubectl create -f demo-pod-with-discovery.yaml + sed -e "s/NUM/$i-with-discovery/" -e "s/APP/demo-2/" \ + "$this_dir/demo-pod-with-discovery.yaml.cloverleaf.template" | kubectl create -f - fi echo "WithDiscovery" >> labels-with-discovery-$app.log -done +done echo "Ten pods with node feature discovery enabled started." - -rm -f demo-pod-with-discovery.yaml diff --git a/demo/helper-scripts/run-without-discovery.sh b/demo/helper-scripts/run-without-discovery.sh index 492e79c22..0dd9b1b22 100755 --- a/demo/helper-scripts/run-without-discovery.sh +++ b/demo/helper-scripts/run-without-discovery.sh @@ -1,7 +1,13 @@ #!/usr/bin/env bash -show_help() { + +set -eo pipefail + +this=`basename $0` +this_dir=`dirname $0` + +show_help() { cat << EOF - Usage: ${0##*/} [-a APPLICATION_NAME] + Usage: $this [-a APPLICATION_NAME] Runs ten pods without discovery enabled with the specified application. -a APPLICATION_NAME run the pods with APPLICATION_NAME application. @@ -21,7 +27,7 @@ OPTIND=1 options="ha:" while getopts $options option do - case $option in + case $option in a) if [ "$OPTARG" == "parsec" ] || [ "$OPTARG" == "cloverleaf" ] then @@ -32,11 +38,11 @@ do exit 0 fi ;; - h) + h) show_help exit 0 ;; - '?') + '?') show_help exit 1 ;; @@ -49,13 +55,12 @@ for i in {1..10} do if [ "$app" == "parsec" ] then - sed -e "s/NUM/$i-wo-discovery/" -e "s/IMG/demo-1/" -e "s/APP/$app/" demo-pod-without-discovery.yaml.template > demo-pod-without-discovery.yaml + sed -e "s/NUM/$i-wo-discovery/" -e "s/IMG/demo-1/" -e "s/APP/$app/" \ + "$this_dir/demo-pod-without-discovery.yaml.template" | kubectl create -f - else - sed -e "s/NUM/$i-wo-discovery/" -e "s/IMG/demo-2/" -e "s/APP/$app/" demo-pod-without-discovery.yaml.template > demo-pod-without-discovery.yaml + sed -e "s/NUM/$i-wo-discovery/" -e "s/IMG/demo-2/" -e "s/APP/$app/" \ + "$this_dir/demo-pod-without-discovery.yaml.template" | kubectl create -f - fi - kubectl create -f demo-pod-without-discovery.yaml echo "WithoutDiscovery" >> labels-without-discovery-$app.log -done +done echo "Ten pods without node feature discovery started." - -rm -f demo-pod-without-discovery.yaml