保姆级教程:用kubeadm和Operator模式在K8s 1.24+上部署Calico网络(含VXLAN配置)
Kubernetes 1.24集群网络部署实战基于Operator模式的Calico VXLAN全流程指南在云原生技术快速迭代的今天Kubernetes 1.24版本移除了对Dockershim的支持这一变化使得网络插件的选择与部署方式需要重新审视。作为CNCF毕业项目中唯一的网络插件Calico凭借其高性能和灵活的策略管理能力成为生产环境中的首选方案。本文将带您从零开始通过现代化的Operator部署模式在Kubernetes 1.24集群中完成Calico网络的完整配置特别聚焦VXLAN这种适用于混合云场景的覆盖网络模式。1. 环境准备与前置检查在开始部署之前我们需要确保基础环境符合要求。Kubernetes 1.24版本对容器运行时和网络插件提出了新的规范这是与传统部署方式最大的区别点。首先确认集群已正确初始化并配置了合适的CIDR范围。执行以下命令检查集群状态kubectl get nodes -o wide kubectl cluster-info关键参数要求节点间网络互通且防火墙放行了VXLAN使用的UDP 4789端口各节点时间同步NTP服务正常运行已禁用swap分区容器运行时containerd或CRI-O版本符合K8s 1.24要求注意如果是从旧版本升级而来请确保彻底清理了原有的网络插件残留配置避免与新的Operator模式产生冲突。对于全新的kubeadm集群建议使用以下初始化命令kubeadm init --pod-network-cidr192.168.0.0/16 \ --service-cidr10.96.0.0/12 \ --kubernetes-versionv1.24.32. Operator模式架构解析与部署2.1 为什么选择Operator模式传统YAML清单部署方式存在几个明显缺陷配置更新需要手动操作容易产生版本不一致组件升级过程复杂容易导致服务中断缺乏自愈能力和状态监控Calico Operator通过以下机制解决了这些问题声明式API通过CustomResource定义网络配置闭环控制持续监控并修正系统状态滚动升级自动化处理版本迁移健康检查内置探针和告警机制2.2 部署Tigera Operator首先部署Operator的核心组件kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/tigera-operator.yaml验证Operator Pod运行状态watch kubectl get pods -n tigera-operator典型输出应显示READY为1/1NAME READY STATUS RESTARTS AGE tigera-operator-5d5f7956b4-8z6l2 1/1 Running 0 2m2.3 自定义资源配置下载custom-resources模板并修改关键参数wget https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/custom-resources.yaml主要配置项说明参数推荐值作用说明cidr与kubeadm init一致Pod网络地址范围blockSize26每个节点的IP块大小encapsulationVXLANCrossSubnet跨子网VXLAN模式natOutgoingtrue出站流量NAT转换nodeSelectorall()节点选择器修改后的配置示例spec: calicoNetwork: ipPools: - blockSize: 26 cidr: 192.168.0.0/16 encapsulation: VXLANCrossSubnet natOutgoing: true nodeSelector: all()应用配置并监控部署进度kubectl apply -f custom-resources.yaml watch kubectl get pods -n calico-system3. VXLAN网络深度配置3.1 VXLAN模式选择策略Calico支持三种主要的封装模式IPIP适合同数据中心通信头部开销小VXLAN跨子网/跨云场景的首选无封装要求底层网络支持BGP路由在混合云环境中VXLANCrossSubnet是最佳选择它具备以下特点同一子网内直接路由减少封装开销跨子网自动启用VXLAN隧道兼容各种网络底层架构3.2 高级网络参数调优在custom-resources.yaml中可以配置性能优化参数apiVersion: operator.tigera.io/v1 kind: Installation metadata: name: default spec: calicoNetwork: mtu: 1440 nodeAddressAutodetectionV4: interface: eth.* bpfEnabled: true linuxDataplane: BPF关键调优项说明mtu根据底层网络MTU减去VXLAN头部的50字节interface指定节点IP检测的网卡模式bpfEnabled启用eBPF数据平面提升性能提示修改网络参数后需要滚动重启Calico Pod使配置生效kubectl rollout restart daemonset/calico-node -n calico-system4. 运维工具链与故障排查4.1 calicoctl的现代化部署传统二进制安装方式已不推荐现在可以通过Kubernetes原生方式部署kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/calicoctl.yaml alias calicoctlkubectl exec -i -n kube-system calicoctl -- /calicoctl验证安装calicoctl version4.2 常见问题诊断方法节点网络异常检查清单确认calico-node Pod全部Runningkubectl get pods -n calico-system -o wide检查IP地址分配情况calicoctl ipam show验证路由表是否正确calicoctl node status检查网络策略是否阻断流量calicoctl get networkpolicy -A典型错误处理# 查看Calico组件日志 kubectl logs -n calico-system -l k8s-appcalico-node # 重置节点网络配置 calicoctl node diags node-name --log-dir./diagnostics5. 生产环境最佳实践5.1 高可用架构设计对于关键业务集群建议实施以下加固措施Typha组件横向扩展减轻API Server压力apiVersion: operator.tigera.io/v1 kind: Installation spec: typha: replicas: 3节点亲和性配置确保控制器均匀分布affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: k8s-app operator: In values: [calico-kube-controllers] topologyKey: kubernetes.io/hostname5.2 监控与告警配置集成Prometheus监控指标apiVersion: operator.tigera.io/v1 kind: Monitoring metadata: name: calico-monitoring spec: prometheusMetrics: Enabled关键监控指标告警规则示例- alert: CalicoNodeDown expr: absent(up{jobcalico-node} 1) for: 5m labels: severity: critical annotations: summary: Calico node down ({{ $labels.instance }}) description: Calico node {{ $labels.instance }} has been down for more than 5 minutes6. 版本升级与迁移策略从传统部署迁移到Operator模式的推荐步骤备份现有网络策略和IPAM信息calicoctl get networkpolicy -A -o yaml policies.yaml calicoctl ipam show ipam.txt卸载旧版Calico组件kubectl delete -f https://raw.githubusercontent.com/projectcalico/calico/v3.23.1/manifests/calico.yaml清理残留CRDkubectl delete crd felixconfigurations.crd.projectcalico.org kubectl delete crd ipamblocks.crd.projectcalico.org # ...其他CRD...按照本文第二节开始部署Operator恢复网络策略calicoctl apply -f policies.yaml升级过程中的回滚方案# 查看当前安装版本 kubectl get tigersatus -n tigera-operator # 回滚到特定版本 kubectl patch installation default --type merge -p {spec:{calicoVersion:v3.23.1}}