diff options
author | 2016-08-16 09:12:52 -0700 | |
---|---|---|
committer | 2016-08-16 09:12:52 -0700 | |
commit | 9aaeef6376e677395f31ab0432c90cbe415c12c1 (patch) | |
tree | e6fe90455bd9211b8800e06e4e0979885823d627 /contrib | |
parent | 79fd268e9ce637b2853126bf01f146c8924ddc79 (diff) | |
download | coredns-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-x | contrib/kubernetes/testscripts/00_run_k8s.sh | 42 | ||||
-rwxr-xr-x | contrib/kubernetes/testscripts/10_setup_kubectl.sh | 23 | ||||
-rwxr-xr-x | contrib/kubernetes/testscripts/15_run_skydns.sh | 46 | ||||
-rwxr-xr-x | contrib/kubernetes/testscripts/20_setup_k8s_services.sh | 119 | ||||
-rw-r--r-- | contrib/kubernetes/testscripts/README.md | 43 | ||||
-rwxr-xr-x | contrib/kubernetes/testscripts/kill_all_containers.sh | 5 | ||||
-rw-r--r-- | contrib/kubernetes/testscripts/nginx-rc.yml | 19 | ||||
-rwxr-xr-x | contrib/kubernetes/testscripts/start_k8s_with_services.sh | 12 |
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} |