Argo Workflow如何无需手动修改清单即可修改模板内的镜像标签?
动态修改Argo Sensor触发Workflow镜像标签的可行方案
现有场景下不需要修改Sensor静态资源清单、不需要手动执行kubectl apply的实现方式共有以下几种:
1. 事件负载传参(最高效推荐)
你当前是通过REST端点触发Sensor,可直接在调用REST接口的请求Body中携带自定义的imageTag字段,调整Sensor的trigger参数映射规则即可实现标签动态替换,调整后Sensor的trigger配置示例如下:
triggers: - template: name: webhook-autotest-trigger group: argoproj.io version: v1alpha1 resource: workflows source: inline: | apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: fe-test- spec: entrypoint: fe-tests templates: - name: fe-tests nodeSelector: kops.k8s.io/instancegroup: spot-m4large container: image: <our-ecr-link>/fe-automation:{{ .Input.event.body.imageTag }} parameters: # 从事件请求体中提取镜像标签参数 - src: dependencyName: "webhook-gateway:fe-tests" dataKey: body.imageTag dest: spec.templates.0.container.image
该方案只需要调整一次Sensor配置,后续每次触发测试时在请求中指定镜像标签即可,无需再改动任何集群资源配置
2. WorkflowTemplate 模板参数化
将测试Workflow的逻辑抽取为独立的WorkflowTemplate资源,把镜像标签声明为模板的入参,Sensor的trigger直接引用该模板并传递参数,后续如果需要调整默认标签只需要修改WorkflowTemplate即可,不需要改动Sensor配置。
3. MutatingWebhook 动态注入
部署Kubernetes变更准入控制器,监听集群内Workflow资源的创建事件,当检测到是该Sensor触发的测试Workflow时,自动读取你预先维护在ConfigMap中的最新镜像标签,替换掉Workflow中定义的镜像版本。该方案下你只需要更新ConfigMap中的标签值即可完成全量变更,不需要修改任何Argo相关的资源清单。
4. 镜像自动更新工具
可使用镜像自动更新组件,自动扫描你的ECR镜像仓库的最新标签,匹配到规则后自动更新Sensor中的镜像字段并完成集群内资源的同步,全程不需要手动修改清单或执行kubectl apply命令。
内容的提问来源于stack exchange,提问作者libxelar.so
相关产品推荐
相关产品推荐

