部署 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

posted @ 2023-08-17 13:30  小吉猫  阅读(910)  评论(0编辑  收藏  举报