From c19f49a2847a9a10671820434e228f7fe9f56c74 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Tue, 25 Oct 2016 16:10:19 +0100 Subject: [PATCH 1/4] Install Kubernetes packages and pre-pull images Bump template version too Note that we disable kubelet in the image, so you have to start it if you want to use it. --- test/gce.sh | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/test/gce.sh b/test/gce.sh index 22ebc9de..f2721d42 100755 --- a/test/gce.sh +++ b/test/gce.sh @@ -12,7 +12,7 @@ set -e : ${PROJECT:=positive-cocoa-90213} : ${IMAGE_FAMILY:=ubuntu-1604-lts} : ${IMAGE_PROJECT:=ubuntu-os-cloud} -: ${TEMPLATE_NAME:=test-template-11} +: ${TEMPLATE_NAME:=test-template-12} : ${ZONE:=us-central1-a} : ${NUM_HOSTS:=5} SUFFIX="" @@ -90,6 +90,26 @@ systemctl restart docker docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter docker pull alpine docker pull aanand/docker-dnsutils +docker pull weaveworks/hello-world +EOF +} + +function install_kubernetes_on { + name=$1 + ssh -t $name sudo bash -x -s < /etc/apt/sources.list.d/kubernetes.list +apt-get update -qq +apt-get install -q -y kubelet kubeadm kubectl kubernetes-cni +systemctl --now disable kubelet +# Pre-pull images required for Kubernetes +docker pull gcr.io/google_containers/etcd-amd64:2.2.5 +docker pull gcr.io/google_containers/kube-apiserver-amd64:v1.4.0 +docker pull gcr.io/google_containers/kube-controller-manager-amd64:v1.4.0 +docker pull gcr.io/google_containers/kube-proxy-amd64:v1.4.0 +docker pull gcr.io/google_containers/kube-scheduler-amd64:v1.4.0 +docker pull gcr.io/google_containers/kube-discovery-amd64:1.0 +docker pull gcr.io/google_containers/pause-amd64:3.0 EOF } @@ -138,6 +158,7 @@ function make_template { name="$TEMPLATE_NAME.$ZONE.$PROJECT" try_connect $name install_docker_on $name + install_kubernetes_on $name gcloud -q compute instances delete $TEMPLATE_NAME --keep-disks boot --zone $ZONE gcloud compute images create $TEMPLATE_NAME --source-disk $TEMPLATE_NAME --source-disk-zone $ZONE } From e44bbbec639fb05299bed8d1a21c0bfcd6e1602e Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Wed, 26 Oct 2016 17:46:19 +0100 Subject: [PATCH 2/4] Add smoke-test for weave-kube --- test/840_weave_kube_3_test.sh | 64 +++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100755 test/840_weave_kube_3_test.sh diff --git a/test/840_weave_kube_3_test.sh b/test/840_weave_kube_3_test.sh new file mode 100755 index 00000000..f23d3bc7 --- /dev/null +++ b/test/840_weave_kube_3_test.sh @@ -0,0 +1,64 @@ +#! /bin/bash + +. ./config.sh + +tear_down_kubeadm() { + for host in $HOSTS; do + # If we don't stop kubelet, it will restart all the containers we're trying to kill + run_on $host "sudo systemctl stop kubelet" + rm_containers $host $(docker_on $host ps -aq) + run_on $host "test ! -d /var/lib/kubelet || sudo find /var/lib/kubelet -execdir findmnt -n -t tmpfs -o TARGET -T {} \; | uniq | xargs -r sudo umount" + run_on $host "sudo rm -r -f /etc/kubernetes /var/lib/kubelet /var/lib/etcd" + done +} + +start_suite "Test weave-kube image with Kubernetes" + +TOKEN=112233.445566778899000 +HOST1IP=$($SSH $HOST1 "getent hosts $HOST1 | cut -f 1 -d ' '") +SUCCESS="6 established" + +tear_down_kubeadm + +run_on $HOST1 "sudo systemctl start kubelet && sudo kubeadm init --token=$TOKEN" +run_on $HOST2 "sudo systemctl start kubelet && sudo kubeadm join --token=$TOKEN $HOST1IP" +run_on $HOST3 "sudo systemctl start kubelet && sudo kubeadm join --token=$TOKEN $HOST1IP" + +cat ../prog/weave-kube/weave-daemonset.yaml | run_on $HOST1 "kubectl apply -f -" + +sleep 5 + +wait_for_connections() { + for i in $(seq 1 30); do + if run_on $HOST1 "curl -sS http://127.0.0.1:6784/status | grep \"$SUCCESS\"" ; then + return + fi + echo "Waiting for connections" + sleep 1 + done + echo "Timed out waiting for connections to establish" >&2 + exit 1 +} + +assert_raises wait_for_connections + +# See if we can get some pods running that connect to the network +run_on $HOST1 "kubectl run hello --image=weaveworks/hello-world --replicas=3" + +wait_for_pods() { + for i in $(seq 1 30); do + if run_on $HOST1 "kubectl get pods | grep 'hello.*Running'" ; then + return + fi + echo "Waiting for pods" + sleep 1 + done + echo "Timed out waiting for pods" >&2 + exit 1 +} + +assert_raises wait_for_pods + +tear_down_kubeadm + +end_suite From 494df21bdf3fb43179369c1fa0eac5b64e013446 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Wed, 2 Nov 2016 13:05:25 +0000 Subject: [PATCH 3/4] Disable imagePullPolicy so we test the image we just built --- test/840_weave_kube_3_test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/840_weave_kube_3_test.sh b/test/840_weave_kube_3_test.sh index f23d3bc7..8e81ee72 100755 --- a/test/840_weave_kube_3_test.sh +++ b/test/840_weave_kube_3_test.sh @@ -24,7 +24,7 @@ run_on $HOST1 "sudo systemctl start kubelet && sudo kubeadm init --token=$TOKEN" run_on $HOST2 "sudo systemctl start kubelet && sudo kubeadm join --token=$TOKEN $HOST1IP" run_on $HOST3 "sudo systemctl start kubelet && sudo kubeadm join --token=$TOKEN $HOST1IP" -cat ../prog/weave-kube/weave-daemonset.yaml | run_on $HOST1 "kubectl apply -f -" +sed -e 's/imagePullPolicy: Always/imagePullPolicy: Never/' ../prog/weave-kube/weave-daemonset.yaml | run_on $HOST1 "kubectl apply -f -" sleep 5 From 6dde5e5ee9959a936d96af322153843c9e09e24b Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Wed, 2 Nov 2016 14:45:56 +0000 Subject: [PATCH 4/4] Add code-coverage options to weaver start --- prog/weave-kube/launch.sh | 2 +- test/840_weave_kube_3_test.sh | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/prog/weave-kube/launch.sh b/prog/weave-kube/launch.sh index 188f9d83..1b3fab4c 100755 --- a/prog/weave-kube/launch.sh +++ b/prog/weave-kube/launch.sh @@ -86,7 +86,7 @@ if [ -z "$IPALLOC_INIT" ]; then IPALLOC_INIT="consensus=$(peer_count $KUBE_PEERS)" fi -/home/weave/weaver --port=6783 $BRIDGE_OPTIONS \ +/home/weave/weaver $EXTRA_ARGS --port=6783 $BRIDGE_OPTIONS \ --http-addr=$HTTP_ADDR --status-addr=$STATUS_ADDR --docker-api='' --no-dns \ --ipalloc-range=$IPALLOC_RANGE $NICKNAME_ARG \ --ipalloc-init $IPALLOC_INIT \ diff --git a/test/840_weave_kube_3_test.sh b/test/840_weave_kube_3_test.sh index 8e81ee72..14c31d95 100755 --- a/test/840_weave_kube_3_test.sh +++ b/test/840_weave_kube_3_test.sh @@ -24,7 +24,9 @@ run_on $HOST1 "sudo systemctl start kubelet && sudo kubeadm init --token=$TOKEN" run_on $HOST2 "sudo systemctl start kubelet && sudo kubeadm join --token=$TOKEN $HOST1IP" run_on $HOST3 "sudo systemctl start kubelet && sudo kubeadm join --token=$TOKEN $HOST1IP" -sed -e 's/imagePullPolicy: Always/imagePullPolicy: Never/' ../prog/weave-kube/weave-daemonset.yaml | run_on $HOST1 "kubectl apply -f -" +[ -n "$COVERAGE" ] && COVERAGE_ARGS="\\n env:\\n - name: EXTRA_ARGS\\n value: \"-test.coverprofile=/home/weave/cover.prof --\"" + +sed -e "s%imagePullPolicy: Always%imagePullPolicy: Never$COVERAGE_ARGS%" ../prog/weave-kube/weave-daemonset.yaml | run_on $HOST1 "kubectl apply -f -" sleep 5