12

我有 2 个虚拟机节点。两者都可以通过主机名(通过 /etc/hosts)或通过 IP 地址看到对方。其中一个已将 kubeadm 配置为 master。另一个作为工作节点。按照说明(http://kubernetes.io/docs/getting-started-guides/kubeadm/),我添加了 weave-net。pod 列表如下所示:

vagrant@vm-master:~$ kubectl get pods --all-namespaces
NAMESPACE     NAME                                    READY     STATUS             RESTARTS   AGE
kube-system   etcd-vm-master                          1/1       Running            0          3m
kube-system   kube-apiserver-vm-master                1/1       Running            0          5m
kube-system   kube-controller-manager-vm-master       1/1       Running            0          4m
kube-system   kube-discovery-982812725-x2j8y          1/1       Running            0          4m
kube-system   kube-dns-2247936740-5pu0l               3/3       Running            0          4m
kube-system   kube-proxy-amd64-ail86                  1/1       Running            0          4m
kube-system   kube-proxy-amd64-oxxnc                  1/1       Running            0          2m
kube-system   kube-scheduler-vm-master                1/1       Running            0          4m
kube-system   kubernetes-dashboard-1655269645-0swts   1/1       Running            0          4m
kube-system   weave-net-7euqt                         2/2       Running            0          4m
kube-system   weave-net-baao6                         1/2       CrashLoopBackOff   2          2m

CrashLoopBackOff 出现在每个连接的工作节点上。我花了好几个时间玩网络接口,但网络似乎很好。我发现了类似的问题,其中的答案建议查看日志并且没有跟进。所以,这里是日志:

vagrant@vm-master:~$ kubectl logs weave-net-baao6 -c weave --namespace=kube-system
2016-10-05 10:48:01.350290 I | error contacting APIServer: Get https://100.64.0.1:443/api/v1/nodes: dial tcp 100.64.0.1:443: getsockopt: connection refused; trying with blank env vars
2016-10-05 10:48:01.351122 I | error contacting APIServer: Get http://localhost:8080/api: dial tcp [::1]:8080: getsockopt: connection refused
Failed to get peers

我做错了什么?从那里去哪里?

4

4 回答 4

12

I ran in the same issue too. It seems weaver wants to connect to the Kubernetes Cluster IP address, which is virtual. Just run this to find the cluster ip: kubectl get svc. It should give you something like this:

$ kubectl get svc
NAME                     CLUSTER-IP        EXTERNAL-IP   PORT(S)   AGE
kubernetes               100.64.0.1       <none>        443/TCP   2d

Weaver picks up this IP and tries to connect to it, but worker nodes does not know anything about it. Simple route will solve this issue. On all your worker nodes, execute:

route add 100.64.0.1 gw <your real master IP>
于 2016-10-31T07:57:05.107 回答
2

最常见的原因可能是: - 存在防火墙(例如firewalld在 CentOS 上) - 网络配置(例如 VirtualBox 上的默认 NAT 接口)

目前kubeadm仍然是 alpha,这是许多 alpha 测试人员已经报告的问题之一。我们正在研究通过记录最常见的问题来解决此问题,此类文档将在接近 beta 版本时准备好。

就存在一个适用于 Ubunutu 和 CentOS 参考实现的 VirtualBox+Vargant+Ansible,它为防火墙、SELinux 和 VirtualBox NAT 问题提供解决方案。

于 2016-11-01T13:38:53.500 回答
2

单节点设置也会发生这种情况。我尝试了几件事,例如重新应用配置和重新创建,但目前最稳定的方法是执行完全拆除(如文档中所述)并重新启动集群。

我使用这些脚本重新启动集群:

下.sh

#!/bin/bash

systemctl stop kubelet;
docker rm -f -v $(docker ps -q);
find /var/lib/kubelet | xargs -n 1 findmnt -n -t tmpfs -o TARGET -T | uniq | xargs -r umount -v;
rm -r -f /etc/kubernetes /var/lib/kubelet /var/lib/etcd;

up.sh

#!/bin/bash

systemctl start kubelet
kubeadm init
# kubectl taint nodes --all dedicated- # single node!
kubectl create -f https://git.io/weave-kube

编辑:如果这是与编织相关的问题,我也会尝试其他 Pod 网络,例如 Calico

于 2016-10-28T22:47:46.660 回答
0

/usr/local/bin/weave 重置

对我来说是修复 - 希望它有用 - 是的,确保 selinux 设置为禁用并且 firewalld 没有运行(在 redhat / centos 上)版本

kube-system weave-net-2vlvj 2/2 运行 3 11d
kube-system weave-net-42k6p 1/2 运行 3 11d
kube-system weave-net-wvsk5 2/2 运行 3 11d

于 2018-09-26T18:21:04.207 回答