2016-03-25 11 views
5

Я пытаюсь настроить поддержку DNS в Kubernetes 1.2 на Centos 7. Согласно documentation, есть два способа сделать это. Первый относится к «поддерживаемому kubernetes установке кластера» и включает в себя установку переменных окружения:Ошибка Kubernetes DNS в Kubernetes 1.2

ENABLE_CLUSTER_DNS="${KUBE_ENABLE_CLUSTER_DNS:-true}" 
DNS_SERVER_IP="10.0.0.10" 
DNS_DOMAIN="cluster.local" 
DNS_REPLICAS=1 

Я добавил эти настройки в/и т.д./kubernetes/конфигурацию и перезагрузками, без эффекта, так как я не имею поддерживаемая настройка кластера kubernetes (что это?), или есть что-то еще, требуемое для установки его среды.

Второй подход требует более ручной настройки. Он добавляет два флага kubelets, которые я установил, обновляя/и т.д./kubernetes/kubelet включать:

KUBELET_ARGS="--cluster-dns=10.0.0.10 --cluster-domain=cluster.local" 

и перезапуска kubelet с systemctl restart kubelet. Затем необходимо запустить контроллер репликации и службу. В приведенной выше документации doc содержится несколько файлов шаблонов для этого, которые требуют некоторого редактирования, как для локальных изменений (мой сервер API Kubernetes прослушивает фактический IP-адрес имени хоста, а не 127.0.0.1, что делает необходимым добавить - kube-master-url) и удалить некоторые зависимости Salt. Когда я делаю это, контроллер репликации начинает четыре контейнера успешно, но контейнер kube2sky получает прекращается примерно через минуту после завершения инициализации:

[[email protected] dns]$ kubectl --server="http://centos:8080" --namespace="kube-system" logs -f kube-dns-v11-t7nlb -c kube2sky 
I0325 20:58:18.516905  1 kube2sky.go:462] Etcd server found: http://127.0.0.1:4001 
I0325 20:58:19.518337  1 kube2sky.go:529] Using http://192.168.87.159:8080 for kubernetes master 
I0325 20:58:19.518364  1 kube2sky.go:530] Using kubernetes API v1 
I0325 20:58:19.518468  1 kube2sky.go:598] Waiting for service: default/kubernetes 
I0325 20:58:19.533597  1 kube2sky.go:660] Successfully added DNS record for Kubernetes service. 
F0325 20:59:25.698507  1 kube2sky.go:625] Received signal terminated 

Я определил, что прекращение осуществляется контейнером healthz после сообщения:

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 
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 

Помимо этого, все остальные журналы выглядят нормально. Однако, есть одна аномалия: это было необходимо указать --validate = ложь при создании контроллера репликации, поскольку команда в противном случае получает сообщение:

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 

Может ли это быть связано? Эти аргументы приводятся непосредственно в документации Kubernetes. если нет, что нужно для этого?

Вот skydns-rc.yaml я использовал:

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: 
      # TODO: Set memory limits when we've profiled the container for large 
      # clusters, then set request = limit to keep this container in 
      # guaranteed class. Currently, this container falls into the 
      # "burstable" category so the kubelet doesn't backoff from restarting it. 
      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 
     image: gcr.io/google_containers/kube2sky:1.14 
     resources: 
      # TODO: Set memory limits when we've profiled the container for large 
      # clusters, then set request = limit to keep this container in 
      # guaranteed class. Currently, this container falls into the 
      # "burstable" category so the kubelet doesn't backoff from restarting it. 
      limits: 
      cpu: 100m 
      # Kube2sky watches all pods. 
      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: 8081 
      scheme: HTTP 
      # we poll on pod startup for the Kubernetes master service and 
      # only setup the /readiness HTTP server once that's available. 
      initialDelaySeconds: 30 
      timeoutSeconds: 5 
     args: 
     # command = "/kube2sky" 
     - --domain="cluster.local" 
     - --kube-master-url=http://192.168.87.159:8080 
     - name: skydns 
     image: gcr.io/google_containers/skydns:2015-10-13-8c72f8c 
     resources: 
      # TODO: Set memory limits when we've profiled the container for large 
      # clusters, then set request = limit to keep this container in 
      # guaranteed class. Currently, this container falls into the 
      # "burstable" category so the kubelet doesn't backoff from restarting it. 
      limits: 
      cpu: 100m 
      memory: 200Mi 
      requests: 
      cpu: 100m 
      memory: 50Mi 
     args: 
     # command = "/skydns" 
     - -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: 
      # keep request = limit to keep this container in guaranteed class 
      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 # Don't use cluster DNS. 

и skydns-svc.yaml:

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.0.0.10" 
    ports: 
    - name: dns 
    port: 53 
    protocol: UDP 
    - name: dns-tcp 
    port: 53 
    protocol: TCP 

ответ

1

Я просто закомментировать строки, которые содержат значения successThreshold и failureThreshold в skydns-rc.yaml, затем повторно запустите команды kubectl.

kubectl create -f skydns-rc.yaml 
kubectl create -f skydns-svc.yaml 
+0

Спасибо за предложение. К сожалению, это не имело значения. –

+1

Какова ценность SERVICE_CLUSTER_IP_RANGE? Убедитесь, что ваш IP-адрес DNS находится в той же сети, что и указанное вами значение. – ovidiu

+0

В этом была проблема! Благодарю. –