系统要求
节点要求
1. Calico必须能够管理主机上的cali*接口。当启用IPIP(默认)时,Calico还需要能够管理tunl*接口。启用VXLAN时,Calico还需要能够管理VXLAN.Calico接口。
2. Linux内核3.10或更高版本。
3. 如果您的Linux发行版附带安装了Firewalld或其他iptables管理器,则应将其禁用。这些可能会干扰Calico添加的规则,并导致意外行为。
网络要求
配置 | 主机 | 连接类型 | 端口/协议 |
Calico网络 (BGP) | 全部节点 | Bidirectional | TCP 179 |
启用 IP-in-IP 的Calico网络(默认) | 全部节点 | Bidirectional | IP-in-IP,通常用其协议号4表示 |
启用 VXLAN 的Calico网络 | 全部节点 | Bidirectional | UDP 4789 |
启用 Typha 的Calico网络 | Typha 客户端节点 | Incoming | TCP 5473(默认) |
启用 IPv4 Wireguard 的Calico网络 | 全部节点 | Bidirectional | UDP 51820(默认) |
启用 IPv6 Wireguard 的Calico网络 | 全部节点 | Bidirectional | UDP 51821(默认) |
flannel 网络 (VXLAN) | 全部节点 | Bidirectional | UDP 4789 |
All | kube-apiserver 主机 | Incoming | 通常是 TCP 443 或 6443 |
etcd 数据存储 | etcd 主机 | Incoming | TCP 2379 |
kubernetes 版本要求
v1.24
v1.25
v1.26
v1.27
Calico 最佳网络模式
推荐方案
Policy | IPAM | CNI | Overlay | Routing |
Calico | Calico | Calico | VXLAN | Calico |
替代方案
Policy | IPAM | CNI | Overlay | Routing |
Calico | Calico | Calico | IPIP | BGP |
通用方案
不确定网络模式,可以选择几乎可以在任何环境中以VXLAN + overlay模式运行Calico 网络模式。
Policy | IPAM | CNI | Overlay | Routing |
Calico | Calico | Calico | VXLAN | Calico |
Calico 部署方式
Calico部署方式有两种:operator部署和清单方式部署。
Calico operator
Calico由operator安装,该operator负责管理Calico集群的安装、升级和一般生命周期。operator作为Deployment直接安装在集群上,并通过一个或多个自定义Kubernetes API资源进行配置。
Calico manifests
Calico也可以使用原始清单作为operator的替代品进行安装。清单包含在Kubernetes集群中的每个节点上安装Calico所需的资源。不建议使用清单,因为它们不能像operator那样自动管理Calico的生命周期。然而,清单可能对需要对底层Kubernetes资源进行高度特定修改的集群有用。
使用operator 部署 Calico
默认网络模型
Policy | IPAM | CNI | Overlay | Routing | Datastore |
Calico | Calico | Calico | IPIP | BGP | Kubernetes API |
Operator 安装
# kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml
下载配置 Calico 所需的自定义资源
# curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml -O
安装 Calico
# kubectl create -f custom-resources.yaml
使用manifests 部署Calico
Calico 使用Kubernetes API作为数据存储且集群节点少于等于50个
1. 下载Calico 清单
# curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml -O
2. 如果您使用的是 pod CIDR 192.168.0.0/16,请跳至下一步。如果您在 kubeadm 中使用不同的 pod CIDR,则无需进行任何更改 - Calico 将根据运行配置自动检测 CIDR。对于其他平台,请确保取消注释清单中的 CALICO_IPV4POOL_CIDR 变量,并将其设置为与您选择的 pod CIDR 相同的值。
3. 根据需要自定义清单
4. 应用清单
# kubectl apply -f calico.yaml
默认网络模型
Policy | IPAM | CNI | Overlay | Routing | Datastore |
Calico | Calico | Calico | IPIP | BGP | Kubernetes API |
Calico 使用Kubernetes API作为数据存储且集群节点大于50个
1. 下载Calico 清单
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico-typha.yaml -o calico.yaml
2. 如果您使用的是 pod CIDR 192.168.0.0/16,请跳至下一步。如果您在 kubeadm 中使用不同的 pod CIDR,则无需进行任何更改 - Calico 将根据运行配置自动检测 CIDR。对于其他平台,请确保取消注释清单中的 CALICO_IPV4POOL_CIDR 变量,并将其设置为与您选择的 pod CIDR 相同的值。
3. 在名为calico-typa的部署中将副本计数修改为所需的数字。
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: calico-typha
...
spec:
...
replicas: <number of replicas>
我们建议每 200 个节点至少有 1 个副本,并且不超过 20 个副本。在生产中,我们建议至少三个副本,以减少滚动升级和故障的影响。副本数量应始终小于节点数量,否则滚动升级将停止。此外,只有当 Typha 实例少于节点数时,Typha 才有助于扩展。
如果设置typa_service_name并将typha部署副本计数设置为0,则Felix将不会启动。
4. 如果需要,可以自定义清单。
5. 应用清单
# kubectl apply -f calico.yaml
默认网络模型
Policy | IPAM | CNI | Overlay | Routing | Datastore |
Calico | Calico | Calico | IPIP | BGP | Kubernetes API |
Calico 使用etcd作为数据存储
1. 下载Calico 清单
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico-etcd.yaml -o calico.yaml
2. 如果您使用的是 pod CIDR 192.168.0.0/16,请跳至下一步。如果您在 kubeadm 中使用不同的 pod CIDR,则无需进行任何更改 - Calico 将根据运行配置自动检测 CIDR。对于其他平台,请确保取消注释清单中的 CALICO_IPV4POOL_CIDR 变量,并将其设置为与您选择的 pod CIDR 相同的值。
3. 在ConfigMap中的calico-config,将etcd_endpoints的值设置为 etcd 服务器的 IP 地址和端口。可以使用逗号作为分隔符来指定多个etcd_endpoint。
4. 根据需要自定义清单
4. 应用清单
# kubectl apply -f calico.yaml
默认网络模型
Policy | IPAM | CNI | Overlay | Routing | Datastore |
Calico | Calico | Calico | IPIP | BGP | etcd |
验证集群中的 Calico
# watch kubectl get pods -n calico-system
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-node-txngh 1/1 Running 0 54s
参考文档
https://docs.tigera.io/calico/latest/getting-started/kubernetes/self-managed-onprem/onpremises