本文介绍基于ACK One GitOps部署的应用示例。
应用部署仓库的目录结构
一个完整的CI/CD流水线中,主要涉及业务代码仓库和应用部署代码仓库两类。由于涉及到代码仓库的配置修改,需要您将以下代码仓库fork到您自己的账号下。
业务代码仓库:分别为echo-server项目和echo-web-server项目。
应用部署代码仓库:用于存放您需要部署到集群中的应用的YAML,请参见阿里云GitOps Demo项目(example分支),主要的目录结构如下所示。本实践覆盖完整研发流程的开发(Dev)、预发(Staging)、生产(Production)环境的示例,包含Helm和Kustomize两种方式,请结合实际使用其中一种方式部署。
manifests ├── helm │ ├── echo-server │ │ ├── .argocd-source-app-helm-dev.yaml │ │ ├── .argocd-source-app-helm-production.yaml │ │ ├── .argocd-source-app-helm-staging.yaml │ │ ├── Chart.yaml │ │ ├── templates │ │ │ ├── NOTES.txt │ │ │ ├── _helpers.tpl │ │ │ ├── deployment-echo-server.yaml │ │ │ ├── deployment-echo-web-server.yaml │ │ │ ├── external-secret.yaml │ │ │ ├── hpa.yaml │ │ │ ├── ingress.yaml │ │ │ ├── rollout.yaml │ │ │ ├── service-echo-server.yaml │ │ │ ├── service-echo-web-server.yaml │ │ │ ├── serviceaccount.yaml │ │ │ └── tests │ │ │ └── test-connection.yaml │ │ ├── values-dev.yaml │ │ ├── values-production.yaml │ │ ├── values-staging.yaml │ │ └── values.yaml │ └── web-demo │ ├── Chart.yaml │ ├── templates │ │ ├── deployment.yaml │ │ └── service.yaml │ └── values.yaml └── kustomize ├── base │ ├── deployment.yaml │ ├── kustomization.yaml │ └── service.yaml └── overlay ├── dev │ ├── .argocd-source-app-kust-dev.yaml │ ├── deployment.yaml │ └── kustomization.yaml ├── production │ ├── .argocd-source-app-kust-production.yaml │ ├── deployment.yaml │ └── kustomization.yaml └── staging ├── .argocd-source-app-kust-staging.yaml ├── deployment.yaml └── kustomization.yaml
该应用部署仓库的目录结构中使用Helm管理的echo-server项目,包含多环境或多集群、多个Deployment、多集群Secret管理、Rollout等能力。
多环境或多集群部署
关于Helm管理的应用和Kustomize管理的应用的配置说明如下。
Helm管理的应用
您可以使用不同的
values.yaml
进行差异化部署,例如,上述目录结构中的values-dev.yaml
、values-staging.yaml
、values-production.yaml
。如果在Dev环境不需要开启Rollout滚动升级,而Staging、Production环境下需要开启Rollout滚动升级,您可以在不同的
values.yaml
中配置不同的信息。请将
values-****.yaml
文件中镜像仓库的信息修改为您实际使用的容器镜像服务ACR企业版实例(ACR EE)。本实践使用的ACR EE实例名称为demo-test
,命名空间为cidemo
,请您根据实际情况配置。
Kustomize管理的应用
由于此类应用需基于base+overlay的方式完成资源的修改,所以针对不同环境的差异化配置,您可以在overlay中使用不同的目录来实现。
应用镜像更新后,Image Updater会自动将最新的镜像信息更新到Git仓库的文件.argocd-source-app-helm-xxx.yaml
和.argocd-source-app-kust-xxx.yaml
中,具体内容如下图所示。关于Application配置的更多信息,请参见基于ACK One GitOps和ACR构建CI/CD流水线。
敏感信息多集群差异化分发
如果您需要在多集群中实现差异化配置、并且使用数据库的用户名和密码等敏感信息,基于上述的多集群差异化部署后,您可以使用凭据管家进行加密管理,然后在各个集群中为应用导入阿里云KMS服务凭据。关于凭据管家的使用方式,请参见凭据管理快速入门。
使用此能力需要在应用部署仓库中添加相应的YAML(即external-secret.yaml
),在部署应用时,用于创建ExternalSecret触发从KMS中获取服务凭据,并且在deployment-echo-server.yaml
中挂载相应Secret。
本实践中在各环境对应的values-****.yaml
中需配置不同的信息,例如,Dev环境下,可以不开启secretManager能力。请您在实际使用中根据实际情况进行修改。
灰度发布
在预发(Staging)、生产(Production)环境中,一般需要通过Rollout能力实现滚动发布,所以需要在应用部署仓库中添加相应的YAML,用于部署Rollout资源来触发灰度、滚动升级,即目录结构中的rollout.yaml
。关于灰度发布的更多信息,请参见基于ACK One Gitops使用Argo Rollouts实现金丝雀发布和使用Kruise Rollout实现灰度发布(金丝雀&A/B Testing)。
部署仓库对应的Application
以下内容为Helm和Kustomize两种方式在不同环境(Dev、Staging、Production)部署Application的YAML示例。请您根据实际情况修改argocd-image-updater.argoproj.io/image-list
和repoURL
配置。
Helm
对应以上目录结构,Helm目录下的应用对应各环境下的Application如下。
Dev环境
Staging环境
Production环境
Kustomize
对应以上目录结构,Kustomize目录下的应用对应各环境下的Application如下。
Dev环境
Staging环境
Production环境