Argo CD 支持 Canary 和 Blue-Green 部署模式,以下是使用 Argo CD 进行 Canary 和 Blue-Green 部署的步骤:
Canary 部署
Canary 部署模式可以让你逐渐将新版本应用程序引入到生产环境中,并在确保稳定性的情况下逐步增加流量。
- 准备工作
首先,你需要安装并配置好以下工具:
- Kubernetes 集群
- kubectl 工具
- Helm 包管理器
- Argo CD 工具
- 创建应用程序
在 Argo CD 的 UI 界面中创建一个新的应用程序,并指定该应用程序所在的 Git 仓库和分支。例如,你可以使用以下 YAML 文件创建名为 myapp
的应用程序:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp
spec:
destination:
namespace: default
server: https://kubernetes.default.svc.cluster.local
project: default
source:
path: .
repoURL: https://github.com/username/myapp.git
targetRevision: HEAD
syncPolicy:
automated:
prune: true
selfHealTimeout: 3600s
其中,destination.namespace
表示目标命名空间;destination.server
表示目标 Kubernetes API Server 地址;project
表示项目名称;source.path
表示源代码路径;source.repoURL
表示 Git 仓库地址;source.targetRevision
表示要同步的 Git 分支或提交。
- 定义部署模板
在 Git 仓库中定义 Kubernetes 部署模板,例如使用 Helm Chart。
- 启用自动同步
在应用程序的 syncPolicy
中启用自动同步,这样 Argo CD 就会自动检测 Git 仓库中的变更,并将其同步到 Kubernetes 集群中。例如:
syncPolicy:
automated:
prune: true
selfHealTimeout: 3600s
其中,prune
表示删除未在 Git 仓库中定义的资源;selfHealTimeout
表示重新同步之前等待的时间。
- 定义环境
在 Argo CD 的 UI 界面中创建一个新的环境(如开发环境、测试环境、生产环境等),并指定该环境所在的 Kubernetes 集群和命名空间。例如:
apiVersion: argoproj.io/v1alpha1
kind: Environment
metadata:
name: dev
spec:
clusterName: mycluster
namespace: development
- 定义发布策略
定义 Canary 发布策略,例如:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: myapp-canary-rollout
spec:
strategy: Canary
其中,strategy
表示采用 Canary 策略。
- 定义 Canary 规则
在 Kubernetes 中定义 Canary 规则,例如:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: myapp-canary-vs
spec:
hosts:
- myapp.example.com
http:
- route:
- destination:
host: myapp
subset: v1
weight: 90
- destination:
host: myapp
subset: v2
weight: 10
其中,subset
表示版本号;weight
表示流量占比。
- 执行持续交付
当代码提交到 Git 仓库时,Argo CD 就会自动检测变更,并执行持续交付流程。新版本的应用程序会先部署到 Canary 环境中,并将一小部分流量引入到生产环境中。如果没有发现问题,就可以逐步增加流量。
Blue-Green 部署
Blue-Green 部署模式可以让你在完全安装新版本应用程序之前,在一个与生产环境相同的环境中进行测试和验证。
- 准备工作
首先,你需要安装并配置好以下工具:
- Kubernetes 集群
- kubectl 工具
- Helm 包管理器
- Argo CD 工具
- 创建应用程序
在 Argo CD 的 UI 界面中创建一个新的应用程序,并指定该应用程序所在的 Git 仓库和分支。例如,你可以使用以下 YAML 文件创建名为 myapp
的应用程序:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp
spec:
destination:
namespace: default
server: https://kubernetes.default.svc.cluster.local
project: default
source:
path: .
repoURL: https://github.com/username/myapp.git
targetRevision: HEAD
syncPolicy:
automated:
prune: true
selfHealTimeout: 3600s
其中,destination.namespace
表示目标命名空间;destination.server
表示目标 Kubernetes API Server 地址;project
表示项目名称;source.path
表示源代码路径;source.repoURL
表示 Git 仓库地址;source.targetRevision
表示要同步的 Git 分支或提交。
- 定义部署模板
在 Git 仓库中定义 Kubernetes 部署模板,例如使用 Helm Chart。
- 启用自动同步
在应用程序的 syncPolicy
中启用自动同步,这样 Argo CD 就会自动检测 Git 仓库中的变更,并将其同步到 Kubernetes 集群中。例如:
syncPolicy:
automated:
prune: true
selfHealTimeout: 3600s
其中,prune
表示删除未在 Git 仓库中定义的资源;selfHealTimeout
表示重新同步之前等待的时间。
- 定义环境
在 Argo CD 的 UI 界面中创建一个新的环境(如开发环境、测试环境、生产环境等),并指定该环境所在的 Kubernetes 集群和命名空间。例如:
apiVersion: argoproj.io/v1alpha1
kind: Environment
metadata:
name: dev
spec:
clusterName: mycluster
namespace: development
- 定义发布策略
定义 Blue-Green 发布策略,例如:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: myapp-bluegreen-rollout
spec:
strategy: BlueGreen
其中,strategy
表示采用 Blue-Green 策略。
- 定义新版本规则
在 Kubernetes 中定义新版本规则,例如:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: myapp-new-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- pathType: Prefix
path: /
backend:
servicePort: 80
serviceName: myapp-new
其中,serviceName
表示使用新版本服务;servicePort
表示服务端口号。
- 执行持续交付
当代码提交到 Git 仓库时,Argo CD 就会自动检测变更,并执行持续交付流程。新版本的应用程序会先部署到与生产环境相同的环境中,并进行测试和验证。如果一切正常,就可以切换流量到新版本应用程序上。 内容由零声教学AI助手生成,来源于学员提问