Could not find valid interface matching eth0: error looking up interface eth0: route ip+net: no such

生命无罪,健康万岁,我是laity。

我曾七次鄙视自己的灵魂:

第一次,当它本可进取时,却故作谦卑;

第二次,当它在空虚时,用爱欲来填充;

第三次,在困难和容易之间,它选择了容易;

第四次,它犯了错,却借由别人也会犯错来宽慰自己;

第五次,它自由软弱,却把它认为是生命的坚韧;

第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;

第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。

异常

> [root@node1 k8s]# kubectl get pods -n kube-system
> NAME                            READY   STATUS    RESTARTS   AGE
> coredns-7f9c544f75-6lnjw        0/1     Pending   0          35m
> coredns-7f9c544f75-nng7r        0/1     Pending   0          35m
> etcd-node1                      1/1     Running   0          35m
> kube-apiserver-node1            1/1     Running   0          35m
> kube-controller-manager-node1   1/1     Running   0          35m
> kube-flannel-ds-amd64-tqtjt     0/1     Error     6          6m9s
> kube-proxy-4qgpx                1/1     Running   0          35m
> kube-scheduler-node1            1/1     Running   0          35m
>
>
> Pending: `创建 pod 时,它从Pending阶段开始。`
>
> Running: `一旦 pod 被调度并且容器已经启动,pod 就会进入Running阶段。`
>
> Error: `发送错误`

问题排查&解决

使用 kubectl get pod --all-namespaces 查询所有pod运行情况

使用 kubectl logs kube-flannel-ds-amd64-tqtjt -n kube-system 查询日志信息
在这里插入图片描述

扫描二维码关注公众号,回复: 14699379 查看本文章
I1204 22:05:27.294230       1 main.go:210] Could not find valid interface matching eth0: error looking up interface eth0: route ip+net: no such network interface
E1204 22:05:27.294353       1 main.go:234] Failed to find interface to use that matches the interfaces and/or regexes provided

go语言的主文件第210行
找不到与eth0匹配的有效接口:查找接口eth0时出错:路由ip+net:没有这样的网络接口
go语言的主文件第234行
找不到与提供的接口和/或正则表达式匹配的要使用的接口

查看当前网卡信息

cat /proc/net/dev
或者 
ifconfig -a

异常原因
因为是flannel容器报错,那就找到创建flannel网络时使用的yaml配置,发现如下段的影响:

      containers:
      - name: kube-flannel
        image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel:v0.10.0-amd64
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=ens33  # 这个参数决定我们使用的显卡

上面只有名为ens33的网卡名才支持。因为我新节点网卡名为eth0,所以怎么才能兼容各种网卡名呢?上面显示这个是由命令flanneld控制的,那就进入正常的kube-flannel-ds容器,查看命令帮助。
-iface value-iface-regex value可以指定网卡。为了兼容2种网卡yaml配置中这段我修改成了如下配置:

      containers:
      - name: kube-flannel
        image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel:v0.10.0-amd64
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=eth0
        - --iface=ens33
        #- --iface-regex=eth*|ens*

如果有多网卡网络,flannel最好是指定通信网卡,越精确越好,否则不指定它则使用默认路由的网卡通信。

修改后,删除原来的pod 重新create
完美解决

[root@node1 k8s]# kubectl get pods -n kube-system
NAME                            READY   STATUS    RESTARTS   AGE
coredns-7f9c544f75-6lnjw        0/1     Pending   0          80m
coredns-7f9c544f75-nng7r        0/1     Pending   0          80m
etcd-node1                      1/1     Running   0          80m
kube-apiserver-node1            1/1     Running   0          80m
kube-controller-manager-node1   1/1     Running   0          80m
kube-flannel-ds-amd64-g522f     1/1     Running   0          112s
kube-proxy-4qgpx                1/1     Running   0          80m
kube-scheduler-node1            1/1     Running   0          80m

个人经验仅供参考~

猜你喜欢

转载自blog.csdn.net/duyun0/article/details/128229874