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
編集: kube2sky がマスターに接続できるように、ポッド内の kube-master-url を強制しました。<nil>
の利用」が問題ですよね。
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