三、基於k8s1.12.1的coredns部署
阿新 • • 發佈:2018-12-26
一、構建coredns服務
將下載的 kubernetes-server-linux-amd64.tar.gz 解壓後,再解壓其中的 kubernetes-src.tar.gz 檔案。coredns 對應的目錄是:cluster/addons/dns。
cd /opt/test/kubernetes/cluster/addons/dns/coredns
將coredns模板複製出來:
cp coredns.yaml.base /opt/yml_files/coredns.yaml
修改一些引數:
修改引數有3個地方,一個是ip6.arpa 指定,一個是更改成國內映象源,一個是定義clusterIP,具體如下
[[email protected]
coredns]# diff coredns.yaml.base /opt/yml_files/coredns.yaml 61c61 < kubernetes __PILLAR__DNS__DOMAIN__ in-addr.arpa ip6.arpa { --- > kubernetes cluster.local. in-addr.arpa ip6.arpa { 111c111 < image: k8s.gcr.io/coredns:1.2.2 --- > image: registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.2.6 176c176 < clusterIP: __PILLAR__DNS__SERVER__ --- > clusterIP: 10.0.0.2
完整的yaml檔案:
[[email protected] yml_files]# cat coredns.yaml # __MACHINE_GENERATED_WARNING__ apiVersion: v1 kind: ServiceAccount metadata: name: coredns namespace: kube-system labels: kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: Reconcile --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: kubernetes.io/bootstrapping: rbac-defaults addonmanager.kubernetes.io/mode: Reconcile name: system:coredns rules: - apiGroups: - "" resources: - endpoints - services - pods - namespaces verbs: - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: annotations: rbac.authorization.kubernetes.io/autoupdate: "true" labels: kubernetes.io/bootstrapping: rbac-defaults addonmanager.kubernetes.io/mode: EnsureExists name: system:coredns roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:coredns subjects: - kind: ServiceAccount name: coredns namespace: kube-system --- apiVersion: v1 kind: ConfigMap metadata: name: coredns namespace: kube-system labels: addonmanager.kubernetes.io/mode: EnsureExists data: Corefile: | .:53 { errors health kubernetes cluster.local. in-addr.arpa ip6.arpa { pods insecure upstream fallthrough in-addr.arpa ip6.arpa } prometheus :9153 proxy . /etc/resolv.conf cache 30 loop reload loadbalance } --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: coredns namespace: kube-system labels: k8s-app: kube-dns kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: Reconcile kubernetes.io/name: "CoreDNS" 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: type: RollingUpdate rollingUpdate: maxUnavailable: 1 selector: matchLabels: k8s-app: kube-dns template: metadata: labels: k8s-app: kube-dns annotations: seccomp.security.alpha.kubernetes.io/pod: 'docker/default' spec: serviceAccountName: coredns tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule - key: "CriticalAddonsOnly" operator: "Exists" containers: - name: coredns image: registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.2.6 imagePullPolicy: IfNotPresent resources: limits: memory: 170Mi requests: cpu: 100m memory: 70Mi args: [ "-conf", "/etc/coredns/Corefile" ] volumeMounts: - name: config-volume mountPath: /etc/coredns readOnly: true ports: - containerPort: 53 name: dns protocol: UDP - containerPort: 53 name: dns-tcp protocol: TCP - containerPort: 9153 name: metrics protocol: TCP livenessProbe: httpGet: path: /health port: 8080 scheme: HTTP initialDelaySeconds: 60 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 5 securityContext: allowPrivilegeEscalation: false capabilities: add: - NET_BIND_SERVICE drop: - all readOnlyRootFilesystem: true 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 annotations: prometheus.io/port: "9153" prometheus.io/scrape: "true" labels: k8s-app: kube-dns kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: Reconcile kubernetes.io/name: "CoreDNS" 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
建立dns:
kubectl create -f coredns.yaml
檢測:
kubectl get all -n kube-system
二、測試:
建立一個簡單的centos,busybox有點坑,測試有問題。
.
[[email protected] yml_files]# cat centos.yaml
apiVersion: v1
kind: Pod
metadata:
name: centoschao
namespace: default
spec:
containers:
- image: centos
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
name: centoschao
restartPolicy: Always
建立:
kubectl create -f centos.yaml
驗證
kubectl exec -it centoschao sh
yum install bind-utils -y
然後退出來:
[[email protected] yml_files]# kubectl exec -ti centoschao -- nslookup kubernetes.default
Server: 10.0.0.2
Address: 10.0.0.2#53
Name: kubernetes.default.svc.cluster.local
Address: 10.0.0.1
此處 dns部署成功