2016-06-21 7 views
1

私は3 Minon/Master(1人のmaster/minion、2 minions)にKubernetes 1.2.4をインストールし、SkyDNSアドオンをインストールしました。 SSL証明書の問題を修正した後、私はSkyDNSが動作していることを知っています。しかし、kubeletesはまだ私はクラスタDNSとクラスタドメインを設定していないと言います。Kubernetes KubeletはMissingClusterDNS(SkyDNS)でDNSが設定されていないと言います

(下部の編集を参照してください)しかし、あなたは--cluster-dns=192.168.0.10 --cluster-domain=cluster.local見ることができます:私は見

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. 

I

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 

はこのポッドの起動レストアこのポッドを起動する前にted kubeleteサービスを実行してください。他のポッドは実行されていません。

私は "--dns" オプションを使用ドッキングウィンドウコンテナを起動した場合:

(私は私のクライアントのDNSを隠されてきた)

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 

absolutly普通のことだ。しかしポッドは何か他のもの言う:

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"オプションをドッカーデーモンに設定しようとしましたが、エラーは同じです。

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>の使用しますか"? 編集:私はkube2skyがマスターに連絡できるように、ポッドにkube-master-urlを強制しました。

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サービスを再起動しようとしました。私はドッカーの設定を変更し、あとで " - dns"オプションを削除しました。同じ動作をしています.Docker + dnsはOKです.KubeletはMissingClusterDNSにkubeletに設定済みのクラスタDNSがないというエラーを出します。

よろしくお願いします。ヘルプ(1つのより多くの時間:))


EDITS:

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 
: は - 私は私の空のDNSを使用するようにnslookupを強制することができます - 今kube2sky kube2skyオプション を強制に関する <nil> APIバージョンを文句はありません

しかし、「MissingClusterDNS」エラーがポッドの作成に残って、「--cluster-DNS」kubeletがないかのように起動オプションと「--clusterドメイン」

@Brendanバーンズ:

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 

答えて

2

私は最終的に私の問題を管理しました。私には恥ずかしがり屋です。

何が起こったのかを理解するためにkubeletのソースを取得しました。

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

そして、私はソースに追加されたログは、この値としてその "クラスタ-DNS" オプション言う: "kubelet" ファイルで

、私は設定

10.10.0.10 --cluster-domain=cluster.local 

主な理由です設定ファイルはSystemDによって "bash環境変数"として解釈されるので、KUBE_ARGSは "1つの引数"であり、kubeletサービスによってひどく解析されます。

解決策は、変数を2つに分割し、kubelet.serviceファイルを変更してvarsを使用することです。 systemctl daemon-reload; systemctl restart kubeletへの電話の後、すべては問題ありません。

ここで問題が発生しました:https://github.com/kubernetes/kubernetes/issues/27722ここでは、設定例ファイルのコメントがあいまいであり、引数が期待通りに解析されないと説明しています。

+0

同じ問題がありますが、varsを分割してkubeletサービスを再起動すると、それは私のために実行されません\ $ { KUBELET_DOMAIN} \ ' – Jonathan

+0

新しいディスカッションを開いてここにリンクできますか?私は見てみましょう。 – Metal3d

+1

私は何とか、上記の解決策でそれを修正しました。私の現在の設定は次のようになります。 'KUBELET_DNS = - cluster-dns = {{cluster_dns}} KUBELET_DOMAIN = - cluster-domain = cluster.local'問題は私が '='記号テンプレート変数 – Jonathan

0

正しいIPアドレスでDNSサービスを作成しましたか?

kubectl get services --namespace=kube-systemとは何ですか?

+0

ご覧のとおり、IPアドレスがdnsのdockerコマンドが機能します。私は今は就任していないが、明日の回答を与える。ご協力いただきありがとうございます。 – Metal3d

+0

このコマンドは正しいDNSアドレスを返します - 私はKVMの3セントでローカルにインストールを行いました。 – Metal3d

+0

コマンド出力を追加しましたが、DNS IPはOKです - 編集内容を見ることができます – Metal3d

関連する問題