全部產品
Search
文件中心

Container Service for Kubernetes:GitOps快速入門

更新時間:Aug 24, 2024

您可以在ACK One艦隊(Fleet)執行個體中通過GitOps將Git repositories作為應用來源,對多種編排方式(YAML manifests目錄、Helm Charts、Kustomize等)的應用實現版本管理、多叢集分發和持續部署。GitOps完全相容社區ArgoCD的使用方式,並提供了高可用的控制面。本文介紹如何在ACK One Fleet執行個體中使用GitOps實現多叢集應用發布的流程,協助您快速上手GitOps。

前提條件

計費說明

開啟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)。

通過控制台開啟

  1. 登入ACK One控制台,在左側導覽列選擇艦隊 > 多叢集應用

  2. 多叢集應用頁面左上方單擊艦隊名稱後的Dingtalk_20231226104633.jpg按鈕,在下拉式清單中選擇目標艦隊。

  3. 建立艦隊預設已開啟GitOps,如果您的艦隊未開啟,可單擊開啟GitOps,在彈出的對話方塊中單擊確定完成開啟。

    若艦隊已開啟GitOps,多叢集應用頁面會顯示GitOps控制台存取控制

  4. 多叢集應用頁面,單擊存取控制,在彈出的存取控制對話方塊中開啟公網訪問,並在輸入框中輸入需要加入白名單的IP地址或位址區段,然後單擊確定

  5. 開啟公網訪問後,可單擊GitOps控制台,通過公網訪問GitOps控制台。

通過阿里雲CLI開啟

  1. 確保阿里雲CLI為最新版本後,執行以下命令,開啟GitOps並開通公網訪問。

    • 替換以下<your_clusterid>為您的Fleet執行個體ID。

    • 替換AccessControlList中的值為您的控制白名單位址區段,如何擷取,請參見開通公網訪問GitOps

    aliyun adcp UpdateHubClusterFeature --ClusterId <your_clusterid> --PublicAccessEnabled true --AccessControlList "[\"10.100.XX.XX/24\"]" --ArgoCDEnabled true 
  2. 可選:如果您使用的是RAM使用者的AK,則需要為RAM使用者授予AliyunAdcpFullAccess許可權。具體操作,請參見為RAM使用者授權

步驟二:建立應用發布至目的地組群

通過控制台發布

  1. 多叢集應用頁面單擊GitOps控制台,進入ArgoCD UI登入頁面,單擊LOG IN VIA ALIYUN,通過阿里雲帳號SSO登入至ArgoCD UI。

  2. 串連Repo。

    1. 在ArgoCD UI左側導覽列選擇Settings,然後選擇Repositories > + Connect Repo

    2. 在彈出的面板中配置以下資訊,然後單擊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

      勾選

      image.png

      串連添加成功後會顯示Git的CONNECTION STATUSSuccessful。

      image.png

  3. 建立應用。

    1. 在ArgoCD UI左側導覽列選擇Applications,然後單擊+ NEW APP

    2. 在彈出的面板配置以下資訊,然後單擊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

    3. 建立完成後,在Application頁面,即可看到echo-server-demo的應用狀態。

      如果SYNC POLICY選擇的是Manual方式,需要手動點擊SYNC,將應用同步部署至目的地組群。應用的StatusHealthySynced,表示已經成功同步。

      image.png

    4. 單擊echo-server-demo應用程式名稱,即可查看應用詳情,展示應用相關的Kubernetes資源的拓撲結構及相應狀態。

      image.png

通過ArgoCD CLI發布

  1. 登入和訪問AgroCD。

    1. 訪問ArgoCD v2.8.7,下載安裝v2.8.7版本的ArgoCD CLI。

    2. 在ACK One Fleet執行個體中執行以下命令,擷取ArgoCD系統的初始密碼。

      kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
    3. 在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
    4. 在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
  2. 串連Repo。

    1. 執行以下命令添加Git Repo。

      argocd repo add https://github.com/AliyunContainerService/gitops-demo.git --name echo-server

      預期輸出:

      Repository 'https://github.com/AliyunContainerService/gitops-demo.git' added
    2. 執行以下命令,查看已添加的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
    3. 執行以下命令,查看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.
  3. 使用Application建立應用。

    1. 執行以下命令,建立應用。

      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
    2. 執行以下命令,同步應用到目的地組群。

      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
    3. 執行以下命令,查看應用列表。

      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。

通過控制台關閉

  1. 登入ACK One控制台,在左側導覽列選擇艦隊 > 多叢集應用

  2. 多叢集應用頁面左上方單擊艦隊名稱後的Dingtalk_20231226104633.jpg按鈕,在下拉式清單中選擇目標艦隊。

  3. 多叢集應用頁面右上方,單擊關閉功能,在彈出的提示對話方塊中單擊確定

通過阿里雲CLI關閉

確保阿里雲CLI為最新版本後,執行以下命令,關閉GitOps。

aliyun adcp UpdateHubClusterFeature --ClusterId <your_clusterid> --ArgoCDEnabled false