pengdott 2024-11-07 15:01 采纳率: 75%
浏览 189
已结题

K8S部署二进制集群过程中calico一直报错

  1. 参考的calico官网,安装calico过程如下:
    (1)、tigera-operator.yaml和custom-resources.yaml文件下载到服务器上

(2)、执行kubectl create -f tigera-operator.yaml,安装过程未报错

(3)、修改配置文件custom-resources.yaml,加入如下配置内容
nodeAddressAutodetectionV4:
interface: ens33
确定所有网卡是ens33

(4)、执行kubectl create -f custom-resources.yaml,安装过程未报错

(5)、查看calico相关pod,pod处于running状态

NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-6696b5fc97-hlb84   1/1     Running   0          2m33s
calico-node-28flc                          1/1     Running   0          2m34s
calico-node-p9tcg                          1/1     Running   0          2m34s
calico-typha-9f54f8447-sgpnl               1/1     Running   0          2m34s
csi-node-driver-67h28                      2/2     Running   0          2m33s
csi-node-driver-wgwvs                      2/2     Running   0          2m33s

(6)、执行7.

kubectl taint nodes --all node-role.kubernetes.io/control-plane-


```,结果如下:

```xml
taint "node-role.kubernetes.io/control-plane" not found
taint "node-role.kubernetes.io/control-plane" not found

后查看pod状态也正常

2.查看calico pod相关信息始终报错:

Normal   Pulling    27m   kubelet            Pulling image "docker.io/calico/pod2daemon-flexvol:v3.28.2"
  Normal   Scheduled  27m   default-scheduler  Successfully assigned calico-system/calico-node-rhrj9 to dk8s-work1
  Normal   Pulled     27m   kubelet            Successfully pulled image "docker.io/calico/pod2daemon-flexvol:v3.28.2" in 10.195808051s
  Normal   Created    27m   kubelet            Created container flexvol-driver
  Normal   Started    27m   kubelet            Started container flexvol-driver
  Normal   Pulling    27m   kubelet            Pulling image "docker.io/calico/cni:v3.28.2"
  Normal   Started    26m   kubelet            Started container install-cni
  Normal   Pulled     26m   kubelet            Successfully pulled image "docker.io/calico/cni:v3.28.2" in 51.718175648s
  Normal   Created    26m   kubelet            Created container install-cni
  Normal   Pulling    26m   kubelet            Pulling image "docker.io/calico/node:v3.28.2"
  Normal   Pulled     25m   kubelet            Successfully pulled image "docker.io/calico/node:v3.28.2" in 50.979018706s
  Normal   Created    25m   kubelet            Created container calico-node
  Normal   Started    25m   kubelet            Started container calico-node
  Warning  Unhealthy  25m   kubelet            Readiness probe failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4 socket: dial unix /var/run/calico/bird.ctl: connect: connection refused
  Warning  Unhealthy  25m   kubelet            Readiness probe failed: 2024-11-06 07:59:09.401 [INFO][231] confd/health.go 202: Number of node(s) with BGP peering established = 0
calico/node is not ready: BIRD is not ready: BGP not established with 192.168.100.186


或:

Warning  Unhealthy       42m   kubelet          Readiness probe failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4 socket: dial unix /var/run/bird/bird.ctl: connect: no such file or directory
```xml


其它说明:
custom-resources.yaml即使不加入配置nodeAddressAutodetectionV4:
      interface: ens33
也报同样的错误。

工作节点端口查看如下看上去似乎已经建立了连接:
netstat -ltunp | grep 179
tcp        0      0 0.0.0.0:179             0.0.0.0:*               LISTEN      12607/bird

lsof -i:179
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bird    12607 root    7u  IPv4  68970      0t0  TCP *:bgp (LISTEN)
bird    12607 root    8u  IPv4  76064      0t0  TCP dk8s-work1:bgp->dk8s-work2:55595 (ESTABLISHED)

/var/run/bird/bird.ctl文件calico刚部署完是存在的,但是重启节点后不存在了

通过ip link命令查看没有br开头的多余虚拟网卡,并且删除了一部分state DOWN的网卡也没起作用,一直的bird的错误。
版本信息如下:OS:CENTOS7,
calico version:v3.28.2
K8S:v1.21.10

网上搜索了几个方法(如加入nodeAddressAutodetectionV4识别网卡的配置)均不起作用,请教如何处理此错误

补充内容:

```xml
1.ens33是正确配置在网卡上的IP地址,并且集群中无重复
[root@dk8s-work1 ~]# ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:1b:c2:fb brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.185/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::89d2:8fb4:d1c9:74f/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

