多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

在 Kubernetes 中使用 Argo Rollouts 实现 Canary 金丝雀发布:从控制器安装到分步灰度上线实战指南

在 Kubernetes 中使用 Argo Rollouts 实现 Canary 金丝雀发布:从控制器安装到分步灰度上线实战指南 文档教程DevOps运维【免费下载链接】devops-exercisesLinux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions项目地址https://gitcode.com/GitHub_Trending/de/devops-exercises点击查看免费下载导读本文基于 devops-exercises 仓库中 Argo Rollouts Canary 练习 及其完整解决方案系统讲解如何在运行中的 Kubernetes 集群上安装 Argo Rollouts 控制器、编写带 Canary 策略的 Rollout 资源清单并通过kubectl argo rolloutsCLI 完成一次30% → 60% → 100%的分步灰度发布与人工卡点推进。读完本文你将掌握 Argo Rollouts 的核心概念、setWeight/pause步骤编排、流量路由配置以及一套可直接复制运行的灰度发布完整流程。一、前置准备与练习要求在动手之前需要确认以下三项前提条件与练习文档中的 Requirements 保持一致一个运行中的 Kubernetes 集群Argo Rollouts 作为控制器运行在集群内负责监听并管理Rollout自定义资源。安装 Argo Rollouts CLIkubectl argo rollouts插件用于执行发布、查看状态、手动推进等操作命令。已部署一个特定版本的应用练习约定先以v1.0作为稳定版本运行随后通过set image升级到v2.0来演示灰度过程。值得强调的认知要点来源于 Argo 主题文档 的问答部分使用 Argo Rollouts 并不需要安装 ArgoCD。这是一个常见误解——二者虽然同属 Argo 生态且配合良好Argo Rollouts 发布新版本时 ArgoCD 会将应用标记为 out-of-sync但 Argo Rollouts 完全可以独立使用。二、Argo Rollouts 核心概念速览RolloutArgo Rollouts 引入的自定义资源apiVersion: argoproj.io/v1alpha1, kind: Rollout替代 Kubernetes 原生 Deployment用于支持蓝绿、金丝雀等高级发布策略同时支持 A/B 测试、自动回滚与集成指标分析。ReplicaSet 策略执行一次新版本发布时Argo Rollouts 会创建一个新的 ReplicaSet承载新版本旧版本在新版本完全接管前始终保持存活这是灰度能够随时回退的基石。Steps步骤编排Canary 策略的核心字段通过setWeight设置金丝雀流量权重、pause插入人工/自动卡点形成可审计的渐进式放量节奏。三、第一步安装 Argo Rollouts 控制器根据解决方案文档安装分两个动作完成# 1. 创建专属命名空间 kubectl create namespace argo-rollouts # 2. 应用官方安装清单控制器、CRD 等 kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml说明使用独立命名空间argo-rollouts便于隔离与控制器的生命周期管理install.yaml包含 Argo Rollouts 控制器、Rollout等自定义资源定义CRD及配套 RBAC 权限若希望与 ArgoCD 联动需额外安装 Argo Rollouts 的 ArgoCD 扩展但本练习不涉及二者可独立使用。四、第二步编写 Canary 策略的 Rollout 清单以下清单是解决方案文档给出的完整示例其关键配置已逐项注释--- apiVersion: argoproj.io/v1alpha1 kind: Rollout metadata: name: some-app spec: replicas: 6 # 副本数设置为 6练习目标要求 strategy: canary: stableService: k8s-service-stable # 稳定版流量指向的 Service canaryService: k8s-service-canary # 金丝雀版流量指向的 Service trafficRouting: ambassador: # 通过 Ambassador 网关做流量按权重路由 mappings: - k8s-mapping # 引用的 Ambassador Mapping 资源 steps: # 发布步骤编排灰度节奏 - setWeight: 30 # 1. 金丝雀流量升至 30% - pause: {} # 2. 暂停等待人工确认/自动分析 - setWeight: 60 # 3. 金丝雀流量升至 60% - pause: {} # 4. 暂停等待人工确认/自动分析 - setWeight: 100 # 5. 流量全部切至新版本 - pause: {} # 6. 暂停确认后完成发布 selector: matchLabels: app: some-web-app template: metadata: labels: app: some-web-app spec: containers: - name: web-app image: some/registry/and/image:v1.0 # 初始稳定版本 ports: - name: http containerPort: 8080 protocol: TCP4.1 参数与语义详解配置项含义与说明replicas: 6期望副本总数练习要求设为 6与蓝绿练习的 3 副本形成对比见 blue_green_rollout 练习stableService承载稳定旧版本的 Service 名称稳定流量始终指向它canaryService承载金丝雀新版本的 Service 名称用于接收被按权重切分的部分流量trafficRouting.ambassador.mappings声明由 Ambassador API 网关负责真实流量切分需要提前创建对应的 Mapping 资源不配置流量路由时Argo Rollouts 仅按副本数比例滚动如 6 副本中 30% ≈ 2 个金丝雀 Podsteps[].setWeight每次将金丝雀流量权重调整为指定百分比30/60/100steps[].pause: {}无参暂停等价于禁用自动提升发布到该权重后自动停下来等待人工promote指令或 Analysis 通过后才继续下一步4.2 禁用自动提升在 Canary 策略中的落地方式练习目标明确要求禁用自动提升。在 Canary 策略下这一要求通过pause: {}步骤实现每个权重台阶后发布都会自动暂停只有执行kubectl argo rollouts promote才会进入下一步从而把每次放量都置于人工/自动化分析的控制之下。若要在蓝绿策略下达到同样效果则使用autoPromotionEnabled: false字段参考蓝绿解决方案两种策略的实现机制不同效果一致。五、第三步应用清单并检查 Rollout 列表# 应用 Rollout 清单 kubectl apply -f canary-rollout.yaml # 查看所有 Rollout 及其状态 kubectl argo rollouts list rolloutslist rollouts会以表格形式展示每个 Rollout 的名称、当前策略Strategy、步骤Steps、状态Status等摘要信息用于确认控制器已成功接管并正确解析了 Canary 策略。六、第四步发布新版本并监控灰度过程6.1 触发新版本发布# 将 some-app 的 web-app 容器镜像升级为 v2.0触发一次新的 rollout kubectl argo rollouts set image some-app web-appsome/registry/and/image:v2.0命令格式为kubectl argo rollouts set image ROLLOUT_NAME CONTAINER_NAMEIMAGE:TAG。执行后 Argo Rollouts 会为 v2.0 创建新的 ReplicaSet旧版 ReplicaSet 仍存活随后开始执行清单中定义的步骤序列。6.2 实时监控发布状态# 持续跟踪 rollout 进度--watch 实时刷新 kubectl argo rollouts get rollout some-app --watch输出会显示当前处于哪个步骤、已分配的流量权重如Step: 1/6, setWeight: 30、新旧两个 ReplicaSet 各自的可用副本数以及是否处于Paused状态。6.3 手动推进与状态查询配套命令结合 Argo 主题文档 中的 CLI 问答灰度发布周期内还会高频使用以下命令# 查看某个应用/rollout 的详细信息 kubectl argo rollouts get rollout some-app # 查看发布状态是否完成/是否卡在暂停点 kubectl argo rollouts status some-app # 手动推进到下一个步骤解除 pause 卡点 kubectl argo rollouts promote some-app典型操作节奏为发布后观察 30% 权重下的运行状况 → 确认无误后promote到 60% → 再次确认 →promote到 100% → 最终确认后完成发布。七、进阶用 Analysis 实现自动化灰度判断参考阅读练习本身使用人工 pause 卡点但 Argo Rollouts 更进阶的用法是结合AnalysisTemplate自动决定继续发布还是回滚。仓库 Argo 主题文档 中给出了一个 Prometheus 指标分析的完整示例apiVersion: argoproj.io/v1alpha1 kind: AnalysisTemplate metadata: name: success-rate spec: args: - name: service-name metrics: - name: success-rate interval: 4m # 每 4 分钟采样一次 count: 3 # 共采样 3 次 successCondition: result[0] 0.90 # 成功率 90% 视为通过 provider: prometheus: address: http:/some-prometheus-instance:80 query: sum(response_status{app{{args.service-name}},rolecanary,status~2.*})/sum(response_status{app{{args.service-name}},rolecanary})其含义是从 Prometheus 拉取金丝雀角色的响应状态数据若成功率高于 0.90发布继续若低于 0.90则自动执行回滚金丝雀部署判定失败。将此类 AnalysisTemplate 与pause步骤结合即可把练习中的人工放量升级为指标驱动的自动化灰度这也是 Argo Rollouts 支持集成指标分析与自动回滚能力的直接体现。八、完整操作流程回顾kubectl create namespace argo-rollouts→kubectl apply -n argo-rollouts -f .../install.yaml安装控制器编写含strategy.canary的 Rollout 清单6 副本、stableService/canaryService、Ambassador 流量路由、setWeightpause步骤执行kubectl apply -fkubectl argo rollouts list rollouts确认 Rollout 被正确管理kubectl argo rollouts set image some-app web-appsome/registry/and/image:v2.0触发新版本发布kubectl argo rollouts get rollout some-app --watch监控灰度进度并在每个暂停点评估后promote推进如需验证发布结果可配合kubectl argo rollouts status some-app确认最终状态。延伸阅读Canary Rollout 练习文档本文主体Canary Rollout 官方解决方案Argo 主题总览与 Rollouts 问答概念、AnalysisTemplate、CLI 命令全集Blue/Green 蓝绿发布对照练习 及其解决方案可与 Canary 策略对比学习赞分享文档教程DevOps运维【免费下载链接】devops-exercisesLinux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions项目地址https://gitcode.com/GitHub_Trending/de/devops-exercises点击查看免费下载相关推荐REFramework游戏修改框架兼容性深度分析与崩溃修复终极指南REFramework游戏修改框架兼容性深度分析与崩溃修复终极指南 REFramework作为一款功能强大的游戏修改框架、脚本平台和VR支持工具为所有RE E游戏开发VRface_recognition调参实战face_distance与tolerance详解彻底解决误识别难题face_recognition调参实战face_distance与tolerance详解彻底解决误识别难题 face_recognition 是 Pyth人工智能计算机视觉深度学习Argo Rollouts 结合 Linkerd 实现金丝雀发布的流量管理实践Argo Rollouts 结合 Linkerd 实现金丝雀发布的流量管理实践 引言 在现代微服务架构中金丝雀发布Canary Release已成为保障服云原生灰度发布DevOps后端上一篇NoSleep防休眠工具终极Windows屏幕锁定解决方案告别自动休眠烦恼下一篇终极NxNandManager指南如何快速管理你的任天堂Switch NAND存储创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表