基本介绍

前文【K8s】Kubernetes 网络之 Calico 插件理论 对 Calico 插件的相关理论进行了精简介绍,本文将继续介绍通过 Tigera Operator 安装 Calico 插件的流程,以及 Calico 如何切换网络模式、Calico 卸载流程。


安装流程

1、安装 Tigera Operator

Tigera Operator 通过将 Kubernetes API 封装为 CRD(Custom Resource Definition)对象,为 Calico 提供生命周期管理。

图片

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.0/manifests/tigera-operator.yaml
 
# 说明:由于 CRD 包较大,若使用 kubectl apply 可能会超出请求限制,需要使用 kubectl create 或 kubectl replace

2、安装 Calico

cat > custom-resources.yaml <<EOF
---
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
  name: default
spec:
  calicoNetwork:
    ipPools:
    - name: default-ipv4-ippool
      cidr: 10.10.0.0/16
      blockSize: 26                 # 默认配置
      encapsulation: IPIP           # 默认配置
      natOutgoing: Enabled          # 默认配置
      nodeSelector: all()           # 默认配置
    nodeAddressAutodetectionV4:
      interface: "eth.*|en.*"
    bgp: Enabled
    hostPorts: Enabled
    linuxDataplane: Iptables
    multiInterfaceMode: None
---
apiVersion: operator.tigera.io/v1
kind: APIServer
metadata:
  name: default
spec: {}
EOF
 
kubectl create -f custom-resources.yaml
 
# 说明:默认在 calico-system 命名空间中创建 Installation 类型、APIServer 类型对象

custom-resources.yaml 参数说明文档:

https://docs.tigera.io/calico/latest/reference/installation/api#operator.tigera.io/v1.Installation

https://docs.tigera.io/archive/v3.21/reference/installation/api#operator.tigera.io/v1.InstallationSpec


切换网络模式

1、切换为 IPIP 模式(默认模式)

# 修改 Calico 配置
kubectl edit ippool
1)将 ipipMode 改为 Always(即启用 IPIP 模式)
2)将 vxlanMode 改为 Never(即禁用 VXLAN 模式)
 
# 重启 calico-node
kubectl rollout restart deploy calico-node -n calico-system
 
# 效果验证
route -n         # IPIP 模式下会出现 tunl0 设备

2、切换为 VXLAN 模式

# 修改 Calico 配置
kubectl edit ippool
1)将 ipipMode 改为 Never(即禁用 IPIP 模式)
2)将 vxlanMode 改为 Always(即启用 VXLAN 模式)
 
# 重启 calico-node
kubectl rollout restart deploy calico-node -n calico-system
 
# 效果验证
route -n         # VXLAN 模式下会出现 vxlan.calico 设备

3、切换为 BGP 模式

# 修改 Calico 配置
kubectl edit ippool
1)将 ipipMode 改为 Always(即禁用 IPIP 模式)
2)将 vxlanMode 改为 Always(即禁用 VXLAN 模式)
 
# 重启 calico-node
kubectl rollout restart deploy calico-node -n calico-system
 
# 效果验证
route -n         # BGP 模式下不会出现 tunl0 或 vxlan.calico 设备

4、切换为 CrossSubnet 模式

# 修改 Calico 配置
kubectl edit ippool
1)将 ipipMode 或 vxlanMode 改为 CrossSubnet
2)将 改为 Always(即启用 VXLAN 模式)
 
# 重启 calico-node
kubectl rollout restart deploy calico-node -n calico-system
 
🔔 CrossSubnet 模式:此为混合模式,同网段通信使用 BGP 模式,跨网段通信使用 IPIP 或 VXLAN 模式


卸载流程

1、删除资源对象

kubectl delete -f custom-resources.yaml
kubectl delete -f tigera-operator.yaml

2、删除虚拟网卡

# 在所有主机上执行
modprobe -r ipip      # 删除 IPIP 模式虚拟网卡
modprobe -r vxlan     # 删除 VXLAN 模式虚拟网卡

3、删除 CNI 配置文件

# 在所有主机上执行
rm -rf /var/lib/cni/ && rm -rf /etc/cni/net.d/*

4、重启 kubelet 服务

# 在所有主机上执行
systemctl restart kubelet