[root@dk8s-work2 ~]# ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:7e:94:ac brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.186/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::f470:3449:c28b:1f02/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
2.节点间通讯正常
[root@dk8s-work1 ~]# ping dk8s-work2
PING dk8s-work2 (192.168.100.186) 56(84) bytes of data.
64 bytes from dk8s-work2 (192.168.100.186): icmp_seq=1 ttl=64 time=0.455 ms
64 bytes from dk8s-work2 (192.168.100.186): icmp_seq=2 ttl=64 time=0.357 ms
64 bytes from dk8s-work2 (192.168.100.186): icmp_seq=3 ttl=64 time=0.288 ms
64 bytes from dk8s-work2 (192.168.100.186): icmp_seq=4 ttl=64 time=0.298 ms
64 bytes from dk8s-work2 (192.168.100.186): icmp_seq=5 ttl=64 time=0.287 ms

[root@dk8s-work2 ~]# ping dk8s-work1
PING dk8s-work1 (192.168.100.185) 56(84) bytes of data.
64 bytes from dk8s-work1 (192.168.100.185): icmp_seq=1 ttl=64 time=0.246 ms
64 bytes from dk8s-work1 (192.168.100.185): icmp_seq=2 ttl=64 time=0.300 ms
64 bytes from dk8s-work1 (192.168.100.185): icmp_seq=3 ttl=64 time=0.303 ms
64 bytes from dk8s-work1 (192.168.100.185): icmp_seq=4 ttl=64 time=0.240 ms
3.179端口节点间可以连接
[root@dk8s-work1 ~]# telnet 192.168.100.186 179
Trying 192.168.100.186...
Connected to 192.168.100.186.
Escape character is '^]'.
        ?    d " @xA EFG

[root@dk8s-work2 ~]# telnet 192.168.100.185 179
Trying 192.168.100.185...
Connected to 192.168.100.185.
Escape character is '^]'.
        ?    d " @xA EFG

4.日志
(1)、calico-node Pod 日志
2024-11-14 01:42:12.192 [INFO][58] felix/route_table.go 1153: Failed to get interface; it's down/gone. error=Link not found ifaceName="vxlan.calico" ifaceRegex="^vxlan.calico$" ipVersion=0x4
2024-11-14 01:42:12.192 [ERROR][58] felix/route_table.go 920: Failed to get link attributes error=interface not present ifaceRegex="^vxlan.calico$" ipVersion=0x4
2024-11-14 01:42:12.240 [INFO][58] felix/vxlan_mgr.go 425: Failed to get VXLAN tunnel device, assuming it isn't present error=Link not found
(2)、calico-kube-controllers Pod 日志
无错误内容

5.bird启动及命令无法使用
[root@dk8s-work1 ~]# systemctl start bird
Failed to start bird.service: Unit not found.
[root@dk8s-work1 ~]# birdc
bash: birdc: command not found...

6.calico版本降低了,无效;经查询目前所使用的CALICO版本与K8S版本是匹配的

7.custom-resources.yaml中改成默认找网卡还是报一样的错误

  • 写回答

30条回答 默认 最新

  • 叫兽-郭老师 Java领域新星创作者 2024-11-07 16:24
    关注
    获得0.45元问题酬金

    引用于豆包

    1. 问题分析
      • BIRD相关错误:从报错信息“Warning Unhealthy... Readiness probe failed: calico/node is not ready: BIRD is not ready...”可以看出,Calico的健康检查出现问题,主要是和BIRD组件有关。BIRD是Calico用于处理BGP(Border Gateway Protocol)路由的组件。
      • Socket连接问题:报错中提到“unable to connect to BIRDv4 socket: dial unix /var/run/calico/bird.ctl: connect: connection refused”和“unable to connect to BIRDv4 socket: dial unix /var/run/bird/bird.ctl: connect: no such file or directory”,这表明Calico组件在尝试通过Unix套接字与BIRD通信时出现问题。可能是BIRD服务没有正确启动或者套接字文件的权限、路径等出现问题。
      • 文件缺失问题:提到“/var/run/bird/bird.ctl文件Calico刚部署完是存在的,但是重启节点后不存在了”,这可能是由于服务启动顺序或者文件系统配置导致的。在Calico的工作流程中,这个文件对于控制和查询BIRD状态很重要。
      • 网络连接表象与实际问题:虽然通过“netstat -ltunp | grep 179”和“lsof -i:179”看到端口似乎建立了连接,但这可能只是部分连接建立成功,BGP协议的完整功能可能还没有实现,比如对等体之间的路由信息交换可能还存在问题。
    2. 解决方案
      • 检查BIRD服务启动配置
        • 查看BIRD服务的启动脚本或systemd单元文件(如果使用systemd管理服务)。在CentOS 7中,通常可以在/etc/systemd/system//usr/lib/systemd/system/目录下找到相关文件。确保BIRD服务的启动命令正确,并且依赖的文件和目录路径都正确配置。
        • 例如,检查ExecStart命令行参数是否正确指向BIRD可执行文件和配置文件。可以尝试手动启动BIRD服务(systemctl start bird)并查看系统日志(journalctl -xe)来获取更详细的启动错误信息。
      • 检查套接字文件权限和路径
        • 对于“/var/run/calico/bird.ctl”或“/var/run/bird/bird.ctl”文件,确保Calico组件具有访问这些文件的权限。可以使用ls -l命令查看文件权限。如果权限不足,可以使用chmod命令修改权限。例如,如果文件属于root用户和root组,并且Calico组件运行在calico用户下,可以尝试chmod o+r /var/run/calico/bird.ctl(假设安全策略允许这样的权限修改)。
        • 同时,检查Calico组件的配置文件中关于BIRD套接字文件路径的设置是否正确。可能在配置文件中有硬编码的路径,需要与实际的文件系统路径一致。
      • 处理文件缺失问题
        • 确定为什么“/var/run/bird/bird.ctl”文件在重启后会消失。这可能是由于文件系统挂载选项、临时文件清理机制或者BIRD服务自身的问题导致的。
        • 一种可能的解决方法是在BIRD服务的启动脚本中添加创建该文件的逻辑。例如,在启动脚本中添加类似于touch /var/run/bird/bird.ctl的命令,并且设置正确的权限。另外,检查是否有其他服务在启动时清理了这个文件,可以通过查看/etc/rc.d/rc.local(如果有自定义脚本)或者其他开机启动脚本。
      • 检查BGP对等体配置
        • 尽管看到了端口179有连接,但还需要深入检查BGP对等体配置。在Calico中,确保每个节点的BGP对等体IP地址、AS(自治系统)号等配置正确。可以查看Calico的配置文件(custom - resources.yaml等)中的相关部分。
        • 例如,检查节点之间的网络连接是否正常,是否存在防火墙规则阻止了BGP流量。可以使用pingtraceroute等工具检查节点之间的连通性,并且查看iptables -L(或firewalld相关命令)来检查是否有阻止BGP端口(179)的规则。
      • 检查Calico版本与Kubernetes版本兼容性
        • 虽然文档中提供了安装步骤,但Calico v3.28.2与Kubernetes v1.21.10可能存在一些未被发现的兼容性问题。可以查看Calico官方文档的兼容性矩阵,了解是否需要对Calico进行一些特定的配置调整或者升级/降级操作。
        • 考虑升级Kubernetes或者尝试降低Calico的版本,看看是否能够解决问题。在升级或降级之前,一定要备份好现有的配置文件和数据。
    评论

报告相同问题?

问题事件

  • 系统已结题 11月15日
  • 修改了问题 11月14日
  • 修改了问题 11月14日
  • 创建了问题 11月7日