mirror of
https://github.com/notherealmarco/coredns-deployment.git
synced 2025-05-05 20:42:33 +02:00
Add k8s deployment script and README
This commit is contained in:
parent
2d63439b3e
commit
3c8dc1cbc7
3 changed files with 141 additions and 0 deletions
29
kubernetes/README.md
Normal file
29
kubernetes/README.md
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
# kubernetes
|
||||||
|
|
||||||
|
CoreDNS can run in place of the standard Kube-DNS in Kubernetes. Using the *kubernetes*
|
||||||
|
middleware, CoreDNS will reading zone data from a Kubernetes cluster. It implements the
|
||||||
|
spec defined for Kubernetes DNS-Based service discovery:
|
||||||
|
|
||||||
|
https://github.com/kubernetes/dns/blob/master/docs/specification.md
|
||||||
|
|
||||||
|
## deploy.sh and coredns.yaml.sed
|
||||||
|
|
||||||
|
`deploy.sh` is a convenience script to generate a manifest for running CoreDNS on a cluster
|
||||||
|
that is currently running standard kube-dns. Using the `coredns.yaml.sed` as a template,
|
||||||
|
it creates a ConfigMap and a CoreDNS deployment, then updates the Kube-DNS service selector
|
||||||
|
to use the CoreDNS deployment. By re-using the existing service, there is no disruption in
|
||||||
|
servicing requests.
|
||||||
|
|
||||||
|
The script doesn't delete the kube-dns deployment or replication controller - you'll have to
|
||||||
|
do that manually.
|
||||||
|
|
||||||
|
You should examine the manifest carefully and make sure it is correct for your particular
|
||||||
|
cluster. Depending on how you have built your cluster and the version you are running,
|
||||||
|
some modifications to the manifest may be needed.
|
||||||
|
|
||||||
|
In the best case scenario, all that's needed to replace Kube-DNS are these two commands:
|
||||||
|
|
||||||
|
~~~
|
||||||
|
$ ./deploy.sh 10.3.0.0/24 | kubectl apply -f -
|
||||||
|
$ kubectl delete --namespace=kube-system deployment kube-dns
|
||||||
|
~~~
|
93
kubernetes/coredns.yaml.sed
Normal file
93
kubernetes/coredns.yaml.sed
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: coredns
|
||||||
|
namespace: kube-system
|
||||||
|
data:
|
||||||
|
Corefile: |
|
||||||
|
.:53 {
|
||||||
|
errors
|
||||||
|
log stdout
|
||||||
|
health
|
||||||
|
kubernetes CLUSTER_DOMAIN {
|
||||||
|
cidrs SERVICE_CIDR
|
||||||
|
}
|
||||||
|
proxy . /etc/resolv.conf
|
||||||
|
cache 30
|
||||||
|
}
|
||||||
|
---
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: coredns
|
||||||
|
namespace: kube-system
|
||||||
|
labels:
|
||||||
|
k8s-app: coredns
|
||||||
|
kubernetes.io/cluster-service: "true"
|
||||||
|
kubernetes.io/name: "CoreDNS"
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
k8s-app: coredns
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
k8s-app: coredns
|
||||||
|
annotations:
|
||||||
|
scheduler.alpha.kubernetes.io/critical-pod: ''
|
||||||
|
scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]'
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: coredns
|
||||||
|
image: coredns/coredns:latest
|
||||||
|
imagePullPolicy: Always
|
||||||
|
args: [ "-conf", "/etc/coredns/Corefile" ]
|
||||||
|
volumeMounts:
|
||||||
|
- name: config-volume
|
||||||
|
mountPath: /etc/coredns
|
||||||
|
ports:
|
||||||
|
- containerPort: 53
|
||||||
|
name: dns
|
||||||
|
protocol: UDP
|
||||||
|
- containerPort: 53
|
||||||
|
name: dns-tcp
|
||||||
|
protocol: TCP
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /health
|
||||||
|
port: 8080
|
||||||
|
scheme: HTTP
|
||||||
|
initialDelaySeconds: 60
|
||||||
|
timeoutSeconds: 5
|
||||||
|
successThreshold: 1
|
||||||
|
failureThreshold: 5
|
||||||
|
dnsPolicy: Default
|
||||||
|
volumes:
|
||||||
|
- name: config-volume
|
||||||
|
configMap:
|
||||||
|
name: coredns
|
||||||
|
items:
|
||||||
|
- key: Corefile
|
||||||
|
path: Corefile
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: kube-dns
|
||||||
|
namespace: kube-system
|
||||||
|
labels:
|
||||||
|
k8s-app: coredns
|
||||||
|
kubernetes.io/cluster-service: "true"
|
||||||
|
kubernetes.io/name: "CoreDNS"
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
k8s-app: coredns
|
||||||
|
clusterIP: CLUSTER_DNS_IP
|
||||||
|
ports:
|
||||||
|
- name: dns
|
||||||
|
port: 53
|
||||||
|
protocol: UDP
|
||||||
|
- name: dns-tcp
|
||||||
|
port: 53
|
||||||
|
protocol: TCP
|
19
kubernetes/deploy.sh
Executable file
19
kubernetes/deploy.sh
Executable file
|
@ -0,0 +1,19 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Deploys CoreDNS to a cluster currently running Kube-DNS.
|
||||||
|
|
||||||
|
SERVICE_CIDR=$1
|
||||||
|
CLUSTER_DOMAIN=${2:-cluster.local}
|
||||||
|
YAML_TEMPLATE=${3:-`pwd`/coredns.yaml.sed}
|
||||||
|
YAML=${4:-`pwd`/coredns.yaml}
|
||||||
|
|
||||||
|
if [[ -z $SERVICE_CIDR ]]; then
|
||||||
|
echo "Usage: $0 SERVICE-CIDR [ CLUSTER-DOMAIN ] [ YAML-TEMPLATE ] [ YAML ]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
CLUSTER_DNS_IP=$(kubectl get service --namespace kube-system kube-dns -o jsonpath="{.spec.clusterIP}")
|
||||||
|
|
||||||
|
sed -e s/CLUSTER_DNS_IP/$CLUSTER_DNS_IP/g -e s/CLUSTER_DOMAIN/$CLUSTER_DOMAIN/g -e s?SERVICE_CIDR?$SERVICE_CIDR?g $YAML_TEMPLATE
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue