ACK One GitOps託管並完全相容ArgoCD相關能力,支援持續迭代,可通過使用Git部署模板代替模板化分發能力。本文介紹如何通過ACK One GitOps控制台或CLI的方式部署應用。
前提條件
已開啟艦隊管理功能。
艦隊的Fleet執行個體已添加兩個關聯集群(服務提供者叢集、服務消費者叢集)。
已從ACK One控制台擷取Fleet執行個體的KubeConfig,並通過kubectl串連至Fleet執行個體。
已安裝最新版阿里雲CLI並配置憑證。請參見安裝阿里雲CLI和配置憑證。如果是RAM使用者操作,請確保RAM使用者已授予AliyunAdcpFullAccess許可權。具體操作,請參見為RAM使用者授權。
已通過ArgoCD下載安裝最新版本的ArgoCD CLI。
已登入GitOps系統。具體操作,請參見登入GitOps系統。
通過ACK One GitOps部署應用
開啟ACK One GitOps後,您可以通過ACK One GitOps(ArgoCD)控制台和ArgoCD CLI兩種方式部署管理應用。
通過ACK One GitOps(ArgoCD)控制台部署應用
步驟一:在ArgoCD控制台添加Git Repo並同步至目的地組群
在瀏覽器中輸入已擷取到的ArgoCD Server網域名稱,訪問ArgoCD控制台。關於如何擷取網域名稱,請參見登入GitOps系統。
在ArgoCD首頁,單擊LOGIN VIA ALIYUN,登入ArgoCD控制台。
添加發布源Git Repo。
在左側導覽列,選擇Settings > Repositories,然後單擊+ CONNECT REPO。
在彈出面板中配置如下資訊,然後單擊CONNECT。

添加成功後,該頁面會顯示Git的CONNECTION STATUS為Successful。

建立ArgoCD Application,並發布應用到目的地組群。
在Applications頁面,單擊+ NEW APP,配置如下資訊。 Application將拉取Git Repo中的Helm Chart並部署到目的地組群的default命名空間。

配置完成,單擊頁面上方的CREATE。
建立完成後,在ArgoCD的Applications頁面,即可查看echo-server-app的應用狀態。

單擊目標應用下方的SYNC,將應用同步部署至目的地組群。
同步完成後,echo-server-app 應用的Status右側出現Healthy和Synced,表示應用已同步。單擊echo-server,即可查看該應用詳情,ArgoCD將展示應用相關Kubernetes資源的拓撲結構及相應的狀態。

步驟二:查看應用的實際部署情況
串連Fleet執行個體的KubeConfig,在Fleet執行個體中執行命令查看應用的實際部署情況。
執行以下命令,查看Fleet執行個體已關聯的關聯集群。
kubectl amc get managedcluster預期輸出:
Name Alias HubAccepted cd**** ackpro-cluster2 true ce**** ackpro-cluster1 true // GitOps部署的目的地組群。執行以下命令,通過
amc -m參數指定叢集,查看default命令空間下的Deployment、Service和Pod資源。kubectl amc get all -n default -m ce****預期輸出:
Run on ManagedCluster ce**** (ackpro-cluster1) NAME READY STATUS RESTARTS AGE pod/echo-server-5cf54bdbcb-jv58k 1/1 Running 0 59m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/echo-server LoadBalancer 192.XX.XX.XX 39.XX.XX.XX 8080:31769/TCP 59m 21d NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/echo-server 1/1 1 1 59m執行以下命令,訪問Loadbalancer Service的External-IP,驗證應用執行情況。
curl http://39.XX.XX.XX:8080/version預期輸出:
"Hello Echo Server v1.0"預期輸出表明,當前應用版本為v1.0。
步驟三:升級應用版本
將Git中的Image Tag版本v1.0修改為v2.0。

由於Git Repo發生變化,ArgoCD Application會顯示OutOfSync。
單擊黃色的OutOfSync表徵圖,可以查看詳細的區別。

區別如下圖所示。

單擊SYNC,發起同步,同步完成後,Pod Image Tag變成v2.0,與預期一致。

執行以下命令,訪問Service,查看實際版本。
curl http://39.XX.XX.XX:8080/version預期輸出:
"Hello Echo Server v2.0"預期輸出表明,應用版本已升級為v2.0版本。
步驟四:復原應用版本
版本升級為v2.0後,ArgoCD會保留之前的ReplicaSet,便於快速復原之前的版本。
在ACK one Fleet執行個體上執行以下命令,通過
amc -m參數,查看指定的關聯集群的資源狀態。kubectl amc get replicaset -n default -m ce****預期輸出:
Run on ManagedCluster ce**** (ackpro-cluster1) NAME DESIRED CURRENT READY AGE echo-server-55664c4677 1 1 1 26m // 版本v2.0。 echo-server-5cf54bdbcb 0 0 0 109m // 版本v1.0。如需復原到版本v1.0,可在應用頁面,單擊HISTORY AND ROLLBACK,查看應用的所有歷史版本。

選擇對應的v1.0版本進行復原,然後單擊Rollback。

此時,Pod Image Tag已經復原到v1.0,由於ArgoCD和Git Repo相比出現差異,因此應用狀態變為OutOfSync,在問題修複後,單擊SYNC發起同步。
說明ArgoCD也支援自動同步Git Repo資訊。
通過ArgoCD CLI部署應用
登入ArgoCD Server。
使用艦隊KubeConfig,執行以下命令,擷取ArgoCD Server LB IP。
kubectl get svc -nargocd argocd-server -ojsonpath='{.status.loadBalancer.ingress[0].ip}'執行以下命令,擷取admin密碼。
kubectl -nargocd get secret argocd-initial-admin-secret -ojsonpath='{.data.password}' |base64 -d登入ArgoCD Server。
argocd login <argocd server lb ip> Username: admin Password: 'admin:login' logged in successfully Context '<argocd server lb ip>' updated
執行以下命令,增加Git Repo。
argocd repo add https://github.com/AliyunContainerService/gitops-demo.git --name echo-server預期輸出:
Repository 'https://github.com/AliyunContainerService/gitops-demo.git' added執行以下命令,查看Git Repo列表。
argocd repo list預期輸出:
TYPE NAME REPO INSECURE OCI LFS CREDS STATUS MESSAGE PROJECT git https://github.com/AliyunContainerService/gitops-demo.git false false false false Successful default執行以下命令,查看叢集。
argocd cluster list預期輸出:
SERVER NAME VERSION STATUS MESSAGE PROJECT https://10.XX.XX.XX:XX ce****-ackpro-cluster1 Unknown Cluster has no applications and is not being monitored. https://10.XX.XX.XX:XX cd****-ackpro-cluster2 Unknown Cluster has no applications and is not being monitored. https://kubernetes.default.svc in-cluster Unknown Cluster has no applications and is not being monitored.您可以通過ACK one Fleet執行個體,添加新的關聯集群,ACK One將自動同步叢集到ArgoCD中。
執行以下命令,建立應用。
argocd app create echo-server --repo https://github.com/AliyunContainerService/gitops-demo.git --path manifests/helm --revision one-demo --dest-namespace default --dest-server https://10.0.XX.XX:6443預期輸出:
application 'echo-server' created執行以下命令,從Git中拉取同步應用,並部署到目的地組群中。
argocd app sync echo-server
通過ArgoCD ApplicationSet實現多叢集GitOps部署
關於實現多叢集GitOps部署的具體操作,請參見使用ApplicationSet建立多個應用。
通過ArgoCD Application部署OCI Helm Chart
關於部署OCI Helm Chart的具體操作,請參見使用ACK One GitOps部署ACR EE OCI Helm Chart。