使用Tigera Operator在Kubernetes中部署Calico的实践指南

张开发
2026/4/16 1:14:19 15 分钟阅读

分享文章

使用Tigera Operator在Kubernetes中部署Calico的实践指南
1. 为什么选择Tigera Operator部署Calico在Kubernetes集群中网络插件的选择直接影响着整个集群的性能和稳定性。Calico作为目前最流行的CNI插件之一以其高性能、灵活的网络策略和跨云兼容性著称。而Tigera Operator则是Calico官方推荐的部署方式相比传统的手动YAML部署它能带来三大核心优势第一是生命周期管理自动化。Operator会持续监控Calico组件的健康状态自动处理版本升级、配置变更等复杂操作。我去年在升级一个生产集群时就深刻体会到Operator的价值——原本需要手动协调多个组件的升级过程现在只需要修改CRD配置就能自动完成。第二是配置声明化。所有参数都通过Kubernetes原生资源对象定义比如下面这个典型的Installation CRD配置apiVersion: operator.tigera.io/v1 kind: Installation metadata: name: default spec: registry: quay.io calicoNetwork: ipPools: - cidr: 10.244.0.0/16 encapsulation: VXLAN natOutgoing: Enabled第三是故障自愈能力。当Calico组件异常崩溃时Operator会自动重建相关Pod。这个特性在我们某个测试环境中防止了至少三次网络中断事故。2. 部署前的环境准备2.1 版本兼容性检查在开始部署前首先要确认版本矩阵的兼容性。根据我的经验这是最容易踩坑的环节。以下是经过验证的常见版本组合Kubernetes版本Calico版本Tigera Operator版本1.283.26v1.281.25-1.273.24v1.251.22-1.243.21v1.22检查集群版本的方法很简单kubectl version --short | grep Server2.2 网络规划建议IP地址规划需要特别注意两个参数Pod CIDR默认10.244.0.0/16需要确保不与现有网络冲突Service CIDR通过kubeadm config view查看默认配置在私有化部署场景中我推荐使用VXLAN封装模式而非默认的IPIP因为更好的兼容性能穿透大多数企业防火墙支持跨子网通信适合多机房部署性能损耗在可接受范围内实测约5-8%3. 分步部署指南3.1 安装Tigera Operator首先部署Operator的核心组件kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.31.3/manifests/tigera-operator.yaml这里有个实际经验如果网络环境特殊可以先将YAML文件下载到本地替换镜像仓库地址。比如我们内网环境是这样处理的wget https://raw.githubusercontent.com/projectcalico/calico/v3.31.3/manifests/tigera-operator.yaml sed -i s|docker.io|registry.internal.com|g tigera-operator.yaml kubectl create -f tigera-operator.yaml3.2 配置Calico核心参数创建custom-resources.yaml文件时这几个参数需要特别关注apiVersion: operator.tigera.io/v1 kind: Installation metadata: name: default spec: calicoNetwork: ipPools: - blockSize: 24 cidr: 10.244.0.0/16 encapsulation: VXLANCrossSubnet natOutgoing: Enabled nodeAddressAutodetection: interface: eth.*|en.*关键配置说明blockSize: 24为每个节点分配/24的子网适合中型集群encapsulation: VXLANCrossSubnet混合模式同子网用BGP跨子网用VXLANnodeAddressAutodetection避免自动检测到错误的网络接口4. 高级配置技巧4.1 自定义镜像仓库在企业内网环境中通常需要替换默认的镜像仓库。这是我常用的完整配置示例spec: imageRegistry: registry.internal.com imagePath: calico variant: Calico componentResources: - componentName: node resourceRequirements: limits: cpu: 2 memory: 2Gi requests: cpu: 500m memory: 512Mi4.2 网络策略调优Calico的网络策略性能直接影响集群吞吐量通过调整Felix配置可以提升性能apiVersion: operator.tigera.io/v1 kind: FelixConfiguration metadata: name: default spec: bpfEnabled: true logSeverityScreen: Info prometheusMetricsEnabled: true5. 运维与故障排查5.1 状态监控方法部署完成后用这个命令检查所有组件状态watch kubectl get tigerastatus健康状态应该类似这样NAME AVAILABLE PROGRESSING DEGRADED apiserver True False False calico True False False ippools True False False5.2 常见问题处理节点NotReady问题检查calico-node日志kubectl logs -n calico-system -l k8s-appcalico-node常见错误是IP地址检测失败可以显式指定网卡nodeAddressAutodetection: interface: eth0网络策略不生效确认Felix组件没有报错检查NetworkPolicy的selector是否匹配Pod标签使用calicoctl工具诊断策略规则calicoctl get networkPolicy -o wide6. 版本升级策略Operator模式下升级非常安全推荐采用灰度升级先升级Operatorkubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.31.3/manifests/tigera-operator.yaml然后修改Installation CRD中的版本号监控升级过程kubectl get tigerastatus升级过程中Operator会自动处理CRD迁移、数据平面更新等复杂操作通常不需要人工干预。但建议在非业务高峰期进行并准备好回滚方案。

更多文章