全部產品
Search
文件中心

Container Service for Kubernetes:GitOps FAQ

更新時間:Aug 06, 2025

本文介紹使用GitOps時的常見問題及解決方案。

GitOps如何串連私人Git倉庫?

私人Git倉庫通常因安全問題無法開通公網訪問,因此使用ACK One GitOps串連私人Git倉庫時,需解決網路連通問題,並完成相關配置。

步驟一、佈建網域名解析,使GitOps可訪問私人Git倉庫

以下以Git倉庫網域名稱git.abc.cn為例進行配置。

  1. 連通雲下和雲上ACK One VPC網路。串連方式,請參見串連本地IDC和雲上VPC

  2. 使用內網DNS解析來實現VPC內網域名稱解析。

    1. 登入雲解析 DNS控制台,在內網DNS解析 (PrivateZone)頁面單擊使用者網域名稱頁簽,然後單擊添加網域名稱(Zone),在彈出的面板中配置以下參數,單擊確定

      • 內建權威網域名稱 (Zone)abc.cn(以Git倉庫網域名稱git.abc.cn為例)

      • 子網域名稱遞迴解析代理開啟

      • 網域名稱生效範圍 > 阿里雲VPC內網:選擇ACK One綁定的VPC

    2. 在網域名稱列表中找到剛剛建立的PrivateZone,在其操作列單擊解析記錄,進入解析記錄頁面。

    3. 解析記錄頁面單擊添加記錄,在彈出的面板中配置以下參數,然後單擊確定

      • 記錄類型A

      • 主機記錄git(以Git倉庫網域名稱git.abc.cn為例)

      • 記錄值:填寫內部Git倉庫的IP地址

步驟二、通過控制台或CLI串連Git倉庫

網域名稱解析配置完成後,ACK One GitOps就可以訪問到對應的私人Git倉庫,您可以通過GitOps控制台/CLI串連Git倉庫,用於發布應用。具體操作請參見Private Repositories

GitOps控制台上的Applications如何展示分組?

當Applications數量較多時,分組展示可提升使用體驗。在GitOps控制台左側功能表列,您可以:

  • Favorites OnlySYNC STATUSHEALTH STATUS篩選;

  • LABELSPROJECTSCLUSTERSNAMESPACESAUTO SYNC分組展示。

image

營運人員如何控制應用發布?

在應用發布過程中,尤其在自動化CI/CD流水線中,往往需要控制發布,您可以通過以下方式進行控制:

  • 使用ManualSync模式的應用。營運人員在程式碼推送後,檢查和確認應用是否符合要求,符合要求後手動點擊Sync同步應用到目的地組群。

  • 修改應用部署倉庫中的鏡像版本:在非自動化監測鏡像倉庫鏡像變化時,營運人員需要對鏡像進行確認。確認無誤後,可以手動修改應用部署倉庫中的鏡像版本,以自動觸發ArgoCD的應用同步。

  • 建立code review機制:在自動化CI/CD流水線中,對業務代碼倉庫建立code review機制。營運人員code review通過後合并代碼,自動觸發CI build&push鏡像,ArgoCD自動監測鏡像變更,並自動發布到配置AutoSync的環境,您也可以手動發布到ManualSync的環境。

AgroCD的repo-server出現Out of diskspace報錯怎麼辦?

問題現象

通過kubectl -nargocd logs xxxx命令查看日誌,看到repo-server出現如下報錯資訊:

'git checkout --force xxx' failed exit status 128: error: unable to write file templates/deployment.yaml\nfat al: sha1 file '/tmp/_argocd-repo/xxx/.git/index.lock' write error. Out of diskspace...

解決方案

該問題是.git/index.lock 檔案寫入失敗是由於磁碟空間不足引起的,可通過增加ACK One GitOps ArgoCD組件的Pod的臨時儲存來解決。當前ACK One GitOps ArgoCD組件使用ECI運行,預設具有30GiB的臨時儲存空間,增加臨時儲存空間的步驟如下,具體費用請參見臨時儲存空間計費

  1. ACK One控制台擷取艦隊執行個體的KubeConfig,並通過Kubectl串連至艦隊執行個體。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集

  2. 在對應Deployment的Pod Template中,為Pod添加annotation k8s.aliyun.com/eci-extra-ephemeral-storage: "20Gi",其中臨時儲存空間大小可自訂。

    • 如果GitOps處於預設模式,在Deployment argocd-server中添加。

      kubectl edit deployment -nargocd argocd-server
    • 如果GitOps處於高可用模式,在Deployment argocd-dex-imageupdate-repo-server中添加。

      kubectl edit deployment -nargocd argocd-dex-imageupdate-repo-server
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      ...
    ...
    spec:
      template:
        metadata:
          annotations:
            # 在預設30GiB的基礎上增加20GiB,共50GiB。增加的臨時儲存空間大小可自訂。
            k8s.aliyun.com/eci-extra-ephemeral-storage: "20Gi"
          ...
        ...
      ...

如何避免GitOps Application跟蹤到非應用資源?

背景資訊

Argo CD使用labelapp.kubernetes.io/instance來追蹤K8s資源,當資源有這個label,並且值和Application Name一致,就會被Application追蹤到,造成應用的狀態一直處於OutOfSync,也可能會一直刪除這個非應用資源,為了避免這類非預期行為,有以下兩種解決方案。

解決方案

  • 方案1:在艦隊的argocd/argocd-cm中添加resource.exclusions來忽略被追蹤到的非應用資源,如下配置可忽略CiliumIdentity資源。

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  labels:
    app.kubernetes.io/name: argocd-cm
    app.kubernetes.io/part-of: argocd
data:
  ...
  resource.exclusions: |
    - apiGroups:
      - cilium.io
      kinds:
      - CiliumIdentity
      clusters:
      - "*"
  • 方案2:在艦隊的argocd/argocd-cm中添加自訂標籤application.instanceLabelKey: argocd.argoproj.io/instance。添加後,使用Argo CD下發的應用的資源則會包含labelargocd.argoproj.io/instance,從而不會追蹤到僅有labelapp.kubernetes.io/instance的資源。配置生效後,現有的Application狀態可能顯示為OutOfSync

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: argocd-cm
      labels:
        app.kubernetes.io/name: argocd-cm
        app.kubernetes.io/part-of: argocd
    data:
      ...
      application.instanceLabelKey: argocd.argoproj.io/instance

修改Argo CD ConfigMap後如何重啟相應的Argo CD組件?

在Argo CD中,修改ConfigMap後,可能需要重啟對應的Argo CD組件才會生效。

以下是可能較多修改的幾個configmap:

配置項

說明

是否需要重啟Argo CD組件

argocd-cm

用於配置自訂OIDC、自訂訪問url和Local User等。

通常無需重啟Argo CD組件,如發現配置未生效可以重啟argocd-server。

argocd-cmd-params-cm

用於配置Argo CD各組件的環境變數。

需要重啟相應組件或argocd-server生效。

argocd-rbac-cm

用於配置Argo CD的RBAC許可權。

通常無需重啟組件。

argocd-image-updater-config

用於管理 image-updater相關配置。

需要重啟相應組件或argocd-server生效。

argocd-notifications-cm

用於管理argocd-notification-controller相關配置。

需要重啟相應組件或argocd-server生效。

說明

ACK One GitOps有2種模式:

  1. 預設模式:所有組件都在1個Deployment中。如需重啟,則需要重啟argocd-server。

  2. 高可用模式:組件分布在以下幾個Deployment,如需重啟,可以單獨重啟相應組件。

    1. argocd-server。

    2. argocd-application-controller:包含application-controller和applicationset-controller。

    3. argocd-repo-server。

    4. argocd-dex-imageupdate-notification:包含image-updater、notification-controller、dex。

    5. argocd-redis。

您需要通過以下步驟對組件進行重啟:

  1. 多叢集GitOps頁面的GitOps摺疊塊部分找到Argo CD 組件

  2. 單擊Argo CD 組件後的重啟

  3. 在彈出框中的選擇待重啟應用下拉框選擇需要重啟的組件名稱,例如argocd-server,單擊確定

ApplicationSet使用git generator時,不支援變更Git倉庫目錄嗎?

問題現象

在使用Argo CD ApplicationSet的Git產生器(Git Generator)時,當Git倉庫中新增或重新命名了被產生器所依賴的目錄後,即便立即更新ApplicationSet資源指向新的目錄路徑,有時也無法觸發預期的Application資源的建立。

解決方案

該問題是Argo CD在變更目錄名後不會自動更新緩衝導致。如果您需要修改目錄名,可以在包含Git產生器的ApplicationSet上添加一個註解來解決此問題:argocd.argoproj.io/application-set-refresh="true"。樣本如下:

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  ···
  annotations:
    ···
    argocd.argoproj.io/application-set-refresh: "true"
spec:
  ···
  generators:
    - git:
        ···     
  template:
    ···