mirror of
https://github.com/coredns/coredns.git
synced 2025-10-27 08:14:18 -04:00
kubernetes: hide contrib (#320)
This is purely travis (and maybe local testing). Does not warrent (IMHO) a contrib/ directory. Hide it in a .travis directory.
This commit is contained in:
42
.travis/kubernetes/00_run_k8s.sh
Executable file
42
.travis/kubernetes/00_run_k8s.sh
Executable file
@@ -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=${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
|
||||
23
.travis/kubernetes/10_setup_kubectl.sh
Executable file
23
.travis/kubernetes/10_setup_kubectl.sh
Executable file
@@ -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.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"
|
||||
46
.travis/kubernetes/15_run_skydns.sh
Executable file
46
.travis/kubernetes/15_run_skydns.sh
Executable file
@@ -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}
|
||||
119
.travis/kubernetes/20_setup_k8s_services.sh
Executable file
119
.travis/kubernetes/20_setup_k8s_services.sh
Executable file
@@ -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}
|
||||
43
.travis/kubernetes/README.md
Normal file
43
.travis/kubernetes/README.md
Normal file
@@ -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
|
||||
~~~
|
||||
5
.travis/kubernetes/kill_all_containers.sh
Executable file
5
.travis/kubernetes/kill_all_containers.sh
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
docker rm -f $(docker ps -a -q)
|
||||
sleep 1
|
||||
docker rm -f $(docker ps -a -q)
|
||||
70
.travis/kubernetes/kubernetes-rc.yaml
Normal file
70
.travis/kubernetes/kubernetes-rc.yaml
Normal file
@@ -0,0 +1,70 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: coredns-configmap
|
||||
namespace: kube-system
|
||||
data:
|
||||
corefile: |
|
||||
.:53 {
|
||||
kubernetes coredns.local {
|
||||
}
|
||||
#cache 160 coredns.local
|
||||
errors stdout
|
||||
log stdout
|
||||
}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ReplicationController
|
||||
metadata:
|
||||
labels:
|
||||
k8s-app: kube-dns
|
||||
kubernetes.io/cluster-service: "true"
|
||||
version: v20
|
||||
name: kube-dns-v20
|
||||
namespace: kube-system
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
k8s-app: kube-dns
|
||||
version: v20
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
k8s-app: kube-dns
|
||||
kubernetes.io/cluster-service: "true"
|
||||
version: v20
|
||||
spec:
|
||||
containers:
|
||||
- args:
|
||||
- -conf=/cfg/corefile
|
||||
image: aledbf/kube-coredns:0.6
|
||||
imagePullPolicy: IfNotPresent
|
||||
name: kube-dns
|
||||
ports:
|
||||
- containerPort: 53
|
||||
name: dns
|
||||
protocol: UDP
|
||||
- containerPort: 53
|
||||
name: dns-tcp
|
||||
protocol: TCP
|
||||
volumeMounts:
|
||||
- name: config-volume
|
||||
mountPath: /cfg
|
||||
- args:
|
||||
- -cmd=nslookup kubernetes.default.svc.cluster.local localhost >/dev/null
|
||||
- -port=8080
|
||||
image: gcr.io/google_containers/exechealthz:1.0
|
||||
imagePullPolicy: IfNotPresent
|
||||
name: healthz
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
protocol: TCP
|
||||
resources:
|
||||
limits:
|
||||
cpu: 10m
|
||||
memory: 20Mi
|
||||
dnsPolicy: Default
|
||||
volumes:
|
||||
- name: config-volume
|
||||
configMap:
|
||||
name: coredns-configmap
|
||||
19
.travis/kubernetes/nginx-rc.yml
Normal file
19
.travis/kubernetes/nginx-rc.yml
Normal file
@@ -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
|
||||
12
.travis/kubernetes/start_k8s_with_services.sh
Executable file
12
.travis/kubernetes/start_k8s_with_services.sh
Executable file
@@ -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}
|
||||
Reference in New Issue
Block a user