aboutsummaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorGravatar Michael Richmond <mrichmon@users.noreply.github.com> 2016-08-16 09:12:52 -0700
committerGravatar GitHub <noreply@github.com> 2016-08-16 09:12:52 -0700
commit9aaeef6376e677395f31ab0432c90cbe415c12c1 (patch)
treee6fe90455bd9211b8800e06e4e0979885823d627 /contrib
parent79fd268e9ce637b2853126bf01f146c8924ddc79 (diff)
downloadcoredns-9aaeef6376e677395f31ab0432c90cbe415c12c1.tar.gz
coredns-9aaeef6376e677395f31ab0432c90cbe415c12c1.tar.zst
coredns-9aaeef6376e677395f31ab0432c90cbe415c12c1.zip
Moving k8s support scripts out of code folder (#216)
* Adding pod setup to kubernetes startup scripts * Adding template description to k8s README.md * Fix typo. * Moving kubernetes setup scripts out of go folder * Fixing script error * Adding messages to k8s scripts for clarity
Diffstat (limited to 'contrib')
-rwxr-xr-xcontrib/kubernetes/testscripts/00_run_k8s.sh42
-rwxr-xr-xcontrib/kubernetes/testscripts/10_setup_kubectl.sh23
-rwxr-xr-xcontrib/kubernetes/testscripts/15_run_skydns.sh46
-rwxr-xr-xcontrib/kubernetes/testscripts/20_setup_k8s_services.sh119
-rw-r--r--contrib/kubernetes/testscripts/README.md43
-rwxr-xr-xcontrib/kubernetes/testscripts/kill_all_containers.sh5
-rw-r--r--contrib/kubernetes/testscripts/nginx-rc.yml19
-rwxr-xr-xcontrib/kubernetes/testscripts/start_k8s_with_services.sh12
8 files changed, 309 insertions, 0 deletions
diff --git a/contrib/kubernetes/testscripts/00_run_k8s.sh b/contrib/kubernetes/testscripts/00_run_k8s.sh
new file mode 100755
index 000000000..ef98a8eed
--- /dev/null
+++ b/contrib/kubernetes/testscripts/00_run_k8s.sh
@@ -0,0 +1,42 @@
+#!/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="v1.2.4"
+
+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}:${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/contrib/kubernetes/testscripts/10_setup_kubectl.sh b/contrib/kubernetes/testscripts/10_setup_kubectl.sh
new file mode 100755
index 000000000..17786715f
--- /dev/null
+++ b/contrib/kubernetes/testscripts/10_setup_kubectl.sh
@@ -0,0 +1,23 @@
+#!/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.2.4/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/contrib/kubernetes/testscripts/15_run_skydns.sh b/contrib/kubernetes/testscripts/15_run_skydns.sh
new file mode 100755
index 000000000..266d83dcc
--- /dev/null
+++ b/contrib/kubernetes/testscripts/15_run_skydns.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+# Running skydns based on instructions at: https://testdatamanagement.wordpress.com/2015/09/01/running-kubernetes-in-docker-with-dns-on-a-single-node/
+
+PWD=`pwd`
+BASEDIR=`readlink -e $(dirname ${0})`
+
+cd ${BASEDIR}
+
+KUBECTL='./kubectl'
+
+#RUN_SKYDNS="yes"
+RUN_SKYDNS="no"
+
+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
+}
+
+
+if [ "${RUN_SKYDNS}" = "yes" ]; then
+ wait_until_k8s_ready
+
+ echo "Launch kube2sky..."
+ docker run -d --net=host gcr.io/google_containers/kube2sky:1.11 --kube_master_url=http://127.0.0.1:8080 --domain=cluster.local
+
+ echo ""
+
+ echo "Launch SkyDNS..."
+ docker run -d --net=host gcr.io/google_containers/skydns:2015-03-11-001 --machines=http://localhost:4001 --addr=0.0.0.0:53 --domain=cluster.local
+else
+ true
+fi
+
+cd ${PWD}
diff --git a/contrib/kubernetes/testscripts/20_setup_k8s_services.sh b/contrib/kubernetes/testscripts/20_setup_k8s_services.sh
new file mode 100755
index 000000000..b2f45008d
--- /dev/null
+++ b/contrib/kubernetes/testscripts/20_setup_k8s_services.sh
@@ -0,0 +1,119 @@
+#!/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/contrib/kubernetes/testscripts/README.md b/contrib/kubernetes/testscripts/README.md
new file mode 100644
index 000000000..9642b42a8
--- /dev/null
+++ b/contrib/kubernetes/testscripts/README.md
@@ -0,0 +1,43 @@
+## Test scripts to automate kubernetes startup
+
+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
+testing of CoreDNS with kubernetes. The kubernetes integration tests in `test/kubernetes_test.go` depend on having some sample services running. The scripts in this folder
+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`.
+
+~~~
+$ ./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
+~~~
+
+After running the above scripts, kubernetes will be running on the localhost with the following services
+exposed:
+
+~~
+NAMESPACE NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
+default kubernetes 10.0.0.1 <none> 443/TCP 48m
+demo mynginx 10.0.0.168 <none> 80/TCP 9m
+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/contrib/kubernetes/testscripts/kill_all_containers.sh b/contrib/kubernetes/testscripts/kill_all_containers.sh
new file mode 100755
index 000000000..aa7f4255d
--- /dev/null
+++ b/contrib/kubernetes/testscripts/kill_all_containers.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+docker rm -f $(docker ps -a -q)
+sleep 1
+docker rm -f $(docker ps -a -q)
diff --git a/contrib/kubernetes/testscripts/nginx-rc.yml b/contrib/kubernetes/testscripts/nginx-rc.yml
new file mode 100644
index 000000000..4597de409
--- /dev/null
+++ b/contrib/kubernetes/testscripts/nginx-rc.yml
@@ -0,0 +1,19 @@
+apiVersion: v1
+kind: ReplicationController
+metadata:
+ name: nginx-controller
+ namespace: poddemo
+spec:
+ replicas: 2
+ selector:
+ role: load-balancer
+ template:
+ metadata:
+ labels:
+ role: load-balancer
+ spec:
+ containers:
+ - name: nginx
+ image: coreos/nginx
+ ports:
+ - containerPort: 80
diff --git a/contrib/kubernetes/testscripts/start_k8s_with_services.sh b/contrib/kubernetes/testscripts/start_k8s_with_services.sh
new file mode 100755
index 000000000..40db49715
--- /dev/null
+++ b/contrib/kubernetes/testscripts/start_k8s_with_services.sh
@@ -0,0 +1,12 @@
+#!/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}