您可以在ACK One艦隊(Fleet)執行個體中通過GitOps將Git repositories作為應用來源,對多種編排方式(YAML manifests目錄、Helm Charts、Kustomize等)的應用實現版本管理、多叢集分發和持續部署。GitOps完全相容社區ArgoCD的使用方式,並提供了高可用的控制面。本文介紹如何在ACK One Fleet執行個體中使用GitOps實現多叢集應用發布的流程,協助您快速上手GitOps。
前提條件
已開啟艦隊管理功能。具體操作,請參見開啟艦隊管理功能。
艦隊執行個體已添加多個關聯集群。具體操作,請參見添加關聯集群。
已授予RAM使用者AliyunAdcpFullAccess許可權。具體操作,請參見為RAM使用者授權。
(CLI方式需要)已從ACK One控制台擷取Fleet執行個體的KubeConfig,並通過kubectl串連至Fleet執行個體。
(CLI方式需要)已安裝最新版本阿里雲CLI並配置阿里雲CLI。
計費說明
開啟GitOps後,ACK One會預設建立以下資源。
建立一個SLB執行個體,通過此SLB暴露ArgoCD的API和UI訪問端點。
建立一個隨用隨付的2核4 GB的ECI執行個體,用於運行ArgoCD服務。
具體計費資訊,請參見多叢集艦隊雲產品資源計費。
開通地區
已開通ACK One艦隊管理功能的地區均可使用。更多資訊,請參見多叢集艦隊和工作流程叢集支援地區。
步驟一:在ACK One Fleet執行個體中開啟公網訪問GitOps控制台
ACK One Fleet執行個體建立時,預設會開啟GitOps功能,並支援VPC內網訪問GitOps控制台(需要您的辦公網與雲上VPC打通)。
如果您需要通過公網訪問GitOps控制台,如提交和查看應用,可根據以下步驟開啟公網訪問GitOps控制台。
開啟公網訪問後會有一定的安全風險,因此,在開啟公網訪問時必須配置存取控制(ACL)。
通過控制台開啟
登入ACK One控制台,在左側導覽列選擇 。
在多叢集應用頁面左上方單擊艦隊名稱後的按鈕,在下拉式清單中選擇目標艦隊。
建立艦隊預設已開啟GitOps,如果您的艦隊未開啟,可單擊開啟GitOps,在彈出的對話方塊中單擊確定完成開啟。
若艦隊已開啟GitOps,多叢集應用頁面會顯示GitOps控制台和存取控制。
在多叢集應用頁面,單擊存取控制,在彈出的存取控制對話方塊中開啟公網訪問,並在輸入框中輸入需要加入白名單的IP地址或位址區段,然後單擊確定。
開啟公網訪問後,可單擊GitOps控制台,通過公網訪問GitOps控制台。
通過阿里雲CLI開啟
確保阿里雲CLI為最新版本後,執行以下命令,開啟GitOps並開通公網訪問。
替換以下
<your_clusterid>
為您的Fleet執行個體ID。替換
AccessControlList
中的值為您的控制白名單位址區段,如何擷取,請參見開通公網訪問GitOps。
aliyun adcp UpdateHubClusterFeature --ClusterId <your_clusterid> --PublicAccessEnabled true --AccessControlList "[\"10.100.XX.XX/24\"]" --ArgoCDEnabled true
可選:如果您使用的是RAM使用者的AK,則需要為RAM使用者授予AliyunAdcpFullAccess許可權。具體操作,請參見為RAM使用者授權。
步驟二:建立應用發布至目的地組群
通過控制台發布
在多叢集應用頁面單擊GitOps控制台,進入ArgoCD UI登入頁面,單擊LOG IN VIA ALIYUN,通過阿里雲帳號SSO登入至ArgoCD UI。
串連Repo。
在ArgoCD UI左側導覽列選擇Settings,然後選擇
。在彈出的面板中配置以下資訊,然後單擊CONNECT添加串連。
地區
參數
參數值
Choose your connection method
VIA HTTPS
CONNECT REPO USING HTTPS
Type
git
Project
default
Repository URL
https://github.com/AliyunContainerService/gitops-demo.git
Skip server verification
勾選
串連添加成功後會顯示Git的CONNECTION STATUS為Successful。
建立應用。
在ArgoCD UI左側導覽列選擇Applications,然後單擊+ NEW APP。
在彈出的面板配置以下資訊,然後單擊CREATE進行建立。
地區
參數
參數值
GENERAL
Application Name
echo-server-demo
Project Name
default
SYNC POLICY
在下拉式清單中選擇Automatic。
參數取值如下:
Manual:當Git端有變更時,需要使用者手動執行同步動作將其部署至目的地組群。
Automatic:ArgoCD Server每隔3分鐘自動檢測Git端的變更並將其自動部署至目的地組群。
SYNC OPTIONS
勾選AUTO-CREATE NAMESPACE。
SOURCE
Repository URL
在下拉式清單選擇已有Git Repo,此處選擇https://github.com/AliyunContainerService/gitops-demo.git。
Revision
HEAD
Path
manifests/helm/echo-server
DESTINATION
Cluster URL/Cluster Name
在下拉式清單中選擇目的地組群。
Namespace
echo-server-demo
HELM
VALUES FILES
values.yaml
建立完成後,在Application頁面,即可看到echo-server-demo的應用狀態。
如果SYNC POLICY選擇的是Manual方式,需要手動點擊SYNC,將應用同步部署至目的地組群。應用的Status為Healthy和Synced,表示已經成功同步。
單擊echo-server-demo應用程式名稱,即可查看應用詳情,展示應用相關的Kubernetes資源的拓撲結構及相應狀態。
通過ArgoCD CLI發布
登入和訪問AgroCD。
訪問ArgoCD v2.8.7,下載安裝v2.8.7版本的ArgoCD CLI。
在ACK One Fleet執行個體中執行以下命令,擷取ArgoCD系統的初始密碼。
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
在ACK One Fleet執行個體中執行以下命令,通過port-forward的方式登入ArgoCD,預設使用者名為
admin
。export ARGOCD_OPTS='--port-forward-namespace argocd --port-forward' argocd login Username: admin Password:
預期輸出:
'admin:login' logged in successfully Context 'port-forward' updated
在ACK One Fleet執行個體中執行以下命令,更新預設使用者
admin
的密碼。argocd account update-password *** Enter password of currently logged in user (admin): *** Enter new password for user admin: *** Confirm new password for user admin:
預期輸出:
Password updated Context 'port-forward' updated
串連Repo。
執行以下命令添加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
執行以下命令,查看Clusters列表。
argocd cluster list
預期輸出:在ArgoCD Clusters列表中,會看到ACK One Fleet執行個體關聯的所有關聯集群。
SERVER NAME VERSION STATUS MESSAGE PROJECT https://47.97.XX.XX:6443 c83f3cbc90a****-temp02 1.22+ Successful https://kubernetes.default.svc in-cluster Unknown Cluster has no applications and is not being monitored.
使用Application建立應用。
執行以下命令,建立應用。
argocd app create echo-server --repo https://github.com/AliyunContainerService/gitops-demo.git --path manifests/helm --dest-namespace echo-server-cli --dest-server https://47.97.XX.XX:6443
預期輸出:
application 'echo-server' created
執行以下命令,同步應用到目的地組群。
argocd app sync echo-server
預期輸出:
TIMESTAMP GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE 2022-09-22T14:32:45+08:00 Service echo-server-cli echo-server OutOfSync Missing 2022-09-22T14:32:45+08:00 apps Deployment echo-server-cli echo-server OutOfSync Missing 2022-09-22T14:32:45+08:00 Service echo-server-cli echo-server Synced Progressing 2022-09-22T14:32:45+08:00 Service echo-server-cli echo-server Synced Progressing service/echo-server created 2022-09-22T14:32:45+08:00 apps Deployment echo-server-cli echo-server OutOfSync Missing deployment.apps/echo-server created 2022-09-22T14:32:45+08:00 apps Deployment echo-server-cli echo-server Synced Progressing deployment.apps/echo-server created Name: echo-server Project: default Server: https://47.97.XX.XX:6443 Namespace: echo-server-cli URL: https://127.0.0.1:52742/applications/echo-server Repo: https://github.com/AliyunContainerService/gitops-demo.git Target: Path: manifests/helm SyncWindow: Sync Allowed Sync Policy: <none> Sync Status: Synced to (e5c2618) Health Status: Progressing Operation: Sync Sync Revision: e5c261880a4072cdbfa5173add2be426f7f3**** Phase: Succeeded Start: 2022-09-22 14:32:44 +0800 CST Finished: 2022-09-22 14:32:45 +0800 CST Duration: 1s Message: successfully synced (all tasks run) GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE Service echo-server-cli echo-server Synced Progressing service/echo-server created apps Deployment echo-server-cli echo-server Synced Progressing deployment.apps/echo-server created
執行以下命令,查看應用列表。
argocd app list
預期輸出:
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET echo-server https://47.97.XX.XX:6443 echo-server-cli default Synced Healthy <none> <none> https://github.com/AliyunContainerService/gitops-demo.git manifests/helm
步驟三:在ACK One Fleet執行個體中關閉GitOps
當您不再需要使用GitOps能力時,可以先刪除其中的應用,再進行關閉GitOps操作。
如需刪除ACK One Fleet執行個體,請先關閉GitOps。
通過控制台關閉
登入ACK One控制台,在左側導覽列選擇 。
在多叢集應用頁面左上方單擊艦隊名稱後的按鈕,在下拉式清單中選擇目標艦隊。
在多叢集應用頁面右上方,單擊關閉功能,在彈出的提示對話方塊中單擊確定。
通過阿里雲CLI關閉
確保阿里雲CLI為最新版本後,執行以下命令,關閉GitOps。
aliyun adcp UpdateHubClusterFeature --ClusterId <your_clusterid> --ArgoCDEnabled false