我正在尝试按照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之后)
答案 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()
,尽管根据您的说明,我猜是这样。
希望这会帮助你。