本文介紹基於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檔案中鏡像倉庫的資訊修改為您實際使用的Container RegistryACR企業版執行個體(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環境