在新的Kubernetes 1.6集群上的kube-system命名空间中创建kube-dns ConfigMap

时间:2017-04-05 19:35:58

标签: kubernetes google-kubernetes-engine kube-dns

我正在尝试按照this blog post中的示例为我的pod提供上游DNS服务器。

我在us-east1-d创建了一个新的GKE集群(根据4月4日的条目here,1.6.0可用。)

$ 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"}

我然后在以下YAML文件中定义了一个ConfigMap,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并将其替换为我自己的,但是当我随后创建pod时,它们似乎没有生效(名称没有像我希望的那样得到解决)。故事中的内容是否比博客文章中解释的更多(例如,重新启动kube-dns服务或pod)?谢谢!

编辑:删除并重新创建ConfigMap实际上 工作,但不完全是我希望的方式。我的docker注册表位于私有(公司)网络上,解析注册表名称需要上游名称服务器。所以我不能在我的pod yaml文件中使用注册表的DNS名称,但是从该yaml文件创建的pod将具有所需的DNS解析(在替换ConfigMap之后)

3 个答案:

答案 0 :(得分:1)

根据我ConfigMap的经验,当我更新它时,更改似乎并未反映在使用ConfigMap的正在运行的广告连播中。

因此,当我删除pod时,当pod再次出现时,它会显示最新的ConfigMap

因此我建议尝试重新启动kube-dns窗格,这似乎使用了您创建的ConfigMap

答案 1 :(得分:1)

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值更改为主机服务器" nameserver" ip已经为我连接了内部和外部网络。重新启动的kubelet服务以使更改生效。

环境=" KUBELET_DNS_ARGS = - cluster-dns =<> --cluster-domain = cluster.local" in" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf"

那很有效!现在容器能够连接外部网络。

答案 2 :(得分:1)

我相信您的ConfigMap配置是正确的,而确实需要重启kube-dns

由于ConfigMap对或env对(kube-dns使用音量)将kube-dns注入广告连播,您需要重新启动目标广告连播(此处我的意思是所有< / strong> stubDomains pod)使其生效。

另一个建议是,根据您的描述,您只希望此上游DNS帮助您访问私有网络中的docker注册表,然后我建议您可以尝试post you referred中的dnsPolicy

最重要,您需要检查ClusterFirst是否设置为if __name__ == '__main__': p = Process(target=insert_A, args=(ARG,)) q = Process(target=insert_measurement_real, args=(ARG,)) p.start() q.start() p.join() q.join() ,尽管根据您的说明,我猜是这样。

希望这会帮助你。