1. 程式人生 > >Kubernetes DNS 服務安裝配置

Kubernetes DNS 服務安裝配置

docker kubernets skydns kube2sky

Kubernetes的DNS服務是基於SkyDNS實現的,同時又需要和API Server緊密溝通,它的基本工作方式是通過API Server監視服務創建,一旦有新的服務創建就通知SkyDNS創建一條域名解析記錄。溝通API Server和SkyDNS的工作都是由Kube2Sky完成的,Kube2sky和Skydns都需要使用ETCD實現共享配置和服務發現。以下是ETCD的架構圖,它清晰地闡明了
Kubernetes實現DNS的方式。

技術分享


關於Skydns和Kube2sky是在本地安裝還是以Pod的方式安裝到k8s集群裏,筆者在網上看到兩種方式都有,但是筆者對本地安裝的方式持懷疑態度,主要是涉及到虛擬網絡和物理網絡的聯通性問題,具體地說就是Skydns Server的IP應該kube集群虛擬網絡中的某個IP地址,也就是說這個IP需要在kube-apiserver啟動參數–service-cluster-ip-range指定的IP地址範圍內。而Skydns如果是本地化安裝,是無法綁定DNS Server的IP為一個虛擬網絡的IP(就是參數-addr的值)。筆者傾向使用鏡像方式安裝。


安裝


文件內容kubernetes-dns.yaml如下:

apiVersion: v1
kind: ReplicationController
metadata:
  name: kube-dns-v6
  namespace: default
  labels:
    k8s-app: kube-dns
    version: v6
    kubernetes.io/cluster-service: "true"
spec:
  replicas: 1
  selector:
    k8s-app: kube-dns
    version: v6
  template:
    metadata:
      labels:
        k8s-app: kube-dns
        version: v6
        kubernetes.io/cluster-service: "true"
    spec:
      containers:
      - name: etcd
        image: index.tenxcloud.com/google_containers/etcd-amd64:2.2.1
        command:
        - /bin/etcd
        - -listen-client-urls
        - http://0.0.0.0:2379,http://0.0.0.0:4001
        - -advertise-client-urls
        - http://127.0.0.1:2379,http://127.0.0.1:4001
        - -initial-cluster-token
        - skydns-etcd
        volumeMounts:
        - name: etcd-storage
          mountPath: /var/etcd/data
      - name: kube2sky
        image: index.tenxcloud.com/google_containers/kube2sky:1.14
        resources:
          limits:
            cpu: 100m
            memory: 50Mi
        livenssProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 60
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 5
        readinessProbe:
          httpGet:
            path: /readiness
            port: 8081
            scheme: HTTP
        initalDelaySeconds: 30
        timeoutSeconds: 5
      args:
      - --domain=cluster.local
      - name: skydns
        image: index.tenxcloud.com/google_containers/skydns:2015-10-13-8c72f8c
        resources:
        args:
        - -machines=http://127.0.0.1:4001
        - -addr=0.0.0.0:53
        - -ns-rotate=false
        - -domain=cluster.local.
        ports:
        - containerPort: 53
          name: dns
          protocol: UDP
        - containerPort: 53
          name: dns-tcp
          protocol: TCP
      dnsPolicy: Default
     - name: healthz
       image: index.tenxcloud.com/google_containers/exechealthz:1.0
       resources:
         limits:
            cpu: 100m
            memory: 50Mi
       args:
       - -cmd=nslookup kubernetes.defaults.svc.cluster.local 127.0.0.1 >/dev/null
       - -port=8080
       ports:
       - containerPort: 8080
         protocol: TCP


使用如下命令: kubectl create -f kubernetes-dns.yaml




本文出自 “網絡技術摸索” 博客,請務必保留此出處http://heshengkai.blog.51cto.com/5014551/1946236

Kubernetes DNS 服務安裝配置