Kubernetes Kubelet说DNS没有设置MissingMonterDNS(SkyDNS)[关闭]

ecbunoof  于 12个月前  发布在  Kubernetes
关注(0)|答案(3)|浏览(186)

**已关闭。**此问题为not about programming or software development。目前不接受回答。

此问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为此问题与another Stack Exchange site的主题相关,可以发表评论,说明在何处可以回答此问题。
17天前关闭
Improve this question
我已经在3个minons/master(1个master/minion,2个minions)上安装了Kubernetes 1.2.4,并安装了SkyDNS插件。在修复SSL证书问题后,我知道SkyDNS工作正常。但kubernetes仍然说我没有设置cluster-dns和cluster-domain。
(see底部编辑)
你可以看到--cluster-dns=192.168.0.10 --cluster-domain=cluster.local

ps ax | grep kubelet
18717 ?        Ssl    0:04 /opt/kubernetes/bin/kubelet --logtostderr=true --v=0 --address=0.0.0.0 --port=10250 --hostname-override=k8s-minion-1 --api-servers=http://k8s-master:8080 --allow-privileged=false  --cluster-dns=192.168.0.10 --cluster-domain=cluster.local

字符串
启动此pod:

apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - image: busybox
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
    name: busybox
  restartPolicy: Always


我看到:

kubectl describe pod busybox
7m      7m      2   {kubelet k8s-master.XXX}                    Warning     MissingClusterDNS   kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy.


我之前重启了kubelete服务来启动这个pod,我没有其他pod在运行。
如果我使用“--dns”选项启动Docker容器:

docker run --rm -it --dns 192.168.0.10 busybox nslookup cluster.local
Server:    192.168.0.10
Address 1: 192.168.0.10

Name:      cluster.local
Address 1: 192.168.0.10
Address 2: 172.16.50.2
Address 3: 192.168.0.1
Address 4: 172.16.96.3

docker run --rm -it --dns 192.168.0.10 busybox cat /etc/resolv.conf
search XXX YYYY 
nameserver 192.168.0.10


这是绝对正常的(我已经隐藏了我的客户端DNS)
但豆荚还说了别的:

kubectl exec busybox -- nslookup cluster.local
Server:    XXX.YYY.XXX.YYY
Address 1: XXX.YYYY.XXXX.YYY XXX.domain.fr

nslookup: can't resolve 'cluster.local'
error: error executing remote command: Error executing command in container: Error executing in Docker Container: 1


我尝试将“--dns”选项设置为docker守护进程,但错误是相同的。
看看这些日志:

kubectl get  pods --namespace=kube-system
NAME                 READY     STATUS    RESTARTS   AGE
kube-dns-v11-osikn   4/4       Running   0          13m


还有:

kubectl logs kube-dns-v11-osikn kube2sky --namespace=kube-system
I0621 15:44:48.168080       1 kube2sky.go:462] Etcd server found: http://127.0.0.1:4001
I0621 15:44:49.170404       1 kube2sky.go:529] Using https://192.168.0.1:443 for kubernetes master
I0621 15:44:49.170422       1 kube2sky.go:530] Using kubernetes API <nil>
I0621 15:44:49.170823       1 kube2sky.go:598] Waiting for service: default/kubernetes
I0621 15:44:49.209691       1 kube2sky.go:660] Successfully added DNS record for Kubernetes service.


“使用kubernetes API <nil>“是一个问题,不是吗?编辑:我在pod中强制kube-master-url,让kube 2sky联系master。

kubectl logs kube-dns-v11-osikn skydns --namespace=kube-system
2016/06/21 15:44:50 skydns: falling back to default configuration, could not read from etcd: 100: Key not found (/skydns/config) [10]
2016/06/21 15:44:50 skydns: ready for queries on cluster.local. for tcp://0.0.0.0:53 [rcache 0]
2016/06/21 15:44:50 skydns: ready for queries on cluster.local. for udp://0.0.0.0:53 [rcache 0]


也要注意这一点:

kubectl get pods --all-namespaces 
NAMESPACE     NAME                 READY     STATUS    RESTARTS   AGE
default       busybox              1/1       Running   0          17m
kube-system   kube-dns-v11-osikn   4/4       Running   0          18m


所以我对skydns没有意见。
我确定这个问题来自kubelet,我尝试删除/var/lib/kubelet并重新启动整个集群。我也尝试在安装dns之前和之后重新启动kubelete服务。我更改了docker配置,删除了“--dns”选项后,我得到了相同的行为:Docker + dns正常,Kubelet给出了MissingMonterDNS错误,说kubelet没有配置的集群dns。
所以请...帮帮忙(再一次:))
编辑:-现在kube 2sky没有抱怨<nil> API版本强制kube 2sky选项-我可以强制nslookup使用我的天空DNS:

kubectl exec busybox -- nslookup kubernetes.default.svc.cluster.local 192.168.0.10
Server:    192.168.0.10
Address 1: 192.168.0.10

Name:      kubernetes.default.svc.cluster.local
Address 1: 192.168.0.1


但是在创建pod时仍然会出现“MissingclusterDNS”错误,好像kubelet没有设置启动选项“--cluster-dns”和“--cluster-domain”一样。
@布兰登·伯恩斯:

kubectl get services --namespace=kube-system
NAME       CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
kube-dns   192.168.0.10   <none>        53/UDP,53/TCP   12m

mkh04yzy

mkh04yzy1#

我终于解决了我的问题......为我感到羞耻(或不)。
我已经采取了kubelet的来源,以了解发生了什么,现在我发现。
在“kubelet”文件中,我设置:

KUBE_ARGS="--cluster-dns=10.10.0.10 --cluster-domain=cluster.local"

字符串
我在源代码中添加的日志说,“cluster-dns”选项为这个值:

10.10.0.10 --cluster-domain=cluster.local


这主要是因为配置文件被SystemD解释为“bash environment vars”,所以KUBE_ARGS是“一个参数”,并且它被kubelet服务解析得很糟糕。
解决方案是将变量一分为二,并将kubelet.service文件更改为使用vars。调用systemctl daemon-reload; systemctl restart kubelet后,一切正常。
我在这里提出了一个问题:https://github.com/kubernetes/kubernetes/issues/27722在这里我解释了示例配置文件中的注解是模糊的和/或参数没有按预期进行解析。

gfttwv5a

gfttwv5a2#

您是否使用正确的IP地址创建了DNS服务?
kubectl get services --namespace=kube-system是什么意思

dpiehjr4

dpiehjr43#

如果您使用microk8s
1.使用microk8s status检查microk8s服务状态:

ubuntu@staging-1:~$ microk8s status
microk8s is running
dns: disabled
...

字符串
1.使用microk8s enable dns:x.x.x.x启用dns服务

相关问题