关于kubesphere集群calico网络组件报错的修复
最近公司的项目用到了Kubesphere,于是自己先在虚拟机上测试了一番,遇到了很多的问题,现将遇到的有关calico的问题记录一下
上一篇介绍了如何离线安装kubesphere v3.0,安装之后我发现在后台的集群管理界面看不到集群节点的监控数据:
于是我get pod查看了一下状态,发现其中calico组件没有跑起来:
然后我在通过kubectl describe命令对宕机的calico pod进行查看,发现calico establish with的ip与我的节点地址不同,这里我的节点地址都是192网段的,而这个是172网段,显然calico这个要建立通道的网卡存在错误:
于是我ifconfig查看了一下,发现存在一个虚拟网卡和这个ip对应:
我摸不到头脑于是上网查到了一篇文章和我的情况有些类似,也是calico和其他的虚拟网卡建立通道报错:
原因就是:calico没有发现实node节点实际的网卡名称
产生的缘由和解决方法
调整calicao的网络插件的网卡发现机制,修改IP_AUTODETECTION_METHOD对应的value值。下载的官方提供的yaml文件中,ip识别策略(IPDETECTMETHOD)没有配置,即默认为first-found,这会导致一个网络异常的ip作为nodeIP被注册,从而影响node之间的网络连接。可以修改成can-reach或者interface的策略,尝试连接某一个Ready的node的IP,以此选择出正确的IP
修改calicao的yaml文件,添加两行配置
- name: IP_AUTODETECTION_METHOD
value: "interface=eth1" # 根据实际网卡名称配置
[root@k8s-master yaml]# vim calico.yaml
...(3546行)
#Cluster type to identify the deployment type
- name: CLUSTER_TYPE
value: "k8s,bgp"
#新添加的配置
- name: IP_AUTODETECTION_METHOD
value: "interface=eth1"
# Auto-detect the BGP IP address.
- name: IP
value: "autodetect"
# Enable IPIP
- name: CALICO_IPV4POOL_IPIP
value: "Always"
# Enable or Disable VXLAN on the default IP pool.
- name: CALICO_IPV4POOL_VXLAN
value: "Never"
重新构建
kubectl apply -f calico.yaml
以上是比较通用的解决方法
而我因为是之前将harbor和master放在了一台虚拟机上,所有这台机器上存在一个当初创建harbor的虚拟网卡,而calico将这个网卡认作了要建立通道的网卡,因此出现了这个问题,于是我将harbor转移到了其他机器上,问题就很好的解决了