ArgoCD主要用於監聽Git倉庫中應用編排的變化,與叢集中應用真實運行狀態進行對比,自動或手動同步拉取應用編排的變更到部署叢集中。當您需要提高Kubernetes環境中服務部署的效率和可追溯性時,可以在ASM整合ArgoCD實現GitOps。通過版本控制系統自動同步和部署應用,簡化部署流程,保證配置一致性,使操作歷史透明化,增強整個系統的可維護性和穩定性,降低營運成本。
前提條件
已建立ASM執行個體,且版本為1.12.4.50及以上。具體操作,請參見建立ASM執行個體。
已添加叢集到ASM執行個體。具體操作,請參見添加叢集到ASM執行個體。
已建立Git倉庫。
背景資訊
GitOps是雲原生應用程式實現持續部署的一種方式。阿里雲服務網格ASM整合ArgoCD進行應用程式的發布和更新,實現GitOps。開發人員提交YAML編寫的應用程式定義(Deployment、Service)和流量管理(VirtualService、Gateway、DestinationRule)到Git倉庫。ArgoCD監控叢集中應用程式當前的Deployment、Service、VirtualService等資源的狀態,與Git倉庫中的資源期望編排進行比較,以Git倉庫中的內容為基準,當Git倉庫發生變更時,支援自動或手動同步和部署應用程式。
步驟一:安裝ArgoCD
您可以選擇手動安裝ArgoCD或使用阿里雲Container ServiceACK應用中心內建的ArgoCD功能。下文以手動安裝的ArgoCD與ASM整合為例,實現GitOps。
步驟二:啟用ASM的資料面KubeAPI訪問能力
由於阿里雲服務網格ASM是一個託管Istio相容的控制平面,ArgoCD管理的服務網格ASM控制平面和資料平面(Container ServiceACK)不在同一個Kubernetes叢集環境中,因此需要在ASM中啟用資料平面KubeAPI訪問,ArgoCD才能像訪問ACK叢集的資源一樣訪問ASM叢集中的Istio資源。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理。
在基本資料地區的啟用資料面KubeAPI訪問右側,單擊啟用。
在彈出框中,單擊確認。
步驟三:建立ASM網關
步驟四:通過ArgoCD部署Istio資源
Istio資源可以定義為Kubernetes清單,並推送到用於部署應用程式K8s編排的Git倉庫中。
建立bookinfo應用樣本。
在ArgoCD管理介面,單擊NEW APP,進行如下配置。
在GENERAL地區,配置Application為bookinfo,Project為default,選中PRUNE RESOURCES。
在SOURCE地區,配置Repository URL為https://github.com/AliyunContainerService/asm-labs.git,Revision為argocd-asm,Path為argo-cd/bookinfo。
在DESTINATION地區,配置Cluster URL為https://kubernetes.default.svc,Namespace為default。
配置完成,單擊頁面上方的CREATE。
建立完成後,在ArgoCD管理介面,即可查看bookinfo應用狀態。
單擊bookinfo,即可查看建立的資源狀態。
在ASM控制台查看資源狀態。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在虛擬服務頁面,查看建立的bookinfo。
在Container Service控制台查看資源狀態。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
查看建立的Deployment。
訪問ASM網關。
擷取ASM網關地址。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇
。在入口網關頁面,擷取目標網關的服務地址。
在瀏覽器訪問http://{您的ASM網關地址}/productpage。
訪問效果如下所示,由於Istio bookinfo的Reviews有3個版本,目前未指定版本,因此每次重新整理,右側資料顯示不同。
步驟五:部署GitOps
配置流量規則,訪問http://{您的ASM網關地址}/productpage,未登入時只顯示v1版本的Reviews,使用jason為使用者名稱登入時,顯示v2版本的Reviews。
修改本地VirtualService和Deployment YAML檔案。
VirtualService YAML修改如下:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - match: - headers: end-user: exact: jason route: - destination: host: reviews subset: v2 - route: - destination: host: reviews subset: v1 ---
Deployment YAML修改如下:
apiVersion: apps/v1 kind: Deployment metadata: namespace: argocd name: reviews-v1 labels: app: reviews version: v1 spec: replicas: 2
執行以下命令,將Reviews-v1添加到Git倉庫。
git add * git commit -m "reviews-v1" git push
同步Git配置到叢集。
如果您開啟了ArgoCD的自動同步功能,會自動同步Git的配置到叢集,如果沒有,您可以手動進行同步操作,具體步驟如下:
在ArgoCD管理介面的bookinfo卡片中,單擊SYNC。
當檔案發生變更時,在bookinfo卡片的Status右側會出現OutOfSync狀態提示。
在彈出的面板上方,單擊SYNCHRONIZE。
同步完成後,您可以在ASM控制台查看同步後建立的資源;在ACK控制台查看更新後的資源。具體操作,請參見在ASM控制台查看資源狀態和在Container Service控制台查看資源狀態。
驗證訪問效果。
未登入狀態下,在瀏覽器訪問http://{您的ASM網關地址}/productpage。
訪問效果如下所示,固定為v1版本的Reviews。
使用jason為使用者名稱,任意密碼進行登入。
訪問效果如下所示,固定為v2版本的Reviews。