部署 Calico v3.26.1
系统要求
节点要求
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 |
etcdv3 数据存储 | etcd 主机 | Incoming | TCP 2379 |
kubernetes 版本要求
v1.24
v1.25
v1.26
v1.27
Calico 最佳网络模式
推荐方案
想要启用VXLAN隧道,只需要把环境变量CALICO_IPV4POOL_VXLAN的值设置为Always或Cross-SubNet即可,但在全局流量上使用VXLAN隧道时建议将ConfigMap/calico-node中calico_backend键的值设置为vxlan以禁用BIRD,并在DaemonSet/calico-node资源的Pod模型中禁用calico-node容器的存活探针和就绪探针对bird的检测。
Policy | IPAM | CNI | Cross-subnet | Routing |
---|---|---|---|---|
Calico | Calico | Calico | VXLAN | Calico |
# 设置在IPv4类型的地址池上启用的IP-IP及其类型,支持3种可用值
# Always(全局流量)、Cross-SubNet(跨子网流量)和Never
- name: CALICO_IPV4POOL_IPIP
value: "Never"
# 是否在IPV4地址池上启用VXLAN隧道协议,取值及意义与Flannel的VXLAN后端相同,
# 但在全局流量启用VXLAN时将完全不再需要BGP网络,建议将相关的组件禁用
- name: CALICO_IPV4POOL_VXLAN
value: "Always"
kind: ConfigMap
apiVersion: v1
metadata:
name: calico-config
namespace: kube-system
data:
# Typha is disabled.
typha_service_name: "none"
# Configure the backend to use.
calico_backend: "vxlan"
livenessProbe:
exec:
command:
- /bin/calico-node
- -felix-live
# - -bird-live
readinessProbe:
exec:
command:
- /bin/calico-node
# - -bird-ready
- -felix-ready
替代方案
将环境变量CALICO_IPV4POOL_IPIP的值设置为Cross-SubNet(不区分大小写)来启用混合网络模型,它将启用BGP路由网络,且仅会在跨节点子网的流量间启用隧道封装。
Policy | IPAM | CNI | Cross-subnet | Routing |
---|---|---|---|---|
Calico | Calico | Calico | IPIP | BGP |
# 设置在IPv4类型的地址池上启用的IP-IP及其类型,支持3种可用值
# Always(全局流量)、Cross-SubNet(跨子网流量)和Never
- name: CALICO_IPV4POOL_IPIP
value: "Always"
# 是否在IPV4地址池上启用VXLAN隧道协议,取值及意义与Flannel的VXLAN后端相同,
# 但在全局流量启用VXLAN时将完全不再需要BGP网络,建议将相关的组件禁用
- name: CALICO_IPV4POOL_VXLAN
value: "Never"
通用方案
不确定网络模式,可以选择几乎可以在任何环境中以VXLAN + Cross-subnet(跨子网)模式运行Calico 网络模式。
Policy | IPAM | CNI | Cross-subnet | 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 使用etcdv3作为数据存储
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 | etcdv3 |
验证集群中的 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