ACK One GitOps是ACK One面向混合雲、多雲、多叢集等情境,提供的多叢集應用的GitOps持續傳遞能力,它通過託管開源Argo CD實現,完全相容Argo CD API(如Application)。和開源ArgoCD相比,具有多叢集分發能力、多使用者權限管理、開箱即用免營運等優勢。如果您需要在您的應用發布系統中整合ACK One GitOps,可以使用Go SDK來建立、刪除或同步(Sync)ArgoCD Application。本文基於Argo CD v2.9.3版本,為您介紹如何使用Go SDK建立Application。
Demo代碼配置
步驟一:擷取目的地組群的Server或Name
ArgoCD Application中需要指定目的地組群的Server或者Name。
-
從ACK One控制台擷取Fleet執行個體的KubeConfig,並通過kubectl串連至Fleet執行個體。
具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
-
執行以下命令擷取所有關聯集群的
Name列表或者Server列表。二者選擇其中一個即可。Name具有更好的可讀性,預設格式為<cluster id>-<cluster name>。-
擷取
Name列表kubectl get secret -nargocd -l argocd.argoproj.io/secret-type=cluster |awk 'NR>1 {print $1}'|xargs -I {} sh -c 'kubectl get secret -nargocd {} -ojsonpath="{.data.name}"|base64 -d; echo' -
擷取
Server列表kubectl get secret -nargocd -l argocd.argoproj.io/secret-type=cluster |awk 'NR>1 {print $1}'|xargs -I {} sh -c 'kubectl get secret -nargocd {} -ojsonpath="{.data.server}"|base64 -d; echo'
-
步驟二:擷取Token
在Fleet執行個體中建立一個單獨的Local User,為其產生Token,用於管理Application的操作。
-
建立Local User。
-
執行以下命令,編輯ArgoCD
argocd-cm的ConfigMap檔案。kubectl edit cm argocd-cm -n argocd -
在
argocd-cm的ConfigMap檔案中,添加如下所示的Local Userlocaluser1。data: accounts.localuser1: login,apiKey # 可以UI/CLI登入,並可以產生apiKey Token。 accounts.localuser1.enabled: "true" # 建立localuser1。 -
執行以下命令,查看Local User。
argocd account list預期輸出:
NAME ENABLED CAPABILITIES admin true login localuser1 true login,apiKey # 此處為上一步已建立的localuser1。
-
-
在
argocd-rbac-cm中為已建立的Local User添加ArgoCD的Kubernetes資源的RBAC許可權,如設定admin管理員權限(application、cluster、project等資源都有讀寫權限)。ArgoCD RBAC許可權詳細內容,請參見為使用者配置ArgoCD RBAC。
-
執行以下命令,編輯ArgoCD
argocd-rbac-cm的ConfigMap檔案。kubectl edit cm argocd-rbac-cm -n argocd -
在
argocd-rbac-cm的ConfigMap檔案中,參考以下樣本為Local User進行授權。重要請勿修改此ConfigMap檔案中已有的配置。
data: policy.csv: | g, "14***01", role:admin # 現有配置,請保留。 g, localuser1, role:admin # 新增配置,映射localuser1到角色admin。 scopes: '[uid]'
-
-
為Local User產生Token。
通過ArgoCD CLI方式產生
執行以下命令,設定密碼並產生認證Token。
# 設定密碼。 argocd account update-password \ --account localuser1 \ --current-password <admin password> \ --new-password <localuser1-password> # 擷取localuser1認證Token。 argocd account generate-token --account localuser1 eyJhb......通過ArgoCD UI產生
登入ACK One控制台,在左側導覽列選擇。
-
在多叢集GitOps頁面左上方單擊艦隊名稱後的
按鈕,在下拉式清單中選擇目標艦隊。然後單擊GitOps控制台,在彈出的登入頁面輸入使用者名稱密碼完成登入。 -
在ArgoCD控制台左側導覽列選擇Settings,然後選擇Accounts,找到添加的Local User並單擊使用者名稱稱。本文以localuser1為例。
-
在使用者頁面localuser1的Tokens地區中單擊Generate New產生Token,並儲存Token內容。
步驟三:操作Application範例程式碼
以下提供應用操作的範例程式碼,包括建立應用、同步應用、擷取應用詳情、更新應用、刪除應用。
-
Main入口。
說明-
請替換
Address為執行kubectl get svc -nargocd argocd-server -ojsonpath='{.status.loadBalancer.ingress[0].ip}'命令擷取到的ArgoCD Server LB IP。 -
請替換
Token為步驟二中擷取的Token內容。
-
-
應用管理範例程式碼。
基於ArgoCD的apiclient實現。需要替換
ClusterName、ClusterServer、GitRepoURL。
go.mod配置
Import ArgoCD go packages到您的Go專案時,在下載dependencies時,會遇到像"unknown revision v0.0.0"的錯誤,這是因為ArgoCD直接依賴於一些Kubernetes packages,這些packages的go.mod中包含這些未知的v0.0.0版本。
該問題可參考社區的Importing Argo CD go packages,通過增加replace來解決。但不同的ArgoCD版本對應的replace依賴的版本也不一樣,需要將replace中的kubernetes packages的版本設定為和ArgoCD版本一致。
本文提供的Demo中使用的是ArgoCD v2.9.3版本的go packages,因此需要將replace中所有的kubernetes packages設定為和v2.9.3版本對應的v0.24.17版本。完整的go.mod樣本如下:
相關文檔
-
ACK One GitOps的詳細功能介紹,請參見GitOps概述。
-
快速使用GitOps實現多叢集應用發布的流程,請參見GitOps快速入門。