You need to enable JavaScript to run this app. Argo Rollouts+Traefik Mesh SMI金丝雀发布副本部署不足与TrafficSplit资源报错
优惠活动
大模型
产品
解决方案
定价
更多

Argo Rollouts+Traefik Mesh SMI金丝雀发布副本部署不足与TrafficSplit资源报错

报错截图

按照预期执行金丝雀发布流程时,实际仅启动1个副本(总规模20%),Rollout资源长期卡在Progressing状态,触发的报错日志如下:

TrafficRoutingErro: the server could not find the requested resource (post trafficsplits.splits.smi-spec.io)
TrafficSplitNotCreated: Unable to create traffic Split 'demo-trafficsplit'
问题根因

核心异常由两部分触发:

  • 集群内未安装和当前Traefik Mesh版本匹配的SMI TrafficSplit CRD。Argo Rollouts控制器调用API创建TrafficSplit资源时,直接返回“资源不存在”的报错,导致流量路由流程初始化失败,Rollout停留在第一步setWeight: 20的状态,不会继续推进副本扩容。
  • 现有配置存在版本不匹配、冗余定义问题,进一步放大了流程异常:
  • 清单中TrafficSplit声明的apiVersion: split.smi-spec.io/v1alpha3,和多数Traefik Mesh版本默认适配的SMI CRD版本不兼容
  • 手动提前创建TrafficSplit资源的操作,和Argo Rollouts自动接管对应资源的逻辑冲突
  • 手写的TrafficSplit权重值和发布流程预期完全相反:stable服务分配10%流量、canary服务分配90%流量,不符合第一步20%流量切流的设计
修复步骤
  1. 校验集群内SMI CRD状态
    • 执行kubectl get crd | grep trafficsplits.smi-spec.io检查CRD是否存在
    • 如果查询结果为空,需要手动安装和当前Traefik Mesh版本匹配的SMI CRD,注意对齐CRD定义的apiVersion(多数Traefik Mesh v2.x+版本适配split.smi-spec.io/v1alpha4,不再兼容v1alpha3)
    • 如果查询结果非空,确认CRD定义的apiVersion字段,替换清单中不匹配的版本号
  2. 修正配置清单的冗余和错误项
    • 从yaml中删除手动声明的TrafficSplit资源段:Argo Rollouts在识别到CRD存在后,会自动根据Rollout配置中指定的trafficSplitName创建、更新对应的TrafficSplit资源,不需要提前手动定义
    • 调整三个Service的selector配置:当前demo(stable服务)、demo-canary(canary服务)的selector全部写死匹配version: blue的Pod,后续版本切换时会导致流量拆分失效,需要根据Pod版本标签做匹配区分
    • 移除和Rollout控制器逻辑重复的流量权重配置,所有权重值交给Rollout的步骤定义自动管控
  3. 重新触发部署流程
    • 修正完成后重新执行kubectl apply -f applications.yaml,等待Argo CD完成配置同步
    • 观察Rollout状态:控制器会自动创建对应版本的TrafficSplit资源,按步骤完成20%权重切流、1分钟暂停、50%权重切流、2分钟暂停的全流程,最终将副本数扩容到预期的4个,退出Progressing状态

补充验证点:如果修正后仍报错,需要检查Traefik Mesh的RBAC权限,确认Argo Rollouts的服务账号有创建、更新TrafficSplit资源的权限


内容的提问来源于stack exchange,提问作者Harou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.03 11:27:06