k8s-部署kube dns及coredns


部署kube-dns

https://console.cloud.google.com/gcr/images/google-containers/GLOBAL #kube-dns鏡像下載地址

kube-dns簡介

kube-dns 的 pod 中包含了 3 個容器,分別是:
1、kube-dns:提供service name域名的解析(用於k8s集群內部的域名解析)
2、dns-dnsmasq:提供DNS緩存(當一個容器訪問dns-dnsmasq獲取域名解析,dns-dnsmasq沒有解析,會到kube-dns去查詢,kube-dns查詢后,把解析發送給dns-dnsmasq,dns-dnsmasq再發送給容器,並且本身會緩存一份,當下次再有相同的請求,會直接由dns-dnsmasq處理),降低kubedns負載,提高性能 
3、dns-sidecar:定期檢查kubedns和dnsmasq的健康狀態

注意:
kube-dns 容器里是沒有 service name 對應的 IP 地址的,這些數據全部都是存放到 etcd 中,所以當進行解析時,
dns-dnsmasq 沒有解析,會向 kube-dns 獲取解析,kube-dns 本身並沒有解析,kube-dns 會通過 api server 查詢 etcd 中的解析,從而把解析返還給 dns-dnsmasq,dns-dnsmasq 本身緩存一份,並且把解析發送給容器

部署

1、cd /usr/local/src/

2、tar xf kubernetes-client-linux-amd64.tar.gz
   tar xf kubernetes-node-linux-amd64.tar.gz
   tar xf kubernetes-server-linux-amd64.tar.gz
   tar xf kubernetes.tar.gz
   
3、cd kubernetes/cluster/addons/dns/kube-dns/

4、cp kube-dns.yaml.base kube-dns.yaml

5、vim kube-dns.yaml      #需要修改以下內容
spec:
  selector:
    k8s-app: kube-dns
  clusterIP: 172.31.0.2  #指定kube-dns的service的IP地址;可以通過啟動一個pod,進入pod查看
                          /etc/resolv.conf 此文件,這里設置的地址需要與pod中指定的dns地址一致
                          
      containers:
      - name: kubedns
        image: harbor.linux.com/kube-dns/k8s-dns-kube-dns-amd64:1.14.13  #本地harbor地址
        resources:
          limits:
            memory: 512Mi   #指定kube-dns容器最大可以使用宿主機的內存

        args:
        - --domain=linux.local.  #指定域名后綴;部署k8s集群時指定的service域名后綴
        - --dns-port=10053
        - --config-dir=/kube-dns-config
        - --v=2 
   
      - name: dnsmasq
        image: harbor.linux.com/kube-dns/k8s-dns-dnsmasq-nanny-amd64:1.14.13  
      
        args:
        - --server=/linux.local/127.0.0.1#10053   #指定域名后綴;針對linux.local域名的解析,交給
                                                   本機的10053端口去解析
        - --server=/linux.test/172.31.5.20#53     #針對 linux.test 域名的解析,交給指定DNS服務                                                    器解析,一般此服務器是針對公司內部的域名解析

      - name: sidecar
        image: harbor.linux.com/kube-dns/k8s-dns-sidecar-amd64:1.14.13 
        
        args:
        - --probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.linux.local,5,SRV
        - --probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.linux.local,5,SRV

6、cp kube-dns.yaml /root

7、cd /etc/ansible/manifests/

8、mkdir dns/{kube-dns,Coredns} -p

9、cd dns/kube-dns

10、docker load -i k8s-dns-dnsmasq-nanny-amd64_1.14.13.tar.gz     #導入kube-dns所需要的鏡

11、docker tag gcr.io/google-containers/k8s-dns-dnsmasq-nanny-amd64:1.14.13 harbor.linux.com/kube-dns/k8s-dns-dnsmasq-nanny-amd64:1.14.13

12、docker push harbor.linux.com/kube-dns/k8s-dns-dnsmasq-nanny-amd64:1.14.13
#上傳到本地harbor

13、docker load -i k8s-dns-kube-dns-amd64_1.14.13.tar.gz
    docker tag gcr.io/google-containers/k8s-dns-kube-dns-amd64:1.14.13 harbor.linux.com/kube-dns/k8s-dns-kube-dns-amd64:1.14.13
    docker push harbor.linux.com/kube-dns/k8s-dns-kube-dns-amd64:1.14.13
    docker load -i k8s-dns-sidecar-amd64_1.14.13.tar.gz
    docker tag gcr.io/google-containers/k8s-dns-sidecar-amd64:1.14.13 harbor.linux.com/kube-dns/k8s-dns-sidecar-amd64:1.14.13
    docker push harbor.linux.com/kube-dns/k8s-dns-sidecar-amd64:1.14.13
    
14、kubectl apply -f /root/kube-dns.yaml   #啟動kube-dns的pod

15、進入一個容器,ping 外網,如果能 ping 通,則 kube-dns 部署成功

16、不在同一個namespace內的service是不能直接訪問的,需要在容器中使用此方法:
ping kubernetes-dashboard.kubernetes-dashboard.svc.linux.local
#第一個 kubernetes-dashboard 是 service name,第二個 kubernetes-dashboard 是 namespace name,svc 是固定的,linux.local 為部署 k8s 集群時指定的 service 的域名后綴;在同一個 namespace 里的 pod 訪問 service,也盡量使用全稱域名訪問,不要只寫 service name 這個簡稱

17、kubectl exec busybox nslookup kubernetes.default.svc.linux.local
#也可以使用busybox容器,進行域名解析測試(不進入容器中)

部署coredns:

https://github.com/coredns/coredns #下載地址

https://github.com/coredns/deployment/tree/master/kubernetes #1.6版本部署方式

1、 cd /etc/ansible/manifests/dns

2、git clone https://github.com/coredns/deployment.git   #將github上部署coredns的項目克隆下來

3、cd deployment/kubernetes/

4、./deploy.sh > coredns.yml     
#將 coredns 的模板內容輸出到 yml 文件中,此項目在執行腳本之前必須提前已經安裝完 kube-dns,這個腳本會讀取 kube-dns 的一些信息

5、vim coredns.yml
data:
  Corefile: |
    .:53 {
        errors
        health {
          lameduck 5s
        }
        ready
        kubernetes linux.local in-addr.arpa ip6.arpa {   #此處需要修改為自己配置的域名后綴
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        forward . 223.6.6.6   #coredns能解析的話解析,不能解析的話轉發到指定地址進行解析,此處一般為公								 司內部的DNS服務器
        
      containers:
      - name: coredns
        image: harbor.linux.com/coredns/coredns:1.6.9  #鏡像地址換成本地的harbor
        imagePullPolicy: IfNotPresent
        resources:
          limits:
            memory: 512Mi      #運行coredns使用宿主機的內存大小

6、cp coredns.yml /root

7、kubectl delete -f /root/kube-dns.yaml

8、kubectl apply -f /root/coredns.yml   #構建coredns

9、進入一個容器中 ping 外網進行測試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM