首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Kube无法检索节点信息无效的nodeIP

Kube无法检索节点信息无效的nodeIP
EN

Stack Overflow用户
提问于 2017-06-15 08:59:31
回答 1查看 2K关注 0票数 0

几个月以来,我一直在尝试建立一个Kubernetes集群,但是到目前为止我还没有运气。

我正试图在4台裸金属PC上安装它,运行coreOS。我刚刚重新安装了所有的东西,但是我遇到了和以前一样的问题。我正在学习教程。我认为我已经正确地配置了一切,但不是100%的肯定。当我重新启动任何一台机器时,kubelet和flanneld服务都在运行,但是在使用systemctl status检查服务状态时,我会看到下面的错误

kubelet错误: Process: 1246 ExecStartPre=/usr/bin/rkt rm --uuid-file=/var/run/kubelet-pod.uuid (code=exited, status=254)

法兰误差Process: 1057 ExecStartPre=/usr/bin/rkt rm --uuid-file=/var/lib/coreos/flannel-wrapper.uuid (code=exited, status=254)

如果我重新启动这两个服务,它们就可以工作,或者至少看起来它们可以工作--我没有错误。

其他一切看起来都很好,所以剩下的唯一问题(我认为)是所有节点上的kube代理服务。

如果我运行kubectl get pods,我会看到所有的吊舱都在运行:

代码语言:javascript
运行
复制
$ kubectl get pods
NAME                                   READY     STATUS    RESTARTS   AGE
kube-apiserver-kubernetes-4            1/1       Running   4          6m
kube-controller-manager-kubernetes-4   1/1       Running   6          6m
kube-proxy-kubernetes-1                1/1       Running   4          18h
kube-proxy-kubernetes-2                1/1       Running   5          26m
kube-proxy-kubernetes-3                1/1       Running   4          19m
kube-proxy-kubernetes-4                1/1       Running   4          18h
kube-scheduler-kubernetes-4            1/1       Running   6          18h

这个问题的答案建议检查kubectl get node是否返回在kubelet上注册的相同名称。就我检查日志而言,节点是正确注册的,这是kubectl get node的输出

代码语言:javascript
运行
复制
$ kubectl get node
NAME           STATUS                        AGE       VERSION
kubernetes-1   Ready                         18h       v1.6.1+coreos.0
kubernetes-2   Ready                         36m       v1.6.1+coreos.0
kubernetes-3   Ready                         29m       v1.6.1+coreos.0
kubernetes-4   Ready,SchedulingDisabled      18h       v1.6.1+coreos.0

我使用过的教程(链接)建议我使用--hostname-override,但是如果我试图在本地压缩主节点(kubernetes-4),就无法获得节点信息。所以我删除了它,现在我可以正常地获取节点信息了。

有人建议这可能是法兰绒的问题,我应该检查法兰绒的端口。使用netstat -lntu,我得到了以下输出:

代码语言:javascript
运行
复制
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:2379          0.0.0.0:*               LISTEN     
tcp        0      0 MASTER_IP:2379          0.0.0.0:*               LISTEN     
tcp        0      0 MASTER_IP:2380          0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN     
tcp6       0      0 :::4194                 :::*                    LISTEN     
tcp6       0      0 :::10250                :::*                    LISTEN     
tcp6       0      0 :::10251                :::*                    LISTEN     
tcp6       0      0 :::10252                :::*                    LISTEN     
tcp6       0      0 :::10255                :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 :::443                  :::*                    LISTEN     
udp        0      0 0.0.0.0:8472            0.0.0.0:*                     

所以我想港口没问题吧?

同样,etcd2工作,etcdctl cluster-health显示所有节点都是健康的。

这是云配置的一部分,它在重新启动时启动etcd2,此外,我只在其中存储ssh键和节点用户名/密码/组:

代码语言:javascript
运行
复制
#cloud-config

coreos:
  etcd2:
    name: "kubernetes-4"
    initial-advertise-peer-urls: "http://NODE_IP:2380"
    listen-peer-urls: "http://NODE_IP:2380"
    listen-client-urls: "http://NODE_IP,http://127.0.0.1:2379"
    advertise-client-urls: "http://NODE_IP:2379"
    initial-cluster-token: "etcd-cluster-1"
    initial-cluster: "kubernetes-4=http://MASTER_IP:2380,kubernetes-1=http://WORKER_1_IP:2380,kubernetes-2=http://WORKER_2_IP:2380,kubernetes-3=http://WORKER_3_IP:2380"
    initial-cluster-state: "new"
  units:
    - name: etcd2.service
      command: start

这是/etc/flannel/options.env文件的内容:

代码语言:javascript
运行
复制
FLANNELD_IFACE=NODE_IP
FLANNELD_ETCD_ENDPOINTS=http://MASTER_IP:2379,http://WORKER_1_IP:2379,http://WORKER_2_IP:2379,http://WORKER_3_IP:2379

相同的端点在--etcd-servers文件中的kube-apiserver.yaml文件中。

有什么想法/建议有什么问题吗?此外,如果有一些细节遗漏,让我知道,我会把他们添加到邮政。

编辑:,我忘了包含kube日志。

主节点kube-代理日志:

代码语言:javascript
运行
复制
$ kubectl logs kube-proxy-kubernetes-4
I0615 07:47:45.250631       1 server.go:225] Using iptables Proxier.
W0615 07:47:45.286923       1 server.go:469] Failed to retrieve node info: Get http://127.0.0.1:8080/api/v1/nodes/kubernetes-4: dial tcp 127.0.0.1:8080: getsockopt: connection refused
W0615 07:47:45.303576       1 proxier.go:304] invalid nodeIP, initializing kube-proxy with 127.0.0.1 as nodeIP
W0615 07:47:45.303593       1 proxier.go:309] clusterCIDR not specified, unable to distinguish between internal and external traffic
I0615 07:47:45.303646       1 server.go:249] Tearing down userspace rules.
E0615 07:47:45.357276       1 reflector.go:201] k8s.io/kubernetes/pkg/proxy/config/api.go:49: Failed to list *api.Endpoints: Get http://127.0.0.1:8080/api/v1/endpoints?resourceVersion=0: dial tcp 127.0.0.1:8080: getsockopt: connection refused
E0615 07:47:45.357278       1 reflector.go:201] k8s.io/kubernetes/pkg/proxy/config/api.go:46: Failed to list *api.Service: Get http://127.0.0.1:8080/api/v1/services?resourceVersion=0: dial tcp 127.0.0.1:8080: getsockopt: connection refused

工作节点kube-代理日志:

代码语言:javascript
运行
复制
$ kubectl logs kube-proxy-kubernetes-1
I0615 07:47:33.667025       1 server.go:225] Using iptables Proxier.
W0615 07:47:33.697387       1 server.go:469] Failed to retrieve node info: Get https://MASTER_IP/api/v1/nodes/kubernetes-1: dial tcp MASTER_IP:443: getsockopt: connection refused
W0615 07:47:33.712718       1 proxier.go:304] invalid nodeIP, initializing kube-proxy with 127.0.0.1 as nodeIP
W0615 07:47:33.712734       1 proxier.go:309] clusterCIDR not specified, unable to distinguish between internal and external traffic
I0615 07:47:33.712773       1 server.go:249] Tearing down userspace rules.
E0615 07:47:33.787122       1 reflector.go:201] k8s.io/kubernetes/pkg/proxy/config/api.go:49: Failed to list *api.Endpoints: Get https://MASTER_IP/api/v1/endpoints?resourceVersion=0: dial tcp MASTER_IP:443: getsockopt: connection refused
E0615 07:47:33.787144       1 reflector.go:201] k8s.io/kubernetes/pkg/proxy/config/api.go:46: Failed to list *api.Service: Get https://MASTER_IP/api/v1/services?resourceVersion=0: dial tcp MASTER_IP:443: getsockopt: connection refused
EN

回答 1

Stack Overflow用户

发布于 2017-07-06 01:33:27

你试过脚本这里吗?以下是您所使用的用于各种平台的教程的浓缩版本。这些脚本在k8s v1.6.4的裸金属上非常适合我。我有一个加密更好的修改后的脚本

kube-apiserver没有运行,这解释了错误dial tcp 127.0.0.1:8080: getsockopt: connection refused。在调试kube-apiserver时,我会在节点中这样做:

  1. 删除/etc/kubernetes/manifests/kube-apiserver.yaml
  2. 手动运行hyperkube容器。根据您的配置,您将不得不挂载额外的卷(即。( -v)向容器公开文件。将图像版本更新为您使用的版本。 docker run --net=host -it -v /etc/kubernetes/ssl:/etc/kubernetes/ssl quay.io/coreos/hyperkube:v1.6.2_coreos.0
  3. 上面的命令将在hyperkube容器中启动一个shell。现在,使用kube-apiserver清单中的标志启动kube-apiserver.yaml。它应该类似于下面的示例: /hyperkube apiserver \ --bind-address=0.0.0.0 \ --etcd-cafile=/etc/kubernetes/ssl/apiserver/ca.pem \ --etcd-certfile=/etc/kubernetes/ssl/apiserver/client.pem \ --etcd-keyfile=/etc/kubernetes/ssl/apiserver/client-key.pem \ --etcd-servers=https://10.246.40.20:2379,https://10.246.40.21:2379,https://10.246.40.22:2379 \ ...

在任何情况下,我建议您先拆下集群并尝试脚本。可能会很管用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44563177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档