kubernetes中的dns主要用于服務(wù)發(fā)現(xiàn)逗旁,當(dāng)創(chuàng)建service后可以通過(guò)service名稱(chēng)進(jìn)行通信,例如:
下圖的service創(chuàng)建后垂谢,其他pod就可以通過(guò)域名c.codeus解析出這個(gè)service下pod的ip
搭建dns需要下面三個(gè)鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/inspur_research/k8s-dns-sidecar-amd64:1.14.5
docker pull registry.cn-hangzhou.aliyuncs.com/wonders/k8s-dns-kube-dns-amd64:1.14.5
docker pull registry.cn-hangzhou.aliyuncs.com/inspur_research/k8s-dns-dnsmasq-nanny-amd64:1.14.5
創(chuàng)建kubedns-controller.yaml
# cat kubedns-controller.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
? name: kube-dns
? namespace: kube-system
? labels:
? ? k8s-app: kube-dns
? ? kubernetes.io/cluster-service: "true"
? ? addonmanager.kubernetes.io/mode: Reconcile
spec:
? # replicas: not specified here:
? # 1. In order to make Addon Manager do not reconcile this replicas parameter.
? # 2. Default is 1.
? # 3. Will be tuned in real time if DNS horizontal auto-scaling is turned on.
? strategy:
? ? rollingUpdate:
? ? ? maxSurge: 10%
? ? ? maxUnavailable: 0
? selector:
? ? matchLabels:
? ? ? k8s-app: kube-dns
? template:
? ? metadata:
? ? ? labels:
? ? ? ? k8s-app: kube-dns
? ? ? annotations:
? ? ? ? scheduler.alpha.kubernetes.io/critical-pod: ''
? ? spec:
? ? ? tolerations:
? ? ? - key: "CriticalAddonsOnly"
? ? ? ? operator: "Exists"
? ? ? volumes:
? ? ? - name: kube-dns-config
? ? ? ? configMap:
? ? ? ? ? name: kube-dns
? ? ? ? ? optional: true
? ? ? imagePullSecrets:
? ? ? - name: registry-key
? ? ? containers:
? ? ? - name: kubedns
? ? ? ? image: registry.cn-hangzhou.aliyuncs.com/wonders/k8s-dns-kube-dns-amd64:1.14.5
? ? ? ? resources:
? ? ? ? ? # TODO: Set memory limits when we've profiled the container for large
? ? ? ? ? # clusters, then set request = limit to keep this container in
? ? ? ? ? # guaranteed class. Currently, this container falls into the
? ? ? ? ? # "burstable" category so the kubelet doesn't backoff from restarting it.
? ? ? ? ? limits:
? ? ? ? ? ? memory: 170Mi
? ? ? ? ? requests:
? ? ? ? ? ? cpu: 100m
? ? ? ? ? ? memory: 70Mi
? ? ? ? livenessProbe:
? ? ? ? ? httpGet:
? ? ? ? ? ? path: /healthcheck/kubedns
? ? ? ? ? ? port: 10054
? ? ? ? ? ? scheme: HTTP
? ? ? ? ? initialDelaySeconds: 60
? ? ? ? ? timeoutSeconds: 5
? ? ? ? ? successThreshold: 1
? ? ? ? ? failureThreshold: 5
? ? ? ? readinessProbe:
? ? ? ? ? httpGet:
? ? ? ? ? ? path: /readiness
? ? ? ? ? ? port: 8081
? ? ? ? ? ? scheme: HTTP
? ? ? ? ? # we poll on pod startup for the Kubernetes master service and
? ? ? ? ? # only setup the /readiness HTTP server once that's available.
? ? ? ? ? initialDelaySeconds: 3
? ? ? ? ? timeoutSeconds: 5
? ? ? ? args:
? ? ? ? - --domain=cluster.local
? ? ? ? - --dns-port=10053
? ? ? ? - --config-dir=/kube-dns-config
? ? ? ? - --v=2
? ? ? ? env:
? ? ? ? - name: PROMETHEUS_PORT
? ? ? ? ? value: "10055"
? ? ? ? ports:
? ? ? ? - containerPort: 10053
? ? ? ? ? name: dns-local
? ? ? ? ? protocol: UDP
? ? ? ? - containerPort: 10053
? ? ? ? ? name: dns-tcp-local
? ? ? ? ? protocol: TCP
? ? ? ? - containerPort: 10055
? ? ? ? ? name: metrics
? ? ? ? ? protocol: TCP
? ? ? ? volumeMounts:
? ? ? ? - name: kube-dns-config
? ? ? ? ? mountPath: /kube-dns-config
? ? ? - name: dnsmasq
? ? ? ? image: registry.cn-hangzhou.aliyuncs.com/inspur_research/k8s-dns-dnsmasq-nanny-amd64:1.14.5
? ? ? ? livenessProbe:
? ? ? ? ? httpGet:
? ? ? ? ? ? path: /healthcheck/dnsmasq
? ? ? ? ? ? port: 10054
? ? ? ? ? ? scheme: HTTP
? ? ? ? ? initialDelaySeconds: 60
? ? ? ? ? timeoutSeconds: 5
? ? ? ? ? successThreshold: 1
? ? ? ? ? failureThreshold: 5
? ? ? ? args:
? ? ? ? - -v=2
? ? ? ? - -logtostderr
? ? ? ? - -configDir=/etc/k8s/dns/dnsmasq-nanny
? ? ? ? - -restartDnsmasq=true
? ? ? ? - --
? ? ? ? - -k
? ? ? ? - --cache-size=1000
? ? ? ? - --no-negcache
? ? ? ? - --log-facility=-
? ? ? ? - --server=/cluster.local/127.0.0.1#10053
? ? ? ? - --server=/in-addr.arpa/127.0.0.1#10053
? ? ? ? - --server=/ip6.arpa/127.0.0.1#10053
? ? ? ? ports:
? ? ? ? - containerPort: 53
? ? ? ? ? name: dns
? ? ? ? ? protocol: UDP
? ? ? ? - containerPort: 53
? ? ? ? ? name: dns-tcp
? ? ? ? ? protocol: TCP
? ? ? ? # see: https://github.com/kubernetes/kubernetes/issues/29055 for details
? ? ? ? resources:
? ? ? ? ? requests:
? ? ? ? ? ? cpu: 150m
? ? ? ? ? ? memory: 20Mi
? ? ? ? volumeMounts:
? ? ? ? - name: kube-dns-config
? ? ? ? ? mountPath: /etc/k8s/dns/dnsmasq-nanny
? ? ? - name: sidecar
? ? ? ? image: registry.cn-hangzhou.aliyuncs.com/inspur_research/k8s-dns-sidecar-amd64:1.14.5
? ? ? ? livenessProbe:
? ? ? ? ? httpGet:
? ? ? ? ? ? path: /metrics
? ? ? ? ? ? port: 10054
? ? ? ? ? ? scheme: HTTP
? ? ? ? ? initialDelaySeconds: 60
? ? ? ? ? timeoutSeconds: 5
? ? ? ? ? successThreshold: 1
? ? ? ? ? failureThreshold: 5
? ? ? ? args:
? ? ? ? - --v=2
? ? ? ? - --logtostderr
? ? ? ? - --probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,A
? ? ? ? - --probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,A
? ? ? ? ports:
? ? ? ? - containerPort: 10054
? ? ? ? ? name: metrics
? ? ? ? ? protocol: TCP
? ? ? ? resources:
? ? ? ? ? requests:
? ? ? ? ? ? memory: 20Mi
? ? ? ? ? ? cpu: 10m
? ? ? dnsPolicy: Default? # Don't use cluster DNS.
? ? ? serviceAccountName: kube-dns
創(chuàng)建kubedns-svc.yaml
下面的 clusterIP: 10.0.0.2配置為自定義配置家坎,跟集群ip處于同一個(gè)網(wǎng)段,通過(guò)以下命令查看集群ip后自定義
# kubectl get svc
NAME? ? ? ? TYPE? ? ? ? CLUSTER-IP? EXTERNAL-IP? PORT(S)? AGE
kubernetes? ClusterIP? 10.0.0.1? ? <none>? ? ? ? 443/TCP? 34d
# cat kubedns-svc.yaml
apiVersion: v1
kind: Service
metadata:
? name: kube-dns
? namespace: kube-system
? labels:
? ? k8s-app: kube-dns
? ? kubernetes.io/cluster-service: "true"
? ? addonmanager.kubernetes.io/mode: Reconcile
? ? kubernetes.io/name: "KubeDNS"
spec:
? selector:
? ? k8s-app: kube-dns
? clusterIP: 10.0.0.2
? ports:
? - name: dns
? ? port: 53
? ? protocol: UDP
? - name: dns-tcp
? ? port: 53
? ? protocol: TCP
創(chuàng)建kubedns-cm.yaml
# cat kubedns-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
? name: kube-dns
? namespace: kube-system
? labels:
? ? addonmanager.kubernetes.io/mode: EnsureExists
創(chuàng)建kubedns-sa.yaml
# cat kubedns-sa.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
? name: kube-dns
? namespace: kube-system
? labels:
? ? kubernetes.io/cluster-service: "true"
? ? addonmanager.kubernetes.io/mode: Reconcile
啟動(dòng)
kubectl create -f kubedns-controller.yaml --validate=false
kubectl create -f kubedns-cm.yaml
kubectl create -f kubedns-sa.yaml
kubectl create -f kubedns-svc.yaml
成功后重啟已經(jīng)啟動(dòng)的容器撬呢,容器中的dns配置會(huì)自動(dòng)指向dns-pod的ip
dns-pod中的dns指向是所在宿主機(jī)的dns配置
可通過(guò)查看容器中的cat /etc/resolv.conf查看
原文地址:https://blog.csdn.net/wangjunsheng/article/details/86095544
kubectl create -f kubedns-controller.yaml --validate=false
kubectl create -f kubedns-cm.yaml
kubectl create -f kubedns-sa.yaml
kubectl create -f kubedns-svc.yaml
---------------------
作者:乃不知有漢
來(lái)源:CSDN
原文:https://blog.csdn.net/wangjunsheng/article/details/86095544
版權(quán)聲明:本文為博主原創(chuàng)文章伦吠,轉(zhuǎn)載請(qǐng)附上博文鏈接!