1

3 つのミニオン/マスター (1 つのマスター/ミニオン、2 つのミニオン) に Kubernetes 1.2.4 をインストールし、SkyDNS アドオンをインストールしました。SSL 証明書の問題を修正した後、SkyDNS が機能していることがわかります。しかし、kubeletes は、まだ cluster-dns と cluster-domain を設定していないと言っています。

(下部の編集を参照)

しかし、あなたは見ることができます--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 

このポッドの起動:

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 サービスを再起動しましたが、他のポッドは実行していません。

「--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

Dockerデーモンに「--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サービスを再起動しようとしました。Docker 構成を変更し、後で「--dns」オプションを削除しましたが、同じ動作になりました: Docker + dns は問題ありません。

だからお願いします...助けてください(もう一度:))


編集: - <nil>kube2sky オプションを強制する api バージョンについて kube2sky が文句を言わなくなりました - 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

しかし、ポッドの作成時に「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
4

2 に答える 2

2

私はついに自分の問題を解決しました...恥ずかしいです(またはそうではありません)。

何が起こったのかを理解するために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 環境変数」として解釈されるため、KUBE_ARGS が「1 つの引数」であり、kubelet サービスによって正しく解析されないためです。

解決策は、変数を 2 つに分割し、kubelet.service ファイルを変更して vars を使用することです。systemctl daemon-reload; systemctl restart kubeletすべてに電話した後は大丈夫です。

ここで問題を開きました: https://github.com/kubernetes/kubernetes/issues/27722ここで、サンプル構成ファイルのコメントがあいまいである、および/または引数が期待どおりに解析されないことを説明します。

于 2016-06-23T08:32:25.403 に答える
0

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

何がkubectl get services --namespace=kube-system表示されますか?

于 2016-06-21T16:34:19.443 に答える