本文发布于Cylon的收藏册,转载请著名原文链接~


开始前的实验环境

Resources controller worker-1 worker-2
OS CentOS 7.9 CentOS 7.9 CentOS 7.9
Storage 20GB 20GB 20GB
vCPU 2 2 2
RAM 4GB 4GB 4GB
NIC 10.0.0.4 10.0.0.4 10.0.0.4
Kubernetes Version 1.19.10 1.19.10 1.19.10

选择匹配 Kubernetes 版本的 Calico 版本

通常情况下,查看 Calico 所支持的 Kubernetes 版本,可以通过路径 Install Calico ==> Kubernetes ==> System requirements 可以找到自己的 Kubernetes 集群所支持的 Calico 版本。

例如在实验环境中,Kubernetes 1.19 版本所支持的版本有 Calico 3.20,这个时候直接 apply 这个版本提供的资源清单即可

如何开启纯 BGP 模式

默认情况下下,Calico 使用的是 full mesh 和 IPIP, 如果想通过在部署时就修改关闭 IPIP 模式,可以通过修改资源清单中的环境变量来关闭 CALICO_IPV4POOL_IPIP: Never

如果需要在安装时配置Pod 的 CIDR,需要修改 CALICO_IPV4POOL_CIDR

如果你需要切换 CNI

如果你的集群不是空的,而是存在很多 Pod 的集群,请注意,这个时候你的 flannel 或者其他 CNI 生成的网络接口是不会被销毁的,Pod 的 IP也是旧 CNI 生成的网段,此时 Calico 会按照原有的 IP 进行维护路由,可能会存在访问不了的情况,这时候不要随意切换 CNI

如何检查 Calico 使用的是什么模式

在使用默认的资源清单安装完 Calico 后,实际上此时会表现为 BGP + IPIP 隧道模式,同节点 Pod 使用直连方式,跨节点 Pod 通讯使用 tunnel 隧道完成,表现形式为 ip addr 会看到 tunl0 设备

如果是纯 BGP 模式,那么表现形式为 route -n 看到的路由跨节点的都应该是 eth0 这样子的,如下所示

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.2        0.0.0.0         UG    0      0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.244.196.128  0.0.0.0         255.255.255.255 UH    0      0        0 calia5f3c234a97
10.244.196.128  0.0.0.0         255.255.255.192 U     0      0        0 *
10.244.214.0    10.0.0.4        255.255.255.192 UG    0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0

当然此时一定是不存在 tunl0 设备的。

Reference

[1] BGP configuration

[2] BGP peer

[3] IP pool

[4] System requirements

本文发布于Cylon的收藏册,转载请著名原文链接~

链接:https://www.oomkill.com/2023/06/calico-cni-deplyment/

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。