赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 分布式云容器平台ACK One
  4. 实践教程
  5. CICD
  6. ACK One GitOps最佳实践
  7. 基于ACK One GitOps部署的应用示例介绍

基于ACK One GitOps部署的应用示例介绍

  • ACK One GitOps最佳实践
  • 发布于 2025-04-18
  • 0 次阅读
文档编辑
文档编辑

本文介绍基于ACK One GitOps部署的应用示例。

应用部署仓库的目录结构

一个完整的CI/CD流水线中,涉及业务代码仓库和应用部署代码仓库两类。ACK One GitOps本实践的仓库说明如下。

  • 业务代码仓库包含2个,分别从echo-server项目和echo-web-server项目Fork得到。

  • 应用部署代码仓库用于存放您需要部署到集群中的应用的YAML。本实践覆盖完整研发流程的开发(Dev)、预发(Staging)、生产(Production)环境的示例,包含Helm和Kustomize两种方式,实际使用中任选一种。更多信息,请参见阿里云GitOps Demo。本实践目录结构如下所示。

    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。acr-ee.png

  • Kustomize管理的应用

    由于此类应用需基于base+overlay的方式完成资源的修改,所以针对不同环境的差异化配置,您可以在overlay中使用不同的目录来实现。

目录结构中的.argocd-source-app-helm-xxx.yaml和.argocd-source-app-kust-xxx.yaml文件,为应用镜像更新后,Image Updater自动将最新的镜像信息更新到Git仓库的文件,具体内容如下图所示。关于Application配置的更多信息,请参见基于ACK One GitOps和ACR构建CI/CD流水线。

3.png

敏感信息多集群差异化分发

如果您需要在多集群中实现差异化配置、并且使用数据库的用户名和密码等敏感信息,基于上述的多集群差异化部署后,您可以使用凭据管家进行加密管理,然后在各个集群中为应用导入阿里云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

对应以上目录结构,Helm目录下的应用对应各环境下的Application如下。

  • Dev环境

    展开查看对应的Dev环境下的Application

    apiVersion: argoproj.io/v1alpha1
    kind: Application
    metadata:
      name: app-helm-dev
      annotations:
        argocd-image-updater.argoproj.io/image-list: echoserver=demo-test-registry.cn-hangzhou.cr.aliyuncs.com/cidemo/echo-server,webserver=demo-test-registry.cn-hangzhou.cr.aliyuncs.com/cidemo/echo-web-server
        argocd-image-updater.argoproj.io/echoserver.helm.image-name: image.echoServer.repository
        argocd-image-updater.argoproj.io/echoserver.helm.image-tag: image.echoServer.tag
        argocd-image-updater.argoproj.io/echoserver.update-strategy: latest
        argocd-image-updater.argoproj.io/webserver.helm.image-name: image.echoWebServer.repository
        argocd-image-updater.argoproj.io/webserver.helm.image-tag: image.echoWebServer.tag
        argocd-image-updater.argoproj.io/webserver.update-strategy: latest
        argocd-image-updater.argoproj.io/write-back-method: git
    spec:
      destination:
        namespace: app-helm-dev
        # https://XX.XX.XX.XX:6443
        server: ${url}
      source:
        path: manifests/helm/echo-server
        repoURL: 'git@github.com:ivan-cai/gitops-demo.git'
        targetRevision: stable-example
        helm:
          valueFiles:
            - values-dev.yaml
      sources: []
      project: default
      syncPolicy:
        automated: {}
        syncOptions:
          - CreateNamespace=true

  • Staging环境

    展开查看对应的Staging环境下的Application

    apiVersion: argoproj.io/v1alpha1
    kind: Application
    metadata:
      name: app-helm-staging
      annotations:
        argocd-image-updater.argoproj.io/image-list: echoserver=demo-test-registry.cn-hangzhou.cr.aliyuncs.com/cidemo/echo-server,webserver=demo-test-registry.cn-hangzhou.cr.aliyuncs.com/cidemo/echo-web-server
        argocd-image-updater.argoproj.io/echoserver.helm.image-name: image.echoServer.repository
        argocd-image-updater.argoproj.io/echoserver.helm.image-tag: image.echoServer.tag
        argocd-image-updater.argoproj.io/echoserver.update-strategy: latest
        argocd-image-updater.argoproj.io/webserver.helm.image-name: image.echoWebServer.repository
        argocd-image-updater.argoproj.io/webserver.helm.image-tag: image.echoWebServer.tag
        argocd-image-updater.argoproj.io/webserver.update-strategy: latest
        argocd-image-updater.argoproj.io/write-back-method: git
    spec:
      destination:
        namespace: app-staging
        # https://XX.XX.XX.XX:6443
        server: ${url}
      source:
        path: manifests/helm/echo-server
        repoURL: 'git@github.com:ivan-cai/gitops-demo.git'
        targetRevision: stable-example
        helm:
          valueFiles:
            - values-staging.yaml
      sources: []
      project: default
      syncPolicy:
        syncOptions:
          - CreateNamespace=true
  • Production环境

    展开查看对应的Production环境下的Application

    apiVersion: argoproj.io/v1alpha1
    kind: Application
    metadata:
      name: app-helm-production
      annotations:
        argocd-image-updater.argoproj.io/image-list: echoserver=demo-test-registry.cn-hangzhou.cr.aliyuncs.com/cidemo/echo-server,webserver=demo-test-registry.cn-hangzhou.cr.aliyuncs.com/cidemo/echo-web-server
        argocd-image-updater.argoproj.io/echoserver.helm.image-name: image.echoServer.repository
        argocd-image-updater.argoproj.io/echoserver.helm.image-tag: image.echoServer.tag
        argocd-image-updater.argoproj.io/echoserver.update-strategy: latest
        argocd-image-updater.argoproj.io/webserver.helm.image-name: image.echoWebServer.repository
        argocd-image-updater.argoproj.io/webserver.helm.image-tag: image.echoWebServer.tag
        argocd-image-updater.argoproj.io/webserver.update-strategy: latest
        argocd-image-updater.argoproj.io/write-back-method: git
    spec:
      destination:
        namespace: app-production
        # https://XX.XX.XX.XX:6443
        server: ${url}
      source:
        path: manifests/helm/echo-server
        repoURL: 'git@github.com:ivan-cai/gitops-demo.git'
        targetRevision: stable-example
        helm:
          valueFiles:
            - values-production.yaml
      project: default
      syncPolicy:
        syncOptions:
          - CreateNamespace=true

Kustomize

对应以上目录结构,Kustomize目录下的应用对应各环境下的Application如下。

  • Dev环境

    展开查看对应的Dev环境下的Application

    apiVersion: argoproj.io/v1alpha1
    kind: Application
    metadata:
      annotations:
        argocd-image-updater.argoproj.io/image-list: echoserver=demo-test-registry.cn-hangzhou.cr.aliyuncs.com/cidemo/echo-server:v1.0
        argocd-image-updater.argoproj.io/echoserver.kustomize.image-name: demo-test-registry.cn-hangzhou.cr.aliyuncs.com/cidemo/echo-server
        argocd-image-updater.argoproj.io/echoserver.update-strategy: latest
        argocd-image-updater.argoproj.io/write-back-method: git
      name: app-kust-dev
    spec:
      destination:
        namespace: app-kust-dev
        # https://XX.XX.XX.XX:6443
        server: ${url}
      source:
        path: manifests/kustomize/overlay/dev
        repoURL: 'git@github.com:ivan-cai/gitops-demo.git'
        targetRevision: stable-example
        kustomize:
          images: []
      project: default
      syncPolicy:
        automated: {}
        syncOptions:
          - CreateNamespace=true

  • Staging环境

    展开查看对应的Staging环境下的Application

    apiVersion: argoproj.io/v1alpha1
    kind: Application
    metadata:
      annotations:
        argocd-image-updater.argoproj.io/image-list: echoserver=demo-test-registry.cn-hangzhou.cr.aliyuncs.com/cidemo/echo-server:v1.0
        argocd-image-updater.argoproj.io/echoserver.kustomize.image-name: demo-test-registry.cn-hangzhou.cr.aliyuncs.com/cidemo/echo-server
        argocd-image-updater.argoproj.io/echoserver.update-strategy: latest
        argocd-image-updater.argoproj.io/write-back-method: git
      name: app-kust-staging
    spec:
      destination:
        namespace: app-staging-kust
        # https://XX.XX.XX.XX:6443
        server: ${url}
      source:
        path: manifests/kustomize/overlay/staging
        repoURL: 'git@github.com:ivan-cai/gitops-demo.git'
        targetRevision: stable-example
        kustomize:
          images: []
      sources: []
      project: default
      syncPolicy:
        syncOptions:
          - CreateNamespace=true
  • Production环境

    展开查看对应的Production环境下的Application

    apiVersion: argoproj.io/v1alpha1
    kind: Application
    metadata:
      annotations:
        argocd-image-updater.argoproj.io/image-list: echoserver=demo-test-registry.cn-hangzhou.cr.aliyuncs.com/cidemo/echo-server:v1.0
        argocd-image-updater.argoproj.io/echoserver.kustomize.image-name: demo-test-registry.cn-hangzhou.cr.aliyuncs.com/cidemo/echo-server
        argocd-image-updater.argoproj.io/echoserver.update-strategy: latest
        argocd-image-updater.argoproj.io/write-back-method: git
      name: app-kust-production
    spec:
      destination:
        namespace: app-production-kust
        # https://XX.XX.XX.XX:6443
        server: ${url}
      source:
        path: manifests/kustomize/overlay/production
        repoURL: 'git@github.com:ivan-cai/gitops-demo.git'
        targetRevision: stable-example
        kustomize:
          images: []
      project: default
      syncPolicy:
        syncOptions:
          - CreateNamespace=true

相关文档

  • 最佳实践概述

  • 使用ACK One分布式工作流集群构建容器镜像CI

  • 使用ACK One GitOps部署应用

  • 基于ACK One GitOps和ACR构建CI/CD流水线

  • 基于ACK One Gitops使用Argo Rollouts实现金丝雀发布

  • 基于ACK One Gitops使用Kruise Rollout实现金丝雀发布

  • 配置ACK One GitOps多租户权限

  • 使用ACK One GitOps部署ACR EE OCI Helm Chart

相关文章

最佳实践概述 2025-04-18 18:06

在完整的CI/CD流水线中,您可以通过修改代码自动触发CI构建,并将镜像推送到容器镜像服务ACR,然后触发ACK One GitOps将应用持续部署到各个集群。本文通过示例介绍完整流程中ACK One GitOps最佳实践的相关概念和流程。 相关概念

基于ACK One GitOps部署的应用示例介绍 2025-04-18 18:06

本文介绍基于ACK One GitOps部署的应用示例。 应用部署仓库的目录结构 一个完整的CI/CD流水线中,涉及业务代码仓库和应用部署代码仓库两类。ACK One GitOps本实践的仓库说明如下。 业务代码仓库包含2个,分别从echo-server项目

使用ACK One分布式工作流集群构建容器镜像CI 2025-04-18 18:06

本文介绍如何使用ACK One分布式工作流集群构建容器镜像CI。 前提条件 已创建工作流集群,从ACK One控制台获取分

使用ACK One GitOps部署应用 2025-04-18 18:06

ACK One GitOps托管并完全兼容ArgoCD相关能力,支持持续迭代,可通过使用Git部署模板代替模板化分发能力。本文介绍如何通过ACK One GitOps控制台或CLI的方式部署应用。 前提条件 已开启舰队管理功能。具体操作,请参见

基于ACK One GitOps和ACR构建CICD流水线 2025-04-18 18:06

ACK One GitOps可实现多集群GitOps应用的持续交付,容器镜像服务ACR支持绑定业务代码仓库,以实现应用的持续集成。本实践基于这两者构建开发(Dev)、预发(Staging)、生产(Production)集群的CI/CD流水线,实现代码修改提交到代码仓库后,自动将最新镜像更新至应用,并

基于ACK One Gitops使用Argo Rollouts实现金丝雀发布 2025-04-18 18:05

ACK One整合了ArgoCD GitOps的能力,同时结合渐进式发布组件Argo Rollouts,通过Git Commit实现全自动的金丝雀发布。本文介绍如何通过ACK One GitOps结合Argo Rollouts组件快速构建应用的金丝雀发布能力。

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号