Kubernetes 是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、扩缩和管理。
演示#
示例1#
同步代码#
克隆GitHub示例至本地Git仓库,argoCD创建应用并运行!
- 克隆仓库
- GitLab导入仓库

- 等待同步
创建应用#
- 应用参数


- 部署

蓝绿发布#
核心思想: 同时存在两个版本的完整环境,通过切换 Service 的 Selector 来改变流量方向。#
- 配置关键点:
- Active Service: 始终指向当前生产环境(旧版本)。
- Preview Service: 指向新版本(用于测试验证)。
- Auto-Promotion: 可配置验证通过后自动切换,或手动触发。
- ArgoCD 执行流程:
- Git 提交: 用户修改 Git 中的镜像版本。
- 同步: ArgoCD 检测到变化,更新集群中的
Rollout对象。 - 创建新副本: Rollout 控制器根据新版本创建一组新的 Pod(Green)。
- 验证: 流量依然在 Active Service(Blue),开发者通过 Preview Service 验证新版本。
- 切换: 验证通过后,Rollout 将 Active Service 的 Selector 更新为新版本的 Label。
- 清理: 旧版本(Blue)的 Pod 会在保留一段时间后被删除。
镜像信息:#
- argoproj/rollouts-demo:blue
- argoproj/rollouts-demo:green
- argoproj/rollouts-demo:yellow
创建蓝绿#
- 创建服务【命令方式】
argocd app create --name blue-green --repo https://gitlab.uat.artoio.com/root/argocd-example-apps.git --dest-server https://kubernetes.default.svc --dest-namespace default --path blue-green && argocd app sync blue-green
- 仪表盘

更新版本#
- 发布镜像
- argoproj/rollouts-demo:green
argocd app set argocd/blue-green -p image.tag=green -p image.repository=argoproj/rollouts-demo && argocd app sync blue-green
- 状态查看
- 状态从蓝色逐渐切换到绿色

- 回滚操作
- 回滚上一个版本
kubectl argo rollouts undo blue-green-helm-guestbook -n blue-green
1. 回滚指定版本
kubectl argo rollouts undo blue-green-helm-guestbook -n blue-green --to-revision=7
历史版本#
revisionHistoryLimit#
- 一种是查看当前的配置声明,另一种是查看集群中实际保留的 ReplicaSets 数量。
- 控制历史版本的 存留数量
- 查看
kubectl argo rollouts list rollouts -n blue-green
root@kubernetes01:/var/lib/longhorn/applications/vs# kubectl argo rollouts list rollouts -n blue-green
NAME STRATEGY STATUS STEP SET-WEIGHT READY DESIRED UP-TO-DATE AVAILABLE
blue-green-helm-guestbook BlueGreen Healthy - - 1/1 1 1 1
- 详细信息
kubectl argo rollouts get rollouts blue-green-helm-guestbook -n blue-green
root@kubernetes01:/var/lib/longhorn/applications/vs# kubectl argo rollouts get rollouts blue-green-helm-guestbook -n blue-green
Name: blue-green-helm-guestbook
Namespace: blue-green
Status: ✔ Healthy
Strategy: BlueGreen
Images: argoproj/rollouts-demo:green (stable, active)
Replicas:
Desired: 1
Current: 1
Updated: 1
Ready: 1
Available: 1
NAME KIND STATUS AGE INFO
⟳ blue-green-helm-guestbook Rollout ✔ Healthy 96m
├──# revision:15
│ └──⧉ blue-green-helm-guestbook-55c5cbc459 ReplicaSet ✔ Healthy 26m stable,active
│ └──□ blue-green-helm-guestbook-55c5cbc459-78zxn Pod ✔ Running 17m ready:1/1
├──# revision:14
│ └──⧉ blue-green-helm-guestbook-5cdfc689b6 ReplicaSet • ScaledDown 64m
├──# revision:13
│ └──⧉ blue-green-helm-guestbook-77566bc85d ReplicaSet • ScaledDown 73m
└──# revision:12
└──⧉ blue-green-helm-guestbook-8447f79dc8 ReplicaSet • ScaledDown 63m
金丝雀发布#
核心思想: 逐步将一小部分流量引导至新版本,观察其表现后再全量扩容。#
- 配置关键点:
- Steps: 定义发布的节奏(例如:先给 10% 流量,等待 1 小时,再增加到 50%)。
- Traffic Management: 通常配合 Istio, Nginx Ingress 或 SMI (Service Mesh Interface) 精确控制流量比例。
- ArgoCD 执行流程:
- 发布开始: ArgoCD 同步新配置,Rollout 创建第一批金丝雀 Pod。
- 流量切分: 控制器修改网关配置(如 Istio VirtualService),将 10% 流量导向新版本。
- 暂停与观察: 流程进入
setWeight或pause阶段。 - 指标分析 (Analysis): Argo Rollouts 可以自动查询 Prometheus 指标。如果错误率 $> 5%$,自动回滚。
- 逐步迭代: 如果分析正常,继续执行后续步骤(20% -> 50% -> 100%)。
- 完成: 旧版本缩容,新版本完全接管流量。
总结#
| 特性 | 蓝绿发布 (Blue-Green) | 金丝雀发布 (Canary) |
|---|---|---|
| 风险承担 | 较低(可瞬间回滚) | 极低(仅影响极少数用户) |
| 资源消耗 | 较高(需要 2 倍资源) | 较低(逐步替换 Pod) |
| 流量控制 | 全量切换 (All or Nothing) | 细粒度百分比控制 |
| 适用场景 | 无法支持多版本并存的业务 | 现代微服务、高频发布场景 |
| Argo 核心对象 | <font style="color:rgb(68, 71, 70);">spec.strategy.blueGreen</font> | <font style="color:rgb(68, 71, 70);">spec.strategy.canary</font> |
参考文档


