本文介紹使用GitOps時的常見問題及解決方案。
GitOps如何串連私人Git倉庫?
私人Git倉庫通常因安全問題無法開通公網訪問,因此使用ACK One GitOps串連私人Git倉庫時,需解決網路連通問題,並完成相關配置。
步驟一、佈建網域名解析,使GitOps可訪問私人Git倉庫
以下以Git倉庫網域名稱git.abc.cn為例進行配置。
連通雲下和雲上ACK One VPC網路。串連方式,請參見串連本地IDC和雲上VPC。
使用內網DNS解析來實現VPC內網域名稱解析。
登入雲解析 DNS控制台,在內網DNS解析 (PrivateZone)頁面單擊使用者網域名稱頁簽,然後單擊添加網域名稱(Zone),在彈出的面板中配置以下參數,單擊確定。
內建權威網域名稱 (Zone):abc.cn(以Git倉庫網域名稱
git.abc.cn為例)子網域名稱遞迴解析代理:開啟
:選擇ACK One綁定的VPC
在網域名稱列表中找到剛剛建立的PrivateZone,在其操作列單擊解析記錄,進入解析記錄頁面。
在解析記錄頁面單擊添加記錄,在彈出的面板中配置以下參數,然後單擊確定。
記錄類型:A
主機記錄:git(以Git倉庫網域名稱
git.abc.cn為例)記錄值:填寫內部Git倉庫的IP地址
步驟二、通過控制台或CLI串連Git倉庫
網域名稱解析配置完成後,ACK One GitOps就可以訪問到對應的私人Git倉庫,您可以通過GitOps控制台/CLI串連Git倉庫,用於發布應用。具體操作請參見Private Repositories。
GitOps控制台上的Applications如何展示分組?
當Applications數量較多時,分組展示可提升使用體驗。在GitOps控制台左側功能表列,您可以:
按Favorites Only、SYNC STATUS、HEALTH STATUS篩選;
按LABELS、PROJECTS、CLUSTERS、NAMESPACES、AUTO SYNC分組展示。

營運人員如何控制應用發布?
在應用發布過程中,尤其在自動化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的臨時儲存空間,增加臨時儲存空間的步驟如下,具體費用請參見臨時儲存空間計費。
從ACK One控制台擷取艦隊執行個體的KubeConfig,並通過Kubectl串連至艦隊執行個體。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
在對應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、自訂訪問 | 通常無需重啟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個Deployment中。如需重啟,則需要重啟argocd-server。
高可用模式:組件分布在以下幾個Deployment,如需重啟,可以單獨重啟相應組件。
argocd-server。
argocd-application-controller:包含application-controller和applicationset-controller。
argocd-repo-server。
argocd-dex-imageupdate-notification:包含image-updater、notification-controller、dex。
argocd-redis。
您需要通過以下步驟對組件進行重啟:
在多叢集GitOps頁面的GitOps摺疊塊部分找到Argo CD 組件。
單擊Argo CD 組件後的重啟。
在彈出框中的選擇待重啟應用下拉框選擇需要重啟的組件名稱,例如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:
···