k 8 s-DNSドメイン名サービス


先にインストールしたk 8 sクラスタ環境でDNSドメイン名解析サービスを引き続き追加
Kubernetesが提供するDNSは、1.etcd:DNSストレージ2.kube 2 sky:kubernetes masterのservice(サービス)をetcd 3.skyDNSに登録する:DNSドメイン名解析サービスを提供するこの3つのコンポーネントをpodで起動および実行する
コンポーネントミラーetcd,kube 2 sky,skydns,exechealthzを追加
 docker pull docker.gaoxiaobang.com/kubernetes/etcd-amd64:2.2.1
 docker pull docker.gaoxiaobang.com/kubernetes/kube2sky:1.14
 docker pull docker.gaoxiaobang.com/kubernetes/skydns:2015-10-13-8c72f8c
 docker pull docker.gaoxiaobang.com/kubernetes/exechealthz:1.0
 docker tag docker.gaoxiaobang.com/kubernetes/skydns:2015-10-13-8c72f8c 192.168.1.5:5000/skydns:2015-10-13-8c72f8c
 docker tag docker.gaoxiaobang.com/kubernetes/kube2sky:1.14 192.168.1.5:5000/kube2sky:1.14
 docker tag docker.gaoxiaobang.com/kubernetes/etcd-amd64:2.2.1 192.168.1.5:5000/etcd-amd64:2.2.1
 docker tag docker.gaoxiaobang.com/kubernetes/exechealthz:1.0 192.168.1.5:5000/exechealthz:1.0
 docker push 192.168.1.5:5000/skydns:2015-10-13-8c72f8c
 docker push 192.168.1.5:5000/kube2sky:1.14
 docker push 192.168.1.5:5000/etcd-amd64:2.2.1
 docker push 192.168.1.5:5000/exechealthz:1.0
docker pull busybox        #コマンドツールとして使用
docker tag docker.io/busybox 192.168.1.5:5000/busybox
docker push 192.168.1.5:5000/busybox
yamlファイル、skydns-rc.yaml、skydns-svc.yaml、busybox.yamlの作成
cd/home/dns
==============================================================================
vi skydns-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: kube-dns-v9
  namespace: default
  labels:
    k8s-app: kube-dns
    version: v9
    kubernetes.io/cluster-service: "true"
spec:
  replicas: 1
  selector:
    k8s-app: kube-dns
    version: v9
  template:
    metadata:
      labels:
        k8s-app: kube-dns
        version: v9
        kubernetes.io/cluster-service: "true"
    spec:
      containers:
      - name: etcd
        image: 192.168.1.5:5000/etcd-amd64:2.2.1
        imagePullPolicy: IfNotPresent
        resources:
          limits:
            cpu: 100m
            memory: 50Mi
        command:
        - /usr/local/bin/etcd
       # - --privileged=true
        - -data-dir
        - /var/etcd/data
        - -listen-client-urls
        - http://127.0.0.1:2379,http://127.0.0.1:4001
        - -advertise-client-urls
        - http://127.0.0.1:2379,http://127.0.0.1:4001
        - -initial-cluster-token
        - skydns-etcd
        volumeMounts:
        - mountPath: /var/etcd/data
          name: etcd-storage
      - name: kube2sky
        #image: gcr.io/google_containers/kube2sky:1.11
        image: 192.168.1.5:5000/kube2sky:1.14
        imagePullPolicy: IfNotPresent
        resources:
          limits:
            cpu: 100m
            memory: 50Mi
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 60
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 5
        readinessProbe:
          httpGet:
            path: /readiness
            port: 8081
            scheme: HTTP
          initialDelaySeconds: 30
          timeoutSeconds: 5
        args:
        # command = "/kube2sky"
       # - -etcd-server=http://127.0.0.1:4001
        #- -kube_master_url=http://172.27.8.210:8080
        - --kube-master-url=http://192.168.1.5:8080
        - --domain=atomic.io
      - name: skydns
        #image: gcr.io/google_containers/skydns:2015-03-11-001
        image: 192.168.1.5:5000/skydns:2015-10-13-8c72f8c
        imagePullPolicy: IfNotPresent
        resources:
          limits:
            cpu: 100m
            memory: 50Mi
        args:
        # command = "/skydns"
        - -machines=http://127.0.0.1:2379
        - -addr=0.0.0.0:53
        - -ns-rotate=false
        - -domain=atomic.io
        ports:
        - containerPort: 53
          name: dns
          protocol: UDP
        - containerPort: 53
          name: dns-tcp
          protocol: TCP
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 30
          timeoutSeconds: 5
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 1
          timeoutSeconds: 5
      - name: healthz
        #image: gcr.io/google_containers/exechealthz:1.0
        image: 192.168.1.5:5000/exechealthz:1.0
        imagePullPolicy: IfNotPresent
        resources:
          limits:
            cpu: 10m
            memory: 20Mi
        args:
        - -cmd=nslookup kubernetes.default.svc.atomic.io 127.0.0.1 >/dev/null
        - -port=8080
        ports:
        - containerPort: 8080
          protocol: TCP
      volumes:
      - name: etcd-storage
        emptyDir: {}
      dnsPolicy: Default

