跳过正文
ArgoCD【入门篇】
  1. 云原生/

ArgoCD【入门篇】

·1200 字·3 分钟·
目录
kubernetes - 这篇文章属于一个选集。
§ 1: 本文

Kubernetes 是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、扩缩和管理。

演示
#

示例1
#

同步代码
#

克隆GitHub示例至本地Git仓库,argoCD创建应用并运行!

  1. 克隆仓库
    1. https://github.com/argoproj/argocd-example-apps.git
  2. GitLab导入仓库

  1. 等待同步

创建应用
#

  1. 应用参数

  1. 部署

蓝绿发布
#

核心思想: 同时存在两个版本的完整环境,通过切换 Service 的 Selector 来改变流量方向。
#

  • 配置关键点:
    • Active Service: 始终指向当前生产环境(旧版本)。
    • Preview Service: 指向新版本(用于测试验证)。
    • Auto-Promotion: 可配置验证通过后自动切换,或手动触发。
  • ArgoCD 执行流程:
    1. Git 提交: 用户修改 Git 中的镜像版本。
    2. 同步: ArgoCD 检测到变化,更新集群中的 Rollout 对象。
    3. 创建新副本: Rollout 控制器根据新版本创建一组新的 Pod(Green)。
    4. 验证: 流量依然在 Active Service(Blue),开发者通过 Preview Service 验证新版本。
    5. 切换: 验证通过后,Rollout 将 Active Service 的 Selector 更新为新版本的 Label。
    6. 清理: 旧版本(Blue)的 Pod 会在保留一段时间后被删除。

镜像信息:
#

  • argoproj/rollouts-demo:blue
  • argoproj/rollouts-demo:green
  • argoproj/rollouts-demo:yellow

创建蓝绿
#

  1. 创建服务【命令方式】
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
  1. 仪表盘

更新版本
#

  1. 发布镜像
    1. 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
  1. 状态查看
    1. 状态从蓝色逐渐切换到绿色

  1. 回滚操作
    1. 回滚上一个版本
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 数量
  • 控制历史版本的 存留数量
  1. 查看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  
  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 执行流程:
    1. 发布开始: ArgoCD 同步新配置,Rollout 创建第一批金丝雀 Pod。
    2. 流量切分: 控制器修改网关配置(如 Istio VirtualService),将 10% 流量导向新版本。
    3. 暂停与观察: 流程进入 setWeightpause 阶段。
    4. 指标分析 (Analysis): Argo Rollouts 可以自动查询 Prometheus 指标。如果错误率 $> 5%$,自动回滚。
    5. 逐步迭代: 如果分析正常,继续执行后续步骤(20% -> 50% -> 100%)。
    6. 完成: 旧版本缩容,新版本完全接管流量。

总结
#

特性蓝绿发布 (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>

参考文档

  1. kubeadm 官方文档
  2. Kubernetes 集群搭建

结语
#


kubernetes - 这篇文章属于一个选集。
§ 1: 本文

相关文章


微信赞赏
微信赞赏
关注公众号
关注公众号
支付宝赞赏
支付宝赞赏