最近公司的項目用到了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轉移到了其他機器上,問題就很好的解決了