以下の内容を修正することに注意してください.
1、対応する4つのミラーアドレス
image: 192.168.1.5:5000/etcd-amd64:2.2.1
image: 192.168.1.5:5000/kube2sky:1.14
image: 192.168.1.5:5000/skydns:2015-10-13-8c72f8c
image: 192.168.1.5:5000/exechealthz:1.0
2,masterとdomainアドレス
        - --kube-master-url=http://192.168.1.5:8080    #クラスタマスターのアクセスアドレス
        - --domain=atomic.io        #flannelネットワーク定義domain
3,namespaceの定義
namespace: default
args:
        - -cmd=nslookup kubernetes.default.svc.atomic.io 127.0.0.1 >/dev/null  #注意namespaceとflannelネットワーク名
4,skydnsの起動パラメータ-addr=0.0.0.0:53は、ネイティブTCPとUDPの53ポートを使用してサービスを提供することを示す
5,ミラーサービスの127.0.0.1アドレスは勝手に変更しないで、原状を維持して、1つのpod内の異なるdns応用サービスの呼び出しアドレスが一致することを保証します
6、ディレクトリマウントは一貫した対応を保つ
- -data-dir
        -/var/etcd/data
volumeMounts:
        - mountPath:/var/etcd/data
=============================================================================
vi skydns-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: kube-dns
  namespace: default
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    kubernetes.io/name: "KubeDNS"
spec:
  selector:
    k8s-app: kube-dns
  clusterIP:  10.254.10.20
  ports:
  - name: dns
    port: 53
    protocol: UDP
  - name: dns-tcp
    port: 53
    protocol: TCP

この書類に注意しなければならないのは
clusterIP:  10.254.10.20
このIPは/etc/kubernetes/kubeletで定義されています.
KUBELET_ARGS="--cluster-dns=10.254.10.20 --cluster-domain=atomic.io"
各nodeの/etc/kubernetes/kubelet起動パラメータ--cluster_dns=10.254.10.20  dnsサービスのclusterIP--cluster_domain=atomic.io  dnsサービスに設定されたドメイン名
パラメータが一致しない場合は変更してkubeletを再起動します
vi busybox.yaml
apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
    - image: 192.168.1.5:5000/busybox
      command:
        - sleep
        - "3600"
      imagePullPolicy: IfNotPresent
      name: busybox
  restartPolicy: Always

ファイルを作成したら、コマンドで作成を実行します.
 kubectl create -f skydns-rc.yaml 
 kubectl create -f skydns-svc.yaml 
 kubectl create -f busybox.yaml 
 kubectl get pods --all-namespaces -o wide
[root@k8s-master dns]# kubectl get pods --all-namespaces -o wide 
NAMESPACE     NAME                       READY       STATUS    RESTARTS      AGE        IP          NODE
default        busybox                    1/1        Running   5          5h        172.17.85.4   k8s-node-1
default       kube-dns-v9-hnp4m               4/4       Running   0          5h        172.17.32.5   192.168.1.5
kube-system   heapster-3919175978-gd82j           1/1       Running   0          12h       172.17.85.3   k8s-node-1
kube-system   kubernetes-dashboard-3155532917-wdq38   1/1       Running   0          12h       172.17.85.2   k8s-node-1
kube-system   monitoring-grafana-3994812335-wv9dh    1/1       Running   0          12h       172.17.32.2   192.168.1.5
kube-system   monitoring-influxdb-265709471-xv170    1/1       Running   0          12h       172.17.32.3   192.168.1.5

dns検出コマンドの実行(busyboxはコマンドツール)
[root@k8s-master dns]# kubectl exec busybox -- nslookup kubernetes
Server:    10.254.10.20
Address 1: 10.254.10.20
Name:      kubernetes
Address 1: 10.254.0.1
サービスがカスタムネーミングスペースに属している場合は、サービス検索時にnamespaceの名前を付ける必要があります.
[root@k8s-master dns]# kubectl exec busybox -- nslookup kubernetes-dashboard.kube-system
Server:    10.254.10.20
Address 1: 10.254.10.20
Name:      kubernetes-dashboard.kube-system
Address 1: 10.254.132.77
コマンドでsvcを表示して、対応する下のドメイン名の解析は正しいです
[root@k8s-master dns]# kubectl get svc --all-namespaces -o wide 
NAMESPACE     NAME                   CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE       SELECTOR
default       kube-dns               10.254.10.20             53/UDP,53/TCP   5h        k8s-app=kube-dns
default       kubernetes             10.254.0.1               443/TCP         8d       
kube-system   heapster               10.254.189.98            80/TCP          12h       k8s-app=heapster
kube-system   kubernetes-dashboard   10.254.132.77           80:30699/TCP    12h       app=kubernetes-dashboard
kube-system   monitoring-grafana     10.254.178.155           80/TCP          12h       k8s-app=grafana
kube-system   monitoring-influxdb    10.254.59.144            8086/TCP        12h       k8s-app=influxdb