mirror of
https://github.com/notherealmarco/coredns-deployment.git
synced 2025-03-14 14:16:16 +01:00
Merge pull request #1 from johnbelamaric/add-k8s-deployment
Add k8s deployment script and README
This commit is contained in:
commit
9a65261f02
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…
Reference in a new issue