aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml16
-rwxr-xr-x.travis/kubernetes/00_run_k8s.sh42
-rwxr-xr-x.travis/kubernetes/10_setup_kubectl.sh23
-rwxr-xr-x.travis/kubernetes/20_setup_k8s_services.sh119
-rw-r--r--.travis/kubernetes/README.md19
-rwxr-xr-x.travis/kubernetes/kill_all_containers.sh5
-rwxr-xr-x.travis/kubernetes/run_skydns.sh (renamed from .travis/kubernetes/15_run_skydns.sh)12
-rwxr-xr-x.travis/kubernetes/setup_k8s_services.sh99
-rwxr-xr-x.travis/kubernetes/start_k8s_with_services.sh12
9 files changed, 122 insertions, 225 deletions
diff --git a/.travis.yml b/.travis.yml
index e5b56a196..2e82bc2da 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -12,7 +12,7 @@ go:
go_import_path: github.com/miekg/coredns
env:
- - ETCD_VERSION=2.3.1 K8S_VERSION=1.3.7
+ - ETCD_VERSION=2.3.1 K8S_VERSION=1.3.7 KUBECTL="docker exec hyperkube /hyperkube kubectl" DNS_ARGUMENTS=""
# In the Travis VM-based build environment, IPv6 networking is not
# enabled by default. The sysctl operations below enable IPv6.
@@ -30,11 +30,19 @@ before_install:
before_script:
- docker run -d --net=host --name=etcd quay.io/coreos/etcd:v$ETCD_VERSION
- - ./.travis/kubernetes/start_k8s_with_services.sh
+ - docker run -d --volume=/:/rootfs:ro --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:rw --volume=/var/lib/kubelet/:/var/lib/kubelet:rw --volume=/var/run:/var/run:rw --net=host --pid=host --privileged --name=hyperkube gcr.io/google_containers/hyperkube-amd64:v$K8S_VERSION /hyperkube kubelet --containerized --hostname-override=127.0.0.1 --api-servers=http://localhost:8080 --config=/etc/kubernetes/manifests $DNS_ARGUMENTS --allow-privileged --v=2
+ # Wait until kubectl is ready
+ - for i in {1..10}; do $KUBECTL version && break || sleep 5; done
+ - $KUBECTL version
+ - $KUBECTL config set-cluster test-doc --server=http://localhost:8080
+ - $KUBECTL config set-context test-doc --cluster=test-doc
+ - $KUBECTL config use-context test-doc
+ # Wait until k8s is ready
+ - for i in {1..30}; do $KUBECTL get nodes && break || sleep 5; done
+ - .travis/kubernetes/setup_k8s_services.sh
+ - docker ps -a
script:
- - docker ps -a
- - ./.travis/kubernetes/kubectl version
- make coverage
after_success:
diff --git a/.travis/kubernetes/00_run_k8s.sh b/.travis/kubernetes/00_run_k8s.sh
deleted file mode 100755
index 094f7d5d0..000000000
--- a/.travis/kubernetes/00_run_k8s.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/bash
-
-set -e
-
-# Based on instructions at: http://kubernetes.io/docs/getting-started-guides/docker/
-
-#K8S_VERSION=$(curl -sS https://storage.googleapis.com/kubernetes-release/release/latest.txt)
-K8S_VERSION=${K8S_VERSION:-"1.3.7"}
-
-ARCH="amd64"
-
-export K8S_VERSION
-export ARCH
-
-#RUN_SKYDNS="yes"
-RUN_SKYDNS="no"
-
-if [ "${RUN_SKYDNS}" = "yes" ]; then
- DNS_ARGUMENTS="--cluster-dns=10.0.0.10 --cluster-domain=cluster.local"
-else
- DNS_ARGUMENTS=""
-fi
-
-echo "Starting kubernetes..."
-
-docker run -d \
- --volume=/:/rootfs:ro \
- --volume=/sys:/sys:ro \
- --volume=/var/lib/docker/:/var/lib/docker:rw \
- --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \
- --volume=/var/run:/var/run:rw \
- --net=host \
- --pid=host \
- --privileged \
- gcr.io/google_containers/hyperkube-${ARCH}:v${K8S_VERSION} \
- /hyperkube kubelet \
- --containerized \
- --hostname-override=127.0.0.1 \
- --api-servers=http://localhost:8080 \
- --config=/etc/kubernetes/manifests \
- ${DNS_ARGUMENTS} \
- --allow-privileged --v=2
diff --git a/.travis/kubernetes/10_setup_kubectl.sh b/.travis/kubernetes/10_setup_kubectl.sh
deleted file mode 100755
index a7cfc1e76..000000000
--- a/.travis/kubernetes/10_setup_kubectl.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash
-
-set -e
-
-PWD=`pwd`
-BASEDIR=`readlink -e $(dirname ${0})`
-
-cd ${BASEDIR}
-
-echo "Setting up kubectl..."
-
-if [ ! -e kubectl ]; then
- curl -O http://storage.googleapis.com/kubernetes-release/release/v1.3.7/bin/linux/amd64/kubectl
- chmod u+x kubectl
-fi
-
-${BASEDIR}/kubectl config set-cluster test-doc --server=http://localhost:8080
-${BASEDIR}/kubectl config set-context test-doc --cluster=test-doc
-${BASEDIR}/kubectl config use-context test-doc
-
-cd ${PWD}
-
-alias kubctl="${BASEDIR}/kubectl"
diff --git a/.travis/kubernetes/20_setup_k8s_services.sh b/.travis/kubernetes/20_setup_k8s_services.sh
deleted file mode 100755
index b2f45008d..000000000
--- a/.travis/kubernetes/20_setup_k8s_services.sh
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/bin/bash
-
-PWD=`pwd`
-BASEDIR=`readlink -e $(dirname ${0})`
-
-cd ${BASEDIR}
-
-KUBECTL='./kubectl'
-
-wait_until_k8s_ready() {
- # Wait until kubernetes is up and fully responsive
- while :
- do
- ${KUBECTL} get nodes 2>/dev/null | grep -q '127.0.0.1'
- if [ "${?}" = "0" ]; then
- break
- else
- echo "sleeping for 5 seconds (waiting for kubernetes to start)"
- sleep 5
- fi
- done
- echo "kubernetes nodes:"
- ${KUBECTL} get nodes
-}
-
-create_namespaces() {
- for n in ${NAMESPACES};
- do
- echo "Creating namespace: ${n}"
- ${KUBECTL} get namespaces --no-headers 2>/dev/null | grep -q ${n}
- if [ "${?}" != "0" ]; then
- ${KUBECTL} create namespace ${n}
- fi
- done
-
- echo "kubernetes namespaces:"
- ${KUBECTL} get namespaces
-}
-
-# run_and_expose_service <servicename> <namespace> <image> <port>
-run_and_expose_service() {
- if [ "${#}" != "4" ]; then
- return -1
- fi
-
- service="${1}"
- namespace="${2}"
- image="${3}"
- port="${4}"
-
- echo " starting service '${service}' in namespace '${namespace}'"
-
- ${KUBECTL} get deployment --namespace=${namespace} --no-headers 2>/dev/null | grep -q ${service}
- if [ "${?}" != "0" ]; then
- ${KUBECTL} run ${service} --namespace=${namespace} --image=${image}
- else
- echo "warn: service '${service}' already running in namespace '${namespace}'"
- fi
-
- ${KUBECTL} get service --namespace=${namespace} --no-headers 2>/dev/null | grep -q ${service}
- if [ "${?}" != "0" ]; then
- ${KUBECTL} expose deployment ${service} --namespace=${namespace} --port=${port}
- else
- echo "warn: service '${service}' already exposed in namespace '${namespace}'"
- fi
-}
-
-
-#run_and_expose_rc nginx-controller nginx-rc.yml poddemo 80
-run_and_expose_rc() {
- if [ "${#}" != "4" ]; then
- return -1
- fi
-
- rc_name="${1}"
- rc_file="${2}"
- namespace="${3}"
- port="${4}"
-
- echo " starting replication controller '${rc_name}' from '${rc_file}' in namespace '${namespace}'"
-
- ${KUBECTL} get rc --namespace=${namespace} --no-headers 2>/dev/null | grep -q ${rc_name}
- if [ "${?}" != "0" ]; then
- ${KUBECTL} expose -f ${rc_file} --namespace=${namespace} --port=${port}
- else
- echo "warn: rc '${rc_name}' already running in namespace '${namespace}'"
- fi
-}
-
-echo "Starting sample kubernetes services..."
-
-wait_until_k8s_ready
-
-NAMESPACES="demo poddemo test"
-create_namespaces
-
-echo ""
-echo "Starting services:"
-
-run_and_expose_service mynginx demo nginx 80
-run_and_expose_service webserver demo nginx 80
-run_and_expose_service mynginx test nginx 80
-run_and_expose_service webserver test nginx 80
-
-echo ""
-echo "Services exposed:"
-${KUBECTL} get services --all-namespaces
-
-echo ""
-echo "Starting replicationcontrollers:"
-
-run_and_expose_rc nginx-controller nginx-rc.yml poddemo 80
-
-echo ""
-echo "ReplicationControllers exposed:"
-${KUBECTL} get rc --all-namespaces
-
-
-cd ${PWD}
diff --git a/.travis/kubernetes/README.md b/.travis/kubernetes/README.md
index 9642b42a8..394cfe259 100644
--- a/.travis/kubernetes/README.md
+++ b/.travis/kubernetes/README.md
@@ -2,7 +2,6 @@
Requirements:
docker
- curl
The scripts in this directory startup kubernetes with docker as the container runtime.
After starting kubernetes, a couple of kubernetes services are started to allow automatic
@@ -10,16 +9,10 @@ testing of CoreDNS with kubernetes. The kubernetes integration tests in `test/ku
automate the launch of kubernetes and the creation of the expected sample services.
To start up kubernetes and launch some sample services,
-run the script `start_k8s_with_services.sh`.
+run the script `setup_k8s_services.sh`.
~~~
-$ ./start_k8s_with_services.sh
-~~~
-
-Alternatively, the individual scripts may be run independently as needed:
-
-~~~
-$ ./00_run_k8s.sh && ./10_setup_kubectl.sh && ./20_setup_k8s_services.sh
+$ ./setup_k8s_services.sh
~~~
After running the above scripts, kubernetes will be running on the localhost with the following services
@@ -33,11 +26,3 @@ demo webserver 10.0.0.28 <none> 80/TCP 2m
test mynginx 10.0.0.4 <none> 80/TCP 2m
test webserver 10.0.0.39 <none> 80/TCP 2m
~~
-
-
-Kubernetes and all running containers can be uncerimoniously stopped by
-running the `kill_all_containers.sh` script.
-
-~~~
-$ ./kill_all_containers.sh
-~~~
diff --git a/.travis/kubernetes/kill_all_containers.sh b/.travis/kubernetes/kill_all_containers.sh
deleted file mode 100755
index aa7f4255d..000000000
--- a/.travis/kubernetes/kill_all_containers.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-docker rm -f $(docker ps -a -q)
-sleep 1
-docker rm -f $(docker ps -a -q)
diff --git a/.travis/kubernetes/15_run_skydns.sh b/.travis/kubernetes/run_skydns.sh
index 266d83dcc..f7000a37f 100755
--- a/.travis/kubernetes/15_run_skydns.sh
+++ b/.travis/kubernetes/run_skydns.sh
@@ -4,19 +4,25 @@
PWD=`pwd`
BASEDIR=`readlink -e $(dirname ${0})`
-
cd ${BASEDIR}
-KUBECTL='./kubectl'
+KUBECTL='docker exec hyperkube /hyperkube kubectl'
#RUN_SKYDNS="yes"
RUN_SKYDNS="no"
+# DNS_ARGUMENTS needs to be passed when Kubernetes is setup.
+if [ "${RUN_SKYDNS}" = "yes" ]; then
+ DNS_ARGUMENTS="--cluster-dns=10.0.0.10 --cluster-domain=cluster.local"
+else
+ DNS_ARGUMENTS=""
+fi
+
wait_until_k8s_ready() {
# Wait until kubernetes is up and fully responsive
while :
do
- ${KUBECTL} get nodes 2>/dev/null | grep -q '127.0.0.1'
+ ${KUBECTL} get nodes 2>/dev/null | grep -q '127.0.0.1'
if [ "${?}" = "0" ]; then
break
else
diff --git a/.travis/kubernetes/setup_k8s_services.sh b/.travis/kubernetes/setup_k8s_services.sh
new file mode 100755
index 000000000..aae198a50
--- /dev/null
+++ b/.travis/kubernetes/setup_k8s_services.sh
@@ -0,0 +1,99 @@
+#!/bin/bash
+
+set -x
+
+KUBECTL='docker exec hyperkube /hyperkube kubectl'
+
+PWD=`pwd`
+cd `readlink -e $(dirname ${0})`
+
+create_namespaces() {
+ for n in ${NAMESPACES};
+ do
+ echo "Creating namespace: ${n}"
+ ${KUBECTL} get namespaces --no-headers 2>/dev/null | grep -q ${n}
+ if [ "${?}" != "0" ]; then
+ ${KUBECTL} create namespace ${n}
+ fi
+ done
+
+ echo "kubernetes namespaces:"
+ ${KUBECTL} get namespaces
+}
+
+# run_and_expose_service <servicename> <namespace> <image> <port>
+run_and_expose_service() {
+ if [ "${#}" != "4" ]; then
+ return -1
+ fi
+
+ service="${1}"
+ namespace="${2}"
+ image="${3}"
+ port="${4}"
+
+ echo " starting service '${service}' in namespace '${namespace}'"
+
+ ${KUBECTL} get deployment --namespace=${namespace} --no-headers 2>/dev/null | grep -q ${service}
+ if [ "${?}" != "0" ]; then
+ ${KUBECTL} run ${service} --namespace=${namespace} --image=${image}
+ else
+ echo "warn: service '${service}' already running in namespace '${namespace}'"
+ fi
+
+ ${KUBECTL} get service --namespace=${namespace} --no-headers 2>/dev/null | grep -q ${service}
+ if [ "${?}" != "0" ]; then
+ ${KUBECTL} expose deployment ${service} --namespace=${namespace} --port=${port}
+ else
+ echo "warn: service '${service}' already exposed in namespace '${namespace}'"
+ fi
+}
+
+#run_and_expose_rc nginx-controller nginx-rc.yml poddemo 80
+run_and_expose_rc() {
+ if [ "${#}" != "4" ]; then
+ return -1
+ fi
+
+ rc_name="${1}"
+ rc_file="${2}"
+ namespace="${3}"
+ port="${4}"
+
+ echo " starting replication controller '${rc_name}' from '${rc_file}' in namespace '${namespace}'"
+
+ ${KUBECTL} get rc --namespace=${namespace} --no-headers 2>/dev/null | grep -q ${rc_name}
+ if [ "${?}" != "0" ]; then
+ ${KUBECTL} expose -f ${rc_file} --namespace=${namespace} --port=${port}
+ else
+ echo "warn: rc '${rc_name}' already running in namespace '${namespace}'"
+ fi
+}
+
+echo "Starting sample kubernetes services..."
+
+NAMESPACES="demo poddemo test"
+create_namespaces
+
+echo ""
+echo "Starting services:"
+
+run_and_expose_service mynginx demo nginx 80
+run_and_expose_service webserver demo nginx 80
+run_and_expose_service mynginx test nginx 80
+run_and_expose_service webserver test nginx 80
+
+echo ""
+echo "Services exposed:"
+${KUBECTL} get services --all-namespaces
+
+echo ""
+echo "Starting replicationcontrollers:"
+
+run_and_expose_rc nginx-controller nginx-rc.yml poddemo 80
+
+echo ""
+echo "ReplicationControllers exposed:"
+${KUBECTL} get rc --all-namespaces
+
+cd ${PWD}
diff --git a/.travis/kubernetes/start_k8s_with_services.sh b/.travis/kubernetes/start_k8s_with_services.sh
deleted file mode 100755
index 40db49715..000000000
--- a/.travis/kubernetes/start_k8s_with_services.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-PWD=`pwd`
-BASEDIR=`readlink -e $(dirname ${0})`
-
-cd ${BASEDIR}
-
-./00_run_k8s.sh && \
-./10_setup_kubectl.sh && \
-./20_setup_k8s_services.sh
-
-cd ${PWD}