安裝 Flannel 報錯:network plugin is not ready: cni config uninitialized

本次部署 Kubernetes 1.13.3 版本,使用 kubeadm 方式進行部署,當部署 Flannel 網絡時出現如下報錯:

[root@k8s-master01 ~]# journalctl -fu kubelet
7月 09 10:19:56 k8s-master01 kubelet[41802]: W0709 10:19:56.859190   41802 cni.go:203] Unable to update cni config: No networks found in /etc/cni/net.d
7月 09 10:19:56 k8s-master01 kubelet[41802]: E0709 10:19:56.859282   41802 kubelet.go:2192] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
7月 09 10:20:01 k8s-master01 kubelet[41802]: W0709 10:20:01.870056   41802 cni.go:203] Unable to update cni config: No networks found in /etc/cni/net.d
7月 09 10:20:01 k8s-master01 kubelet[41802]: E0709 10:20:01.870357   41802 kubelet.go:2192] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
...

安裝 Flannel 命令如下:

[root@k8s-master01 ]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

創建kube-flannel.yml配置文件後,發現並沒有拉取 flannel 相關鏡像

image-20210709103817205

也沒有 flannel 相關的 pod 被創建

image-20210709104041793

通過日誌拋出的信息 “network plugin is not ready: cni config uninitialized” 來看,認爲是 init coredns 引起的,而不是 init flannel 。

解決方法:

不能直接使用上面的命令來安裝 Flannel ,可能是版本問題導致,則使用如下命令來安裝 Flannel。

[root@k8s-master01 ~]# kubectl -n kube-system apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml

image-20210709105104040

可以看到 flannelPod 已經被創建了,但是發現 coredns 和 flannel 狀態都沒成功

image-20210709105149016

接下來重置 coredns pod 試試

image-20210709105331728

發現還是不行,查看 kube-flannel-ds-amd64 日誌

[root@k8s-master01 ~]# kubectl -n kube-system logs kube-flannel-ds-amd64-62pl7
Error from server (BadRequest): container "kube-flannel" in pod "kube-flannel-ds-amd64-62pl7" is waitin

查看 kube-flannel-ds-amd64 詳細信息

[root@k8s-master01 ~]# kubectl describe pod kube-flannel-ds-amd64-62pl7 -n kube-system
....
Events:
  Type    Reason     Age    From                   Message
  ----    ------     ----   ----                   -------
  Normal  Scheduled  3m32s  default-scheduler      Successfully assigned kube-system/kube-flannel-ds-amd64-62pl7 to k8s-master01
  Normal  Pulling    3m30s  kubelet, k8s-master01  pulling image "quay.io/coreos/flannel:v0.10.0-amd64"
  Normal  Pulled     29s    kubelet, k8s-master01  Successfully pulled image "quay.io/coreos/flannel:v0.10.0-amd64"
  Normal  Created    29s    kubelet, k8s-master01  Created container
  Normal  Started    28s    kubelet, k8s-master01  Started container
  Normal  Pulled     27s    kubelet, k8s-master01  Container image "quay.io/coreos/flannel:v0.10.0-amd64" already present on machine
  Normal  Created    27s    kubelet, k8s-master01  Created container
  Normal  Started    27s    kubelet, k8s-master01  Started container

參考了這個博客說要關閉 Swap 的限制,鏈接:https://blog.csdn.net/wzygis/article/details/91366441

具體配置添加如下:

[root@k8s-master01 ~]# cat /etc/sysconfig/kubelet 
KUBELET_EXTRA_ARGS="--fail-swap-on=false"

但是我之前部署的 1.21.1 版本沒有添加這個配置信息也是沒問題的,可能是版本問題導致的。

image-20210709110626962

最後查看節點和 Pod 狀態,都已經 Running

image-20210709111745730

最後總結:

此次部署 Kubernetes 不是最新版本而是 1.13.3 低版本,主要有兩個問題導致 flannel 網絡無法安裝成功。

第一,由於版本原因,我直接使用之前部署的 Flannel YAML 鏈接來部署,導致最新的 Flannel 版本不匹配 1.13.3 版本的 K8s,所以創建的時候是顯示成功的,但是相關的 Pod 和鏡像都沒有創建。

第二、使用匹配的 Flannel 版本後,由於 kubernetes 1.13.3 KUBELET_EXTRA_ARGS=默認是空的,所以需要添加關閉 Swap 的限制配置。

具體安裝步驟可以參考【二】Kubernetes 集羣部署-kubeadm方式(親測)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章