• Kubernetes DNS的配置


     Kubernetes集群机制通过DNS进行服务名和ip的映射,如果没有配置dns,你可以通过下面命令查询到集群ip

    kubectl get svc --namespace=kube-system

    得到结果

    但Cluster-ip是变化的,如果通过一个create命令一次批量建立一堆具有相互依赖关系的Pod或者RC,就需要配置DNS

    配置DNS的方式有几种,我这里试通了最简单的一种SkyDNS的配置.

    skydns-rc.yml

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: kube-dns-v11
      namespace: kube-system
      labels:
        k8s-app: kube-dns
        version: v11
        kubernetes.io/cluster-service: "true"
    spec:
      replicas: 1
      selector:
        k8s-app: kube-dns
        version: v11
      template:
        metadata:
          labels:
            k8s-app: kube-dns
            version: v11
            kubernetes.io/cluster-service: "true"
        spec:
          containers:
          - name: etcd
            image: gcr.io/google_containers/etcd-amd64:2.2.1
            resources:
              limits:
                cpu: 100m
                memory: 500Mi
              requests:
                cpu: 100m
                memory: 50Mi
            command:
            - /usr/local/bin/etcd
            - -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:
            #- name: etcd-storage
            #  mountPath: /var/etcd/data
          - name: kube2sky
            - --domain=cluster.local
            - --kube-master-url=http://192.168.0.105:8080
            resources:
              limits:
                cpu: 100m
                memory: 200Mi
              requests:
                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: 8080
                scheme: HTTP
              initialDelaySeconds: 30
              timeoutSeconds: 5
            args:
            - --domain=cluster.local
          - name: skydns
            image: gcr.io/google_containers/skydns:2015-10-13-8c72f8c
            resources:
              limits:
                cpu: 100m
                memory: 200Mi
              requests:
                cpu: 100m
                memory: 50Mi
            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
          - name: healthz
            image: gcr.io/google_containers/exechealthz:1.0
            resources:
              limits:
                cpu: 10m
                memory: 20Mi
              requests:
                cpu: 10m
                memory: 20Mi
            args:
            - -cmd=nslookup kubernetes.default.svc.cluster.local 127.0.0.1 >/dev/null
            - -port=8080
            ports:
            - containerPort: 8080
              protocol: TCP
          #volumes:
          #- name: etcd-storage
          #  emptyDir: {}
          dnsPolicy: Default

    注意这里有个配置是指向你的api server

    kube-master-url=http://192.168.0.105:8080

    skydns-svc.yml

    apiVersion: v1
    kind: Service
    metadata:
      name: kube-dns
      namespace: kube-system
      labels:
        k8s-app: kube-dns
        kubernetes.io/cluster-service: "true"
        kubernetes.io/name: "KubeDNS"
    spec:
      selector:
        k8s-app: kube-dns
      clusterIP:  10.254.254.254
      ports:
      - name: dns
        port: 53
        protocol: UDP
      - name: dns-tcp
        port: 53
        protocol: TCP

    先去minion节点上下载所需要的images

    docker pull gcr.io/google_containers/etcd-amd64:2.2.1
    docker pull gcr.io/google_containers/skydns:2015-10-13-8c72f8c
    docker pull gcr.io/google_containers/exechealthz:1.0

    然后运行构建

    kubectl create -f skydns-rc.yml
    kubectl create -f skydns-svc.yml

    最后看到Pods处于Running状态

     查看日志需要通过-c指定container name

    [root@k8s-master skydns]# kubectl get pods --namespace=kube-system
    NAME                 READY     STATUS    RESTARTS   AGE
    kube-dns-v11-x0vr3   4/4       Running   20         1d
    [root@k8s-master skydns]# kubectl logs kube-dns-v11-x0vr3 -n kube-system
    Error from server (BadRequest): a container name must be specified for pod kube-dns-v11-x0vr3, choose one of: [etcd kube2sky skydns healthz]
    [root@k8s-master skydns]# kubectl logs kube-dns-v11-x0vr3 -n kube-system -c etcd
    2017-05-24 00:06:03.899264 I | etcdmain: etcd Version: 2.2.1
    2017-05-24 00:06:03.899305 I | etcdmain: Git SHA: 75f8282
    2017-05-24 00:06:03.899310 I | etcdmain: Go Version: go1.5.1
    2017-05-24 00:06:03.899314 I | etcdmain: Go OS/Arch: linux/amd64
    2017-05-24 00:06:03.899319 I | etcdmain: setting maximum number of CPUs to 1, total number of available CPUs is 1
    2017-05-24 00:06:03.900546 I | etcdmain: listening for peers on http://localhost:2380
    2017-05-24 00:06:03.900607 I | etcdmain: listening for peers on http://localhost:7001
    2017-05-24 00:06:03.900626 I | etcdmain: listening for client requests on http://127.0.0.1:2379
    2017-05-24 00:06:03.900640 I | etcdmain: listening for client requests on http://127.0.0.1:4001
    2017-05-24 00:06:03.950602 I | etcdserver: name = default
    2017-05-24 00:06:03.950621 I | etcdserver: data dir = /var/etcd/data
    2017-05-24 00:06:03.950627 I | etcdserver: member dir = /var/etcd/data/member
    2017-05-24 00:06:03.950630 I | etcdserver: heartbeat = 100ms
    2017-05-24 00:06:03.950633 I | etcdserver: election = 1000ms
    2017-05-24 00:06:03.950637 I | etcdserver: snapshot count = 10000
    2017-05-24 00:06:03.950649 I | etcdserver: advertise client URLs = http://127.0.0.1:2379,http://127.0.0.1:4001
    2017-05-24 00:06:03.950655 I | etcdserver: initial advertise peer URLs = http://localhost:2380,http://localhost:7001
    2017-05-24 00:06:03.950665 I | etcdserver: initial cluster = default=http://localhost:2380,default=http://localhost:7001
    2017-05-24 00:06:03.984118 I | etcdserver: starting member 6a5871dbdd12c17c in cluster f68652439e3f8f2a
    2017-05-24 00:06:03.984177 I | raft: 6a5871dbdd12c17c became follower at term 0
    2017-05-24 00:06:03.984194 I | raft: newRaft 6a5871dbdd12c17c [peers: [], term: 0, commit: 0, applied: 0, lastindex: 0, lastterm: 0]
    2017-05-24 00:06:03.984198 I | raft: 6a5871dbdd12c17c became follower at term 1
    2017-05-24 00:06:03.984315 I | etcdserver: starting server... [version: 2.2.1, cluster version: to_be_decided]
    2017-05-24 00:06:03.997533 N | etcdserver: added local member 6a5871dbdd12c17c [http://localhost:2380 http://localhost:7001] to cluster f68652439e3f8f2a
    2017-05-24 00:06:04.785143 I | raft: 6a5871dbdd12c17c is starting a new election at term 1
    2017-05-24 00:06:04.785217 I | raft: 6a5871dbdd12c17c became candidate at term 2
    2017-05-24 00:06:04.785224 I | raft: 6a5871dbdd12c17c received vote from 6a5871dbdd12c17c at term 2
    2017-05-24 00:06:04.785245 I | raft: 6a5871dbdd12c17c became leader at term 2
    2017-05-24 00:06:04.785253 I | raft: raft.node: 6a5871dbdd12c17c elected leader 6a5871dbdd12c17c at term 2
    2017-05-24 00:06:04.785631 I | etcdserver: setting up the initial cluster version to 2.2
    2017-05-24 00:06:04.785697 I | etcdserver: published {Name:default ClientURLs:[http://127.0.0.1:2379 http://127.0.0.1:4001]} to cluster f68652439e3f8f2a
    2017-05-24 00:06:04.839450 N | etcdserver: set the initial cluster version to 2.2
    [root@k8s-master skydns]# 

    好,dns配置完成!

  • 相关阅读:
    DELPHI中应用GoogleMap[转]
    给DBGrid添加鼠标滚动事件
    枚举和卸载消息钩子[转]
    区域性名称和标识符
    VCL 中的 Windows API 函数: AlphaBlend
    高效读书,实用阅读指南
    defaultservlethandler不生效原因,springmvc静态资源拦截方案比较
    indexOf原理,Java,javascript,python实现
    可见性是什么?(通俗易懂)
    我们一起学程序五子棋
  • 原文地址:https://www.cnblogs.com/ericnie/p/6897142.html
Copyright © 2020-2023  润新知