{"action":"opened","issue":{"url":"https://api.github.com/repos/kubernetes/kubernetes/issues/23505","repository_url":"https://api.github.com/repos/kubernetes/kubernetes","labels_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/23505/labels{/name}","comments_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/23505/comments","events_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/23505/events","html_url":"https://github.com/kubernetes/kubernetes/issues/23505","id":143613194,"number":23505,"title":"Unable to set up SkyDNS on single node cluster","user":{"login":"tooda02","id":11247671,"avatar_url":"https://avatars.githubusercontent.com/u/11247671?v=3","gravatar_id":"","url":"https://api.github.com/users/tooda02","html_url":"https://github.com/tooda02","followers_url":"https://api.github.com/users/tooda02/followers","following_url":"https://api.github.com/users/tooda02/following{/other_user}","gists_url":"https://api.github.com/users/tooda02/gists{/gist_id}","starred_url":"https://api.github.com/users/tooda02/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tooda02/subscriptions","organizations_url":"https://api.github.com/users/tooda02/orgs","repos_url":"https://api.github.com/users/tooda02/repos","events_url":"https://api.github.com/users/tooda02/events{/privacy}","received_events_url":"https://api.github.com/users/tooda02/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2016-03-25T22:12:38Z","updated_at":"2016-03-25T22:12:38Z","closed_at":null,"body":"I'm unable to install the SkyDNS addon to a Kubernetes 1.2 single-node cluster on Centos 7 and encountering issues.  The first is that there's an apparent error in the skynet-rc.yaml file referenced by the  [documentation](https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns#how-do-i-configure-it): it's necessary to specify --validate=false when creating the replication controller, as the command otherwise gets the message:\r\n\r\n    error validating \"skydns-rc.yaml\": error validating data: [found invalid field successThreshold for v1.Probe, found invalid field failureThreshold for v1.Probe]; if you choose to ignore these errors, turn validation off with --validate=false\r\n\r\nIf I specify --validate=false, all four containers start successfully, but the kube2sky container gets terminated by heathz after about a minute:\r\n\r\n    [david@centos dns]$ kubectl --server=\"http://centos:8080\" --namespace=\"kube-system\" logs -f kube-dns-v11-t7nlb -c kube2sky\r\n    I0325 20:58:18.516905       1 kube2sky.go:462] Etcd server found: http://127.0.0.1:4001\r\n    I0325 20:58:19.518337       1 kube2sky.go:529] Using http://192.168.87.159:8080 for kubernetes master\r\n    I0325 20:58:19.518364       1 kube2sky.go:530] Using kubernetes API v1\r\n    I0325 20:58:19.518468       1 kube2sky.go:598] Waiting for service: default/kubernetes\r\n    I0325 20:58:19.533597       1 kube2sky.go:660] Successfully added DNS record for Kubernetes service.\r\n    F0325 20:59:25.698507       1 kube2sky.go:625] Received signal terminated\r\n\r\nI've determined that the termination is done by the healthz container after reporting:\r\n\r\n    2016/03/25 21:00:35 Client ip 172.17.42.1:58939 requesting /healthz probe servicing cmd nslookup kubernetes.default.svc.cluster.local 127.0.0.1 >/dev/null\r\n    2016/03/25 21:00:35 Healthz probe error: Result of last exec: nslookup: can't resolve 'kubernetes.default.svc.cluster.local', at 2016-03-25 21:00:35.608106622 +0000 UTC, error exit status 1.\r\n\r\nMy setup is that I've modified /etc/kubernetes/kubelet to include:\r\n\r\n    KUBELET_ARGS=\"--cluster-dns=10.0.0.10 --cluster-domain=cluster.local\"\r\n\r\nand used the OOB skynet-rc.yaml and skynet-svc.yaml with minimal changes for an explicit API server address and to remove Salt dependencies.  \r\n\r\nHere is the skydns-rc.yaml I used: \r\n\r\n    apiVersion: v1\r\n    kind: ReplicationController\r\n    metadata:\r\n      name: kube-dns-v11\r\n      namespace: kube-system\r\n      labels:\r\n        k8s-app: kube-dns\r\n        version: v11\r\n        kubernetes.io/cluster-service: \"true\"\r\n    spec:\r\n      replicas: 1\r\n      selector:\r\n        k8s-app: kube-dns\r\n        version: v11\r\n      template:\r\n        metadata:\r\n          labels:\r\n            k8s-app: kube-dns\r\n            version: v11\r\n            kubernetes.io/cluster-service: \"true\"\r\n        spec:\r\n          containers:\r\n          - name: etcd\r\n            image: gcr.io/google_containers/etcd-amd64:2.2.1\r\n            resources:\r\n              # TODO: Set memory limits when we've profiled the container for large\r\n              # clusters, then set request = limit to keep this container in\r\n              # guaranteed class. Currently, this container falls into the\r\n              # \"burstable\" category so the kubelet doesn't backoff from restarting it.\r\n              limits:\r\n                cpu: 100m\r\n                memory: 500Mi\r\n              requests:\r\n                cpu: 100m\r\n                memory: 50Mi\r\n            command:\r\n            - /usr/local/bin/etcd\r\n            - -data-dir\r\n            - /var/etcd/data\r\n            - -listen-client-urls\r\n            - http://127.0.0.1:2379,http://127.0.0.1:4001\r\n            - -advertise-client-urls\r\n            - http://127.0.0.1:2379,http://127.0.0.1:4001\r\n            - -initial-cluster-token\r\n            - skydns-etcd\r\n            volumeMounts:\r\n            - name: etcd-storage\r\n              mountPath: /var/etcd/data\r\n          - name: kube2sky\r\n            image: gcr.io/google_containers/kube2sky:1.14\r\n            resources:\r\n              # TODO: Set memory limits when we've profiled the container for large\r\n              # clusters, then set request = limit to keep this container in\r\n              # guaranteed class. Currently, this container falls into the\r\n              # \"burstable\" category so the kubelet doesn't backoff from restarting it.\r\n              limits:\r\n                cpu: 100m\r\n                # Kube2sky watches all pods.\r\n                memory: 200Mi\r\n              requests:\r\n                cpu: 100m\r\n                memory: 50Mi\r\n            livenessProbe:\r\n              httpGet:\r\n                path: /healthz\r\n                port: 8080\r\n                scheme: HTTP\r\n              initialDelaySeconds: 60\r\n              timeoutSeconds: 5\r\n              successThreshold: 1\r\n              failureThreshold: 5\r\n            readinessProbe:\r\n              httpGet:\r\n                path: /readiness\r\n                port: 8081\r\n                scheme: HTTP\r\n              # we poll on pod startup for the Kubernetes master service and\r\n              # only setup the /readiness HTTP server once that's available.\r\n              initialDelaySeconds: 30\r\n              timeoutSeconds: 5\r\n            args:\r\n            # command = \"/kube2sky\"\r\n            - --domain=\"cluster.local\"\r\n            - --kube-master-url=http://192.168.87.159:8080\r\n          - name: skydns\r\n            image: gcr.io/google_containers/skydns:2015-10-13-8c72f8c\r\n            resources:\r\n              # TODO: Set memory limits when we've profiled the container for large\r\n              # clusters, then set request = limit to keep this container in\r\n              # guaranteed class. Currently, this container falls into the\r\n              # \"burstable\" category so the kubelet doesn't backoff from restarting it.\r\n              limits:\r\n                cpu: 100m\r\n                memory: 200Mi\r\n              requests:\r\n                cpu: 100m\r\n                memory: 50Mi\r\n            args:\r\n            # command = \"/skydns\"\r\n            - -machines=http://127.0.0.1:4001\r\n            - -addr=0.0.0.0:53\r\n            - -ns-rotate=false\r\n            - -domain=\"cluster.local\"\r\n            ports:\r\n            - containerPort: 53\r\n              name: dns\r\n              protocol: UDP\r\n            - containerPort: 53\r\n              name: dns-tcp\r\n              protocol: TCP\r\n          - name: healthz\r\n            image: gcr.io/google_containers/exechealthz:1.0\r\n            resources:\r\n              # keep request = limit to keep this container in guaranteed class\r\n              limits:\r\n                cpu: 10m\r\n                memory: 20Mi\r\n              requests:\r\n                cpu: 10m\r\n                memory: 20Mi\r\n            args:\r\n            - -cmd=nslookup kubernetes.default.svc.cluster.local 127.0.0.1 >/dev/null\r\n            - -port=8080\r\n            ports:\r\n            - containerPort: 8080\r\n              protocol: TCP\r\n          volumes:\r\n          - name: etcd-storage\r\n            emptyDir: {}\r\n          dnsPolicy: Default  # Don't use cluster DNS.\r\n\r\nand skydns-svc.yaml:\r\n\r\n    apiVersion: v1\r\n    kind: Service\r\n    metadata:\r\n      name: kube-dns\r\n      namespace: kube-system\r\n      labels:\r\n        k8s-app: kube-dns\r\n        kubernetes.io/cluster-service: \"true\"\r\n        kubernetes.io/name: \"KubeDNS\"\r\n    spec:\r\n      selector:\r\n        k8s-app: kube-dns\r\n      clusterIP:  \"10.0.0.10\"\r\n      ports:\r\n      - name: dns\r\n        port: 53\r\n        protocol: UDP\r\n      - name: dns-tcp\r\n        port: 53\r\n        protocol: TCP\r\n"}}