k8s 使用 calico 作为 CNI ,calico-node 启动失败

1 问题描述

k8s 集群,使用 calico 作为 CNI,calico 的安装配置参考 https://docs.projectcalico.org/getting-started/kubernetes/hardway/overview。 calico 需要 k8s 运行 calico-node 的 daemonset 在每个node 上运行一个 calico-node,calico-node 里面包括了Felix,BIRD,confd组件。calico-node 是 node 上网络能够正常使用的必要条件。 k8s apply calico-node 的 daemonset 后,发现有两个 node 上面的 calico-node 运行失败导致对应节点上的网络不通

kube-system   calico-node-5wfb9                         1/1     Running            7          181d
kube-system   calico-node-6hjkt                         1/1     Running            9          181d
kube-system   calico-node-r694q                         0/1     CrashLoopBackOff   9318       181d
kube-system   calico-node-wrx6h                         0/1     CrashLoopBackOff   28         181d

2 问题定位

执行 kubectl logs -n kube-system calico-node-r694q 查看对应 pod 的log,有如下错误提示:

2021-10-29 04:02:38.355 [INFO][9] startup.go 584: Using autodetected IPv4 address on interface br-84c838ba6a99: 172.18.0.1/16
2021-10-29 04:02:38.355 [INFO][9] startup.go 452: Node IPv4 changed, will check for conflicts
2021-10-29 04:02:38.365 [WARNING][9] startup.go 878: Calico node 'xxxxx' is already using the IPv4 address 172.18.0.1.
2021-10-29 04:02:38.366 [INFO][9] startup.go 210: Clearing out-of-date IPv4 address from this node IP="172.18.0.1/16"
2021-10-29 04:02:38.379 [WARNING][9] startup.go 1057: Terminating

从 log 来看是因为该 node 上面 calico-node 这个 pod 启动时获取的 ip 地址跟其他 node 上使用的 ip 地址冲突了,这个节点获取 ip 使用的网口是一个 bridge 口,明显不是该 node 的 WAN 口。如何才能使 calico-node 使用正确 WAN 上的ip呢。

3 解决方法

3.1 查看 calico-node 的 daemonset yaml 文件

https://docs.projectcalico.org/getting-started/kubernetes/hardway/install-node#install-daemon-set

有如下配置:

            # Auto-detect the BGP IP address.
            - name: IP
              value: "autodetect"

然后查看 calico 官方文档: https://docs.projectcalico.org/reference/node/configuration
有如下说明:

IP_AUTODETECTION_METHOD	
The method to use to autodetect the IPv4 address for this host. This is only used when the IPv4 address is being autodetected. See IP Autodetection methods for details of the valid methods. [Default: first-found]

3.2 修改 calico-node 的 daemonset

说明如果不配置 IP_AUTODETECTION_METHOD 这个环境变量,calico-node daemonset 默认的策略是获取第一个取到的网卡的 ip 作为 calico node 的ip,那样往往是不满足需求的,可以修改 calico-node daemonset, 增加如下环境变量配置,参考 https://docs.projectcalico.org/reference/node/configuration#ip-autodetection-methods:

            - name: IP
              value: "autodetect"
            - name: IP_AUTODETECTION_METHOD
              value: can-reach=114.114.114.114

然后重新 apply calico-node daemonset,问题解决。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值