Kubernetes-Calico节点0/1就绪



我们正在K8s env上部署Jenkins,其中1个主节点和4个工作节点使用calico网络插件,pod是在Jenkins中运行Job时创建的,但问题是主机名没有解决,Jenkins中没有错误日志,在检查pod时,主节点上的calico pod已关闭,不确定这是否是上述问题的原因。

[root@kmaster-1 ~]#  kubectl get pod calico-node-lvvx4 -n kube-system -o wide
NAME                READY   STATUS    RESTARTS   AGE   IP             NODE                                  NOMINATED NODE   READINESS GATES
calico-node-lvvx4   0/1     Running   9          9d    x0.x1.x5.x6   kmaster-1.b.x.x.com   <none>           <none>

Events:
Type     Reason     Age                       From                                          Message
----     ------     ----                      ----                                          -------
Warning  Unhealthy  107s (x34333 over 3d23h)  kubelet, kmaster-1.b.x.x.com  (combined from similar events): Readiness probe failed: calico/node is not ready: BIRD is not ready: BGP not established with 10.x1.2x.x23,10.x1.x7.x53,10.x1.1x.1x5,10.x1.2x.1x22020-04-12 08:40:48.567 [INFO][27813] health.go 156: Number of node(s) with BGP peering established = 0

10.x12x.x23,10.x1.x7.x53,10.x.1x.1x5,10.x1.2x.1x2是工作吊舱的IP,它们之间连接,因为netstat显示BGP已建立,但不与主机连接。主机上的端口179已打开,不确定BGP对等无法建立的原因,请提供建议。

Sanjay M.p.分享的内容对我有效,但我想更详细地澄清问题的原因,以及解决方案为什么有效。

首先,我正在运行一个ubuntu-env,所以Piknik共享的内容不起作用,firewalld只在centos/rhel系统上。即便如此,ufw在所有节点上都被禁用了。

我能够通过做kubectl describe pod calico-node-*****来缩小我收到的导致这个问题的确切错误。我发现calico BIRD服务无法连接到对等设备。还显示了calico节点试图用来为其BGP对等方配对的IP地址。它使用了错误的接口,从而导致了错误的ip。

为了自己定义这个问题,我的所有节点主机vm都有多个接口。如果您没有明确指定要使用哪个接口,那么calico"自动地";选择一个,不管你是否想要那个界面。

解决方案是在calico.yaml文件中构建calico覆盖网络时指定特定接口。Sanjay M.P.使用regex,如果你有不同的命名接口,它可能会起作用,然而,当我运行Ubuntu Server时,字符串";ens";为所有接口启动,因此会出现相同的问题。

我已经去掉了calico.yaml文件的大部分内容,以显示该设置的确切位置(~第675行(在那里添加设置,我还留下了calico_IPV4POOL_CIDR,因为该设置需要适当地设置为kubeadm初始化时指定的相同子网范围:

spec:
template:
spec:
containers:
- name: calico-node
image: calico/node:v3.14.2
env:
- name: CALICO_IPV4POOL_CIDR
value: "192.168.0.0/22"
- name: IP_AUTODETECTION_METHOD
value: "interface=ens224"

不幸的是,我没有找到回滚旧配置的方法,所以我只是重建了整个集群,并重新部署了calico覆盖(感谢上帝提供了VM快照(。

kubeadm初始化集群。然后运行添加了设置的kubectl create -f calico.yaml以构建覆盖网络。

确认覆盖网络正在工作

  • 运行watch -n1 kube-system get pods -o wide,然后添加节点。确保在新添加的kube节点上构建的所有花布节点都显示为";"1/1运行">
  • 下载并安装calicoctl,然后运行calicoctl node status,确保BGP使用了正确的网络

您可以在此处阅读有关IP_AUTODETECTION_METHOD的更多信息。

将以下行添加到印花布上真是太神奇了。

指定接口

- name: IP_AUTODETECTION_METHOD
value: "interface=ens."

此外,除了Sanjay M.p.,我还必须关闭防火墙。

systemctl disable --now firewalld

也许你可以以某种方式调整它,但我还没有测试过,所以我不会建议

通过防火墙cmd激活calico使用的网络接口。

最近,在使用虚拟机操作节点时,虚拟机的接口被停用,导致了同样的现象。

最新更新