RootSync オブジェクトと RepoSync オブジェクトをモニタリングする

このページでは、RootSync オブジェクトと RepoSync オブジェクトをモニタリングするさまざまな方法について説明します。たとえば、信頼できる情報源の最新の commit がクラスタに適用され、正常に調整されているかどうかを確認することができます。

同期された commit を表示する

クラスタと同期された commit を確認するには、RootSync オブジェクトまたは RepoSync オブジェクトの .status.sync フィールドを確認します。

  • RootSync オブジェクトの同期された commit を表示するには、次のコマンドを実行します。

    kubectl get rootsync ROOT_SYNC_NAME -n config-management-system
    

    ROOT_SYNC_NAME は、RootSync オブジェクトの名前に置き換えます。

  • RepoSync オブジェクトの同期された commit を表示するには、次のコマンドを実行します。

    kubectl get reposync REPO_SYNC_NAME -n REPO_SYNC_NAMESPACE
    

    次のように置き換えます。

    • REPO_SYNC_NAME: RepoSync オブジェクトの名前。
    • REPO_SYNC_NAMESPACE: Namespace リポジトリを作成した Namespace。

これらのコマンドの出力には、元の commit の値と同期された commit の値が表示されます。たとえば RepoSync のコマンドを実行すると、次のような出力が表示されます。

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

RENDERINGCOMMIT 列の値は、hydration-controller によって処理される commit です。レンダリングの必要がない場合、値は SOURCECOMMIT 列と同じです。SOURCECOMMIT 列の値は、クラスタと同期する必要がある信頼できる情報源からの commit です。SYNCCOMMIT 列の値は、クラスタにデプロイされている commit です。SOURCECOMMIT 列と SYNCCOMMIT 列の 2 つの値が同じ場合は、想定された commit がクラスタにデプロイ済みです。

commit のリソースが調整されていることを確認する

ResourceGroups は、信頼できる情報源で宣言されたマネージド リソースの調整ステータスをキャプチャするため、それらを調べて commit 内のリソースが調整されているかどうかを確認できます。

ResourceGroup オブジェクトには、RootSync オブジェクトまたは RepoSync オブジェクトと同じ名前空間と名前が設定されています。たとえば、名前空間 config-management-systemroot-sync という名前の RootSync オブジェクトについては、対応する ResourceGroup オブジェクトも名前空間 config-management-systemroot-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 オブジェクトの名前。

commit 内のリソースが調整されたことを確認するには、出力で次のことを確認します。

  • .status.observedGeneration は、ResourceGroup オブジェクトのフィールド .metadata.generation の値と同じです。
  • Stalled 条件と Reconciling 条件の両方の status"False" です。
  • .status.resourceStatuses フィールドの各項目のステータスは Current になります。

その他のエラーを確認

RootSync オブジェクトと RepoSync オブジェクトは、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_NAME: RepoSync オブジェクトの名前。
    • NAMESPACE: Namespace リポジトリを作成した Namespace。

status フィールドのサブフィールドの詳細については、オブジェクトのステータスをご覧ください。

オブジェクトの詳細を表示する

RootSync オブジェクトと RepoSync オブジェクトの詳細を表示し、潜在的なエラーの詳細を確認するには、kubectl describe コマンドを使用します。

このコマンドの出力にはイベントが含まれます。これは特に、メモリの制約(OOMKilled)に直面しているコンテナ、スケジューリングの失敗、イメージの pull エラーなどの問題のデバッグに活用できます。

判読を容易にするために、次のコマンドに -o yaml を追加して、出力を YAML に変換します。この形式は、特定のパラメータ、アノテーション、リソースの仕様を調べる必要がある場合に特に有効です。

  • RootSync オブジェクトの詳細を表示するには、次のコマンドを実行します。

    kubectl describe rootsync ROOT_SYNC_NAME -n config-management-system
    

    ROOT_SYNC_NAMERootSync オブジェクトの名前に置き換えます。

  • RepoSync オブジェクトの詳細を表示するには、次のコマンドを実行します。

    kubectl describe reposync REPO_SYNC_NAME -n NAMESPACE
    

    次のように置き換えます。

    • REPO_SYNC_NAME: RepoSync オブジェクトの名前。
    • NAMESPACE: Namespace リポジトリを作成した Namespace。

リソースの準備状況を確認する

クラスタに同期されたリソースの準備状況を確認するには、調整ステータスを表示します。たとえば、調整ステータスを表示すると、同期された Deployment がトラフィックを提供する準備ができているかどうかを確認できます。

クラスタと同期された信頼できる情報源の場合は、すべてのリソースの調整ステータスが ResourceGroup というリソースに集約されます。RootSync オブジェクトまたは RepoSync オブジェクトごとに ResourceGroup が生成され、クラスタに適用される一連のリソースを取り込んで、それらのステータスを集約します。

  • RootSync オブジェクトの調整ステータスを表示するには、次のコマンドを実行します。

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

    ROOT_SYNC_NAMERootSync オブジェクトの名前に置き換えます。

  • RepoSync オブジェクトの調整ステータスを表示するには、次のコマンドを実行します。

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

    次のように置き換えます。

    • REPO_SYNC_NAME: RepoSync オブジェクトの名前。
    • NAMESPACE: Namespace リポジトリを作成した Namespace。

出力には、ResourceGroup のすべてのリソースのステータスが表示されます。たとえば、次の出力は、nginx-deployment という名前の Deployment の準備ができていることを示しています。

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

ログを表示

作成した RootSync オブジェクトと RepoSync オブジェクトごとに、Config Sync は同期を実行するための Reconciler Deployment を作成します。このセクションでは、これらの Reconciler のログを表示する方法について説明します。ログを表示すると、RootSync オブジェクトまたは RepoSync オブジェクトのステータスで確認できない進行状況、警告、エラーに関する追加情報が得られるため、問題のデバッグに活用できます。

  • RootSync Reconciler または RepoSync Reconciler のログを表示するには、次のコマンドを実行します。

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

    次のように置き換えます。

    • RECONCILER_NAME: RootSync オブジェクトまたは RepoSync オブジェクトの Reconciler 名。

      • RootSync については、RootSync の名前が root-sync の場合、Reconciler の名前は root-reconciler-ROOT_SYNC_NAME または root-reconciler です。

      • RepoSync については、Reconciler の名前は ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH または ns-reconciler-NAMESPACERepoSync の名前が repo-syncの場合)です。ここで、NAMESPACERepoSync オブジェクトを作成した名前空間です。

    • CONTAINER_NAME: コンテナ名は、reconcilergit-synchydration-controlleroci-synchelm-sync のいずれかの値にする必要があります。これらのコンテナの詳細については、Reconciler コンテナをご覧ください。

RootSync または RepoSync の Reconciler ログレベルを構成する

コンテナログにより多くの情報が含まれるようにするには、ログの詳細度を構成します。デフォルトでは、ほとんどのコンテナにはログの詳細度に関するデフォルト値の 0 が設定されています。ただし、デフォルト値が 5 である git-sync コンテナと otel-agent コンテナは例外です。

ログの詳細度を変更する際は、記録されるデータ量が増加するため、ログの詳細度を引き上げるとロギングのコストが増大することに留意してください。

ログの詳細度を変更するには、次の例に示すように .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

ログの詳細度は、spec.template.spec.containers[] 内の args の一つとして確認でき、-v=0 のように表示されます。ここで、0 は現在のログの詳細度です。この例では、ログの詳細度の値を 0 にすることで、重要なイベントのみがログに記録されます。