Создание kube-dns ConfigMap в пространстве имен kube-system в новом кластере Kubernetes 1.6

Я пытаюсь следовать примеру это сообщение в блоге, чтобы снабдить мои модули вышестоящими DNS-серверами.

Я создал новый кластер GKE в us-east1-d (где версия 1.6.0 доступна согласно записи от 4 апреля здесь).

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.0", GitCommit:"fff5156092b56e6bd60fff75aad4dc9de6b6ef37", GitTreeState:"clean", BuildDate:"2017-03-28T16:36:33Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.0", GitCommit:"fff5156092b56e6bd60fff75aad4dc9de6b6ef37", GitTreeState:"clean", BuildDate:"2017-03-28T16:24:30Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}

Затем я определил ConfigMap в следующем файле YAML, kube-dns-cm.yml:

 apiVersion: v1
 kind: ConfigMap
 metadata:
   name: kube-dns
   namespace: kube-system
 data:
   upstreamNameservers: |
     ["1.2.3.4"]

Когда я пытаюсь создать ConfigMap, мне говорят, что он уже существует:

$ kubectl create -f kube-dns-cm.yml
Error from server (AlreadyExists): error when creating "kube-dns-cm.yml": configmaps "kube-dns" already exists

Я попытался удалить существующий ConfigMap и заменить его своим, но когда я впоследствии создал модули, они, похоже, не вступили в силу (имена не разрешаются, как я надеялся). Есть ли в истории что-то большее, чем описано в сообщении в блоге (например, перезапуск службы kube-dns или модулей)? Спасибо!

РЕДАКТИРОВАТЬ: удаление и воссоздание ConfigMap на самом деле действительно работает, но не совсем так, как я надеялся. Мой реестр докеров находится в частной (корпоративной) сети, и для разрешения имени реестра требуются вышестоящие серверы имен. Поэтому я не могу использовать DNS-имя реестра в моем файле pod yaml, но модули, созданные из этого файла yaml, будут иметь желаемое разрешение DNS (после замены ConfigMap)


person Adam Robbins-Pianka    schedule 05.04.2017    source источник


Ответы (3)


По моему опыту с ConfigMap, когда я обновляю его, изменения, похоже, не отражаются на работающем модуле, который использует ConfigMap.

Поэтому, когда я удаляю модуль и когда он снова появляется, он показывает последнюю ConfigMap.

Поэтому я предлагаю попробовать перезапустить модуль kube-dns, который, похоже, использует созданный вами ConfigMap.

person surajd    schedule 11.04.2017

Я считаю, что ваша ConfigMap конфигурация верна, а вам действительно нужно перезапустить kube-dns.

Поскольку ConfigMap вводится в модуль либо env парами, либо томами (kube-dns используют том), вам необходимо перезапустить целевой модуль (здесь я имею в виду все kube-dns модули), чтобы он вступил в силу.

Другое предложение состоит в том, что из вашего описания вы хотите, чтобы этот восходящий DNS помогал вам получить доступ к вашему реестру докеров, который находится в частной сети, тогда я предлагаю вам попробовать stubDomains в этом сообщение, которое вы упомянули.

И самое важное, вам нужно проверить, что dnsPolicy установлен на ClusterFirst, хотя, судя по вашему описанию, это так.

Надеюсь, это поможет вам.

person Crazykev    schedule 12.04.2017

kube-dns pod применен с последними изменениями configMap после его перезапуска. Но все еще есть аналогичная проблема.

Проверить журналы с помощью kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c dnsmasq

kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c kubedns

Пытался изменить значение --cluster-dns на IP-адрес сервера имен хостов, который уже подключается для меня как к внутренней, так и к внешней сети. Перезапустил сервис kubelet, чтобы изменения вступили в силу.

Environment="KUBELET_DNS_ARGS=**--cluster-dns=<<your-nameserver-resolver>>** --cluster-domain=cluster.local" in /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

Это работает !!! Теперь контейнеры могут подключаться к внешней сети.

person Jeyanthi    schedule 12.04.2017