全部產品
Search
文件中心

Alibaba Cloud Service Mesh:ASM整合ArgoCD實現GitOps

更新時間:Jan 13, 2025

ArgoCD主要用於監聽Git倉庫中應用編排的變化,與叢集中應用真實運行狀態進行對比,自動或手動同步拉取應用編排的變更到部署叢集中。當您需要提高Kubernetes環境中服務部署的效率和可追溯性時,可以在ASM整合ArgoCD實現GitOps。通過版本控制系統自動同步和部署應用,簡化部署流程,保證配置一致性,使操作歷史透明化,增強整個系統的可維護性和穩定性,降低營運成本。

前提條件

背景資訊

GitOps是雲原生應用程式實現持續部署的一種方式。阿里雲服務網格ASM整合ArgoCD進行應用程式的發布和更新,實現GitOps。開發人員提交YAML編寫的應用程式定義(Deployment、Service)和流量管理(VirtualService、Gateway、DestinationRule)到Git倉庫。ArgoCD監控叢集中應用程式當前的Deployment、Service、VirtualService等資源的狀態,與Git倉庫中的資源期望編排進行比較,以Git倉庫中的內容為基準,當Git倉庫發生變更時,支援自動或手動同步和部署應用程式。ArgoCD

步驟一:安裝ArgoCD

您可以選擇手動安裝ArgoCD或使用阿里雲Container ServiceACK應用中心內建的ArgoCD功能。下文以手動安裝的ArgoCD與ASM整合為例,實現GitOps。

  • 手動安裝ArgoCD,請參見ArgoCD

  • Container ServiceACK應用中心具有內建的ArgoCD,可以避免您手動安裝ArgoCD。ACK應用中心允許檢查應用程式狀態,可以使用Git倉庫和Helm Chart將應用程式版本部署到Kubernetes叢集,進行復原和發布應用程式版本。更多資訊,請參見應用中心概述

步驟二:啟用ASM的資料面KubeAPI訪問能力

由於阿里雲服務網格ASM是一個託管Istio相容的控制平面,ArgoCD管理的服務網格ASM控制平面和資料平面(Container ServiceACK)不在同一個Kubernetes叢集環境中,因此需要在ASM中啟用資料平面KubeAPI訪問,ArgoCD才能像訪問ACK叢集的資源一樣訪問ASM叢集中的Istio資源。

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理

  3. 基本資料地區的啟用資料面KubeAPI訪問右側,單擊啟用啟用資料面KubeAPI訪問

  4. 在彈出框中,單擊確認

步驟三:建立ASM網關

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇ASM網關 > 入口網關

  3. 入口網關頁面,單擊建立。設定網關的基本資料,然後單擊建立

    部分配置項說明如下,關於配置項的更多資訊,請參見建立入口網關

    配置項

    說明

    名稱

    本文以ingressgateway為例。

    網關類型

    選擇南北向-入口網關類型。

    連接埠映射

    單擊添加連接埠,配置如下協議和連接埠。

    • 配置協議HTTP服務連接埠80

    • 配置協議HTTPS服務連接埠443

步驟四:通過ArgoCD部署Istio資源

Istio資源可以定義為Kubernetes清單,並推送到用於部署應用程式K8s編排的Git倉庫中。

  1. 建立bookinfo應用樣本。

    1. 在ArgoCD管理介面,單擊NEW APP,進行如下配置。

      • GENERAL地區,配置ApplicationbookinfoProjectdefault,選中PRUNE RESOURCESGENERAL

      • SOURCE地區,配置Repository URLhttps://github.com/AliyunContainerService/asm-labs.gitRevisionargocd-asmPathargo-cd/bookinfoSOURCE

      • DESTINATION地區,配置Cluster URLhttps://kubernetes.default.svcNamespacedefaultDESTINATION

    2. 配置完成,單擊頁面上方的CREATE

      建立完成後,在ArgoCD管理介面,即可查看bookinfo應用狀態。查看應用狀態單擊bookinfo,即可查看建立的資源狀態。查看建立的資源狀態

  2. 在ASM控制台查看資源狀態。

    1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

    2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇流量管理中心 > 虛擬服務

    3. 虛擬服務頁面,查看建立的bookinfo。

  3. 在Container Service控制台查看資源狀態。

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

    3. 查看建立的Deployment。Deployment

  4. 訪問ASM網關。

    1. 擷取ASM網關地址。

      1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

      2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇ASM網關 > 入口網關

      3. 入口網關頁面,擷取目標網關的服務地址

    2. 在瀏覽器訪問http://{您的ASM網關地址}/productpage

      訪問效果如下所示,由於Istio bookinfo的Reviews有3個版本,目前未指定版本,因此每次重新整理,右側資料顯示不同。訪問ASM網關

步驟五:部署GitOps

配置流量規則,訪問http://{您的ASM網關地址}/productpage,未登入時只顯示v1版本的Reviews,使用jason為使用者名稱登入時,顯示v2版本的Reviews。

  1. 修改本地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
  2. 執行以下命令,將Reviews-v1添加到Git倉庫。

    git add *
    git commit -m "reviews-v1"
    git push
  3. 同步Git配置到叢集。

    如果您開啟了ArgoCD的自動同步功能,會自動同步Git的配置到叢集,如果沒有,您可以手動進行同步操作,具體步驟如下:

    1. 在ArgoCD管理介面的bookinfo卡片中,單擊SYNC

      當檔案發生變更時,在bookinfo卡片的Status右側會出現OutOfSync狀態提示。檔案變更

    2. 在彈出的面板上方,單擊SYNCHRONIZE

      同步完成後,您可以在ASM控制台查看同步後建立的資源;在ACK控制台查看更新後的資源。具體操作,請參見在ASM控制台查看資源狀態在Container Service控制台查看資源狀態

  4. 驗證訪問效果。

    1. 未登入狀態下,在瀏覽器訪問http://{您的ASM網關地址}/productpage

      訪問效果如下所示,固定為v1版本的Reviews。未登入狀態

    2. 使用jason為使用者名稱,任意密碼進行登入。

      訪問效果如下所示,固定為v2版本的Reviews。使用jason為使用者名稱進行登入