全部產品
Search
文件中心

Container Service for Kubernetes:基於ACK One GitOps部署的應用樣本介紹

更新時間:Jul 25, 2025

本文介紹基於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.yamlvalues-staging.yamlvalues-production.yaml

    • 如果在Dev環境不需要開啟Rollout滾動升級,而Staging、Production環境下需要開啟Rollout滾動升級,您可以在不同的values.yaml中配置不同的資訊。

    • 請將values-****.yaml檔案中鏡像倉庫的資訊修改為您實際使用的Container RegistryACR企業版執行個體(ACR EE)。本實踐使用的ACR EE執行個體名稱為demo-test,命名空間為cidemo,請您根據實際情況配置。acr-ee.png

  • 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流水線

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和Kustomize兩種方式在不同環境(Dev、Staging、Production)部署Application的YAML樣本。請您根據實際情況修改argocd-image-updater.argoproj.io/image-listrepoURL配置。

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

相關文檔