監控 RootSync 和 RepoSync 物件

本頁面說明如何監控 RootSyncRepoSync 物件。舉例來說,您可能想確認單一事實來源中的最新提交內容是否已套用至叢集,並成功完成協調。

查看已同步的提交

您可以檢查 RootSyncRepoSync 物件中的 .status.sync 欄位,確認已同步至叢集的提交。

  • 如要查看RootSync物件的已同步處理的提交,請執行下列指令:

    kubectl get rootsync ROOT_SYNC_NAME -n config-management-system
    

    ROOT_SYNC_NAME 替換為RootSync物件的名稱。

  • 如要查看 RepoSync 物件的已同步處理的提交,請執行下列指令:

    kubectl get reposync REPO_SYNC_NAME -n REPO_SYNC_NAMESPACE
    

    更改下列內容:

    • REPO_SYNC_NAMERepoSync 物件的名稱。
    • REPO_SYNC_NAMESPACE:您在其中建立命名空間存放區的命名空間。

這些指令的輸出內容會顯示來源提交和已同步提交的值。舉例來說,如果您為 RepoSync 執行指令,會看到類似下列的輸出內容:

NAME        RENDERINGCOMMIT                            SOURCECOMMIT                               SYNCCOMMIT
root-sync   66882815f0ef5517df27e864fb1315e97756ab72   66882815f0ef5517df27e864fb1315e97756ab72   66882815f0ef5517df27e864fb1315e97756ab72

RENDERINGCOMMIT」欄中的值是 hydration-controller 處理的提交內容。如果不需要轉譯,這個值會與 SOURCECOMMIT 欄相同。SOURCECOMMIT 欄中的值是應同步至叢集的真實來源的提交內容。「SYNCCOMMIT」欄中的值是部署至叢集的提交內容。如果 SOURCECOMMITSYNCCOMMIT 欄中的兩個值相同,表示預期的提交內容已部署至叢集。

確認提交中的資源已完成協調

由於 ResourceGroups 會擷取真實現來源中宣告的受管理資源的協調狀態,因此您可以檢查這些資源,確認提交中的資源是否已完成協調。

ResourceGroup 物件的命名空間和名稱與 RootSyncRepoSync 物件相同。舉例來說,如果命名空間 config-management-system 中有名為 root-syncRootSync 物件,則命名空間 config-management-system 中對應的 ResourceGroup 物件也會是 root-sync

  • 如要取得 RootSync 物件的 ResourceGroup 物件:

    kubectl get resourcegroup ROOT_SYNC_NAME -n config-management-system -o yaml
    
  • 如要取得 RepoSync 物件的 ResourceGroup 物件:

    kubectl get resourcegroup REPO_SYNC_NAME -n REPO_SYNC_NAMESPACE -o yaml
    

    更改下列內容:

    • ROOT_SYNC_NAME:要查詢的 ResourceGroup 物件名稱。
    • REPO_SYNC_NAME:要查詢的 ResourceGroup 物件名稱。
    • REPO_SYNC_NAMESPACE:要查詢的 ResourceGroup 物件名稱。

如要確認提交中的資源已完成協調,請在輸出內容中尋找下列項目:

  • .status.observedGeneration 等於 ResourceGroup 物件中 .metadata.generation 欄位的值。
  • Stalled 條件的 status"False"
  • .status.resourceStatuses」底下的每個項目都有 SucceededactuationSucceededreconcile,以及 Currentstatus

查看錯誤

RootSyncRepoSync 物件會使用 status 欄位,追蹤將設定從可靠來源同步至叢集時發生的錯誤。

  • 如要查看 RootSync 物件的狀態,請執行下列指令:

    kubectl get rootsync ROOT_SYNC_NAME -n config-management-system -o yaml
    

    ROOT_SYNC_NAME 替換為RootSync物件的名稱。

  • 如要查看 RepoSync 物件的狀態,請執行下列指令:

    kubectl get reposync REPO_SYNC_NAME -n NAMESPACE -o yaml
    

    更改下列內容:

    • REPO_SYNC_NAMERepoSync 物件的名稱。
    • NAMESPACE:您在其中建立命名空間存放區的命名空間。

如要進一步瞭解 status 欄位下的子欄位,請參閱「物件狀態」。

查看物件詳細資料

如要查看 RootSyncRepoSync 物件的詳細資料,並進一步瞭解潛在錯誤,請使用 kubectl describe 指令。

這項指令的輸出內容包含事件,特別有助於排解容器面臨記憶體限制 (OOMKilled)、排程失敗或映像檔提取錯誤等問題。

如要使用更易讀的格式,請在下列指令後方附加 -o yaml,將輸出內容轉換為 YAML。如果您需要檢查特定參數、註解或資源規格,這個格式就特別實用。

  • 如要查看 RootSync 物件的詳細資料,請執行下列指令:

    kubectl describe rootsync ROOT_SYNC_NAME -n config-management-system
    

    ROOT_SYNC_NAME 替換為 RootSync 物件的名稱。

  • 如要查看 RepoSync 物件的詳細資料,請執行下列指令:

    kubectl describe reposync REPO_SYNC_NAME -n NAMESPACE
    

    更改下列內容:

    • REPO_SYNC_NAMERepoSync 物件的名稱。
    • NAMESPACE:您在其中建立命名空間存放區的命名空間。

查看資源是否已準備就緒

如要瞭解同步至叢集的資源是否已準備就緒,請查看協調狀態。舉例來說,查看對帳狀態可以瞭解同步的 Deployment 是否已準備好提供流量。

對於同步至叢集的真值來源,所有資源的和解狀態都會匯總至名為 ResourceGroup 的資源。系統會為每個 RootSyncRepoSync 物件產生 ResourceGroup,以擷取套用至叢集的資源集,並匯總其狀態。

  • 如要查看 RootSync 物件的和解狀態,請執行下列指令:

    kubectl get resourcegroup.kpt.dev ROOT_SYNC_NAME -n config-management-system -o yaml
    

    ROOT_SYNC_NAME 替換為 RootSync 物件的名稱。

  • 如要查看 RepoSync 物件的和解狀態,請執行下列指令:

    kubectl get resourcegroup.kpt.dev REPO_SYNC_NAME -n NAMESPACE -o yaml
    

    更改下列內容:

    • REPO_SYNC_NAMERepoSync 物件的名稱。
    • NAMESPACE:您在其中建立命名空間存放區的命名空間。

輸出內容會顯示所有 ResourceGroup 資源狀態。舉例來說,以下輸出內容顯示名為 nginx-deployment 的 Deployment 已準備就緒:

resourceStatuses:
- group: apps
  kind: Deployment
  name: nginx-deployment
  namespace: default
  status: Current

查看記錄

針對您建立的每個 RootSyncRepoSync 物件,Config Sync 會建立協調器 Deployment 來執行同步作業。本節說明如何查看這些協調器的記錄。查看記錄有助於偵錯問題,因為記錄會提供進度、警告和錯誤的額外資訊,這些資訊在 RootSyncRepoSync 物件狀態中不會顯示。

  • 如要查看 RootSyncRepoSync 調解器的記錄,請執行下列指令:

    kubectl logs -n config-management-system deployment/RECONCILER_NAME CONTAINER_NAME
    

    更改下列內容:

    • RECONCILER_NAMERootSyncRepoSync 物件的和解器名稱。

      • 如果是 RootSync,調解器名稱為 root-reconciler-ROOT_SYNC_NAMEroot-reconciler (如果 RootSync 的名稱為 root-sync)。

      • 如果是 RepoSync,調解器名稱為 ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTHns-reconciler-NAMESPACE (如果 RepoSync 的名稱是 repo-sync),其中 NAMESPACE 是您建立 RepoSync 物件的命名空間。

    • CONTAINER_NAME:容器名稱必須是下列其中一個值:reconcilergit-synchydration-controlleroci-synchelm-sync。如要進一步瞭解這些容器,請參閱「協調器容器」。

設定 RootSync 或 RepoSync 調解器記錄層級

如要在容器記錄中加入更多資訊,請設定記錄詳細程度。根據預設,大多數容器的記錄詳細程度預設值為 0。例外狀況是 git-syncotel-agent 容器,預設值為 5

變更記錄詳細程度時,請注意記錄詳細程度越高,記錄的資料量就越大,因此記錄費用也會越高。

如要變更記錄詳細程度,請使用 .spec.override.logLevels 欄位,如下列範例所示:

apiVersion: configsync.gke.io/v1beta1
kind: RootSync
metadata:
  name: root-sync
  namespace: config-management-system
spec:
  override:
    logLevels:
    - containerName: "reconciler"
      logLevel: 0
    - containerName: "git-sync"
       logLevel: 10

containerName 欄位的值必須是下列其中一個:reconcilergit-synchydration-controlleroci-synchelm-sync

如要確認記錄詳細程度已設定完成,請執行下列指令:

kubectl get deployment.apps/root-reconciler -n config-management-system -o yaml

記錄詳細程度可做為 args 之一,位於 spec.template.spec.containers[] 內,看起來像 -v=0,其中 0 是目前的記錄詳細程度。在本例中,記錄詳細程度值為 0 時,系統只會記錄重大事件。