【go云原生】持续交付Argo
最近更新:2025-01-10
|
字数总计:1.3k
|
阅读估时:5分钟
|
阅读量:次
- 持续交付Argo
- Argo CD组件与概念的介绍
- Argo CD环境的搭建
- Argo CD应用的持续交付
- Argo Rollout组件与概念介绍
- Argo Rollout蓝绿发布与金丝雀发布
- 蓝绿发布
- 金丝雀发布
持续交付Argo
Argo CD组件与概念的介绍
- Argo CD是什么
- 组件
- api server
- repository server
- application controller
- applicationset controller
- 概念
- applications
- projects
- repositories
- clusters
Argo CD环境的搭建
1 2 3 4 5 6 7 8 9 10 11 12
| kubectl create namespace argocd kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argocd/releases/download/v2.10.1/argocd-linux-amd64 sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd rm argocd-linux-amd64
kubectl patch svc argocd-server -n argocd -p '{"spec":{"type":"LoadBalancer"}}'
|
1 2 3 4 5 6
| argocd admin initial-password -n argocd argocd login 192.168.239.142:31294 argocd account update-password > admin > pass
|
Argo CD应用的持续交付
- 应用提交交付流程:
- 访问192.168.239.142:31294
- setting > repositories,维护远程仓库,添加要部署的应用程序的git地址,应用程序包括了deployment.yaml和service.yaml
- applications > new app,添加app(应用)
- projects:类似分组,没有可以填写default
- Source:选择刚才添加的仓库地址
- Destination:选择要部署的目标,一般是当前集群,记得选择命名空间
- 进行sync,同步部署
- 查看应用详情,在sync policy可以启用自动同步
- 修改源码中的deployment,完成后进行git commit
- 观察应用的同步状态
- 可以在发布历史中进行rollback和redeploy操作,进行rollback后因为和git版本不一致会处于outofsync状态。且不再会自动发布了。
Argo Rollout组件与概念介绍
- 概念:
- rollout:一个k8s工作负载资源,类似于k8s deployment对象,提供了k8s部署无法提供的功能:
- 蓝绿色部署
- 金丝雀部署
- 入口控制器和服务网格集成,实现高级流量路由(例如按照地域分流等)
- 与用于蓝绿和金丝雀分析的度量提供者的集成
- 基于成功或失败指标的自动升级或回滚
- 渐进式交付
- 是以可控和渐进的方式发布产品更新的过程,从而降低发布风险,通常将自动化和度量分析相结合,以推动更新的自动升级或回滚。
- 部署策略
- 滚动更新
- 重新创建
- 蓝绿发布(新旧版本同时存在)
- 金丝雀发布(按照百分比切换流量)
- 组件
- 控制器
- rollout资源
- 旧版本和新版本的副本集
- ingress/service
- 分析目标和分析运行
- Metrics Providers(内置了prometheus等指标提供商)
Argo Rollout蓝绿发布与金丝雀发布
1 2 3 4 5 6 7 8 9 10 11 12 13
| curl -LO https://github.com/argoproj/argorollouts/releases/download/v1.6.6/kubectl-argo-rollouts-linux-amd64 chmod +x ./kubectl-argo-rollouts-linux-amd64 mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts
kubectl argo rollouts version
kubectl argo rollouts dashboard
kubectl create namespace argo-rollouts kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
|
蓝绿发布
- bluegreen.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| apiVersion: v1 kind: Service metadata: name: mockapp-rollout-bluegreen-active spec: ports: - port: 80 name: http selector: rollout: bluegreen app: mockapp --- apiVersion: v1 kind Service metadata: name: mockapp-rollout-bluegreen-preview spec: ports: - port: 80 name: http selector: rollout: bluegreen app:mockapp --- apiVersion: argoproj.io/vlalpha1 kind: Rollout metadata: name: mockapp·rolout-bluegreen spec: replicas: 5 selector: matchLabels; app: mockapp rollout: bluegreen template: metadata: labels: app: mockapp rollout: bluegreen spec: imagePuisecrets: - name: argorolloutdockerauth containers: - name: mockapp image: 192.168.239.161:5000/mock-app:1.0.0 ports: - name: http containerPort: 80 protocol: TCP strategy: blueGreen: activeService: mockapp-rollout-bluegreen-active previewService: mockapp-rollout-bluegreen-preview autoPromotionEnabled: false
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| kubectl create -f bluegreen.yaml
kubectl argo rollouts get rollout mockapp-rollout-bluegreen --watch
vim bluegreen.yaml > image: 192.168.239.161:5000/mock-app:2.0.0 kubectl apply -f bluegreen.yaml kubectl argo rollouts get rollout mockapp-rollout-bluegreen --watch
kubectl argo rollouts promote mockapp-rollout-bluegreen
kubectl argo rollouts abort mockapp-rollout-bluegreen
|
金丝雀发布
- canary.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| apiVersion: v1 kind: Service metadata: name: mockapp-rollout-canary spec: ports: - port: 80 name: http selector: rollout: canary app: mockapp --- apiVersion: argoproj.io/vlalpha1 kind: Rollout metadata: name: mockapp·rolout-canary spec: replicas: 5 selector: matchLabels; app: mockapp rollout: canary template: metadata: labels: app: mockapp rollout: canary spec: imagePuisecrets: - name: argorolloutdockerauth containers: - name: mockapp image: 192.168.239.161:5000/mock-app:1.0.0 ports: - name: http containerPort: 80 protocol: TCP strategy: canary: steps: - setWeight: 20 - pause: {} - setWeight: 40 - pause: {duration: 10} - setWeight: 60 - pause: {duration: 10} - setWeight: 80 - pause: {duration: 10}
|
1 2 3 4 5 6 7 8 9 10 11 12
| kubectl apply -f canary.yaml kubectl argo rollouts get rollout mockapp-rollout-canary --watch
vim bluegreen.yaml > image: 192.168.239.161:5000/mock-app:2.0.0 kubectl apply -f bluegreen.yaml kubectl argo rollouts get rollout mockapp-rollout-canary --watch
kubectl argo rollouts promote mockapp-rollout-canary
kubectl argo rollouts abort mockapp-rollout-canary
|
2025-01-09
该篇文章被 Cleofwine
归为分类:
Go云原生