Azure Kubernetes Fleet Manager での ResourcePlacement API のトラブルシューティング (プレビュー)

概要

このトラブルシューティング ガイドは、Azure Kubernetes Fleet Manager を使用 ResourcePlacement API オブジェクト関連の問題を解決するのに役立ちます。 ハブ クラスターでこれらのエラーをトラブルシューティングするには、次のオブジェクトに関する知識が必要です。

  • ResourceSnapshot
  • SchedulingPolicySnapshot
  • ResourceBinding
  • Work

各オブジェクトの詳細については、 KubeFleet API リファレンスを参照してください

ResourcePlacement と ClusterResourcePlacement の関係

ResourcePlacement と ClusterResourcePlacement は、条件の種類の 1 対 1 のマッピングと同じ基になるアーキテクチャを共有します。 ClusterResourcePlacement トラブルシューティング ガイドに記載されているトラブルシューティング方法は、ResourcePlacement にも適用できます。 主な違いは、ResourcePlacement は名前空間スコープであり、名前空間スコープのリソースで動作し、ClusterResourcePlacement はクラスター スコープである点です。

条件の種類は名前付け規則に従います。ResourcePlacement 条件では ResourcePlacement プレフィックスが使用され、ClusterResourcePlacement 条件では ClusterResourcePlacement プレフィックスが使用されます。 例えば次が挙げられます。

  • ResourcePlacementScheduledClusterResourcePlacementScheduled
  • ResourcePlacementAppliedClusterResourcePlacementApplied
  • ResourcePlacementAvailableClusterResourcePlacementAvailable

ClusterResourcePlacement のトラブルシューティング ガイダンスに従う場合は、適切な ResourcePlacement 条件の名前とコマンドを置き換えます (たとえば、kubectl get resourceplacement -n <namespace>ではなくkubectl get clusterresourceplacementを使用します)。

ResourcePlacement の重要な考慮事項

名前空間の前提条件

Important

ResourcePlacement では、既にターゲット名前空間を持つクラスターにのみ名前空間スコープのリソースを配置できます。

ResourcePlacement を作成する前に、

  • メンバー クラスターにターゲット名前空間が存在することを確認します。次のいずれかを行います。
    • 名前空間専用モードを使用して ClusterResourcePlacement によって作成される
    • メンバー クラスターに既に存在する
  • 名前空間がメンバー クラスターに存在しない場合、 ResourcePlacement はそのクラスターにリソースを適用できません。

ClusterResourcePlacement との調整

ResourcePlacement と ClusterResourcePlacement の両方を一緒に使用する場合:

  • 名前空間専用モードの ClusterResourcePlacement: ClusterResourcePlacement を使用して、クラスター間で名前空間自体を作成および管理します。
  • リソースの ResourcePlacement: ResourcePlacement を使用して、その名前空間内の特定のリソースを管理します。
  • 競合を回避する: 競合を防ぐために、ClusterResourcePlacement と ResourcePlacement で同じリソースが選択されないようにします。

リソース スコープの制限事項

ResourcePlacement では、ResourcePlacement オブジェクトが存在するのと同じ名前空間内の名前空間スコープのリソースのみを選択および管理できます。

  • サポート: ResourcePlacement の名前空間内のコフィッグマップ、シークレット、サービス、デプロイメント、ステートフルセット、ジョブなど
  • サポートされていません: クラスター スコープのリソース (代わりに ClusterResourcePlacement を使用)
  • サポートされていません: 他の名前空間内のリソース

ResourcePlacement デプロイの完全な進行

ResourcePlacementカスタム リソースの進行状況と状態を理解することは、障害の診断と識別に不可欠です。 次のコマンドを使用して、 ResourcePlacement カスタム リソースの状態を表示できます。

kubectl describe resourceplacement <name> -n <namespace>

詳細については、「 ResourcePlacement を使用して名前空間スコープのリソースを配置する」を参照してください。

ResourcePlacementの完全な進行は次のとおりです。

  1. ResourcePlacementScheduled: リソースが配置用にスケジュールされていることを示します。

    false の場合は、「 ClusterResourcePlacementScheduled 条件の状態が false の場合のトラブルシューティング方法」を参照してください。

  2. ResourcePlacementRolloutStarted: ロールアウト プロセスが開始されたことを示します。

    false の場合は、「 ClusterResourcePlacementRolloutStarted 条件の状態が false の場合のトラブルシューティング方法」を参照してください。

  3. ResourcePlacementOverridden: リソースがオーバーライドされたことを示します。

    false の場合は、「 ClusterResourcePlacementOverridden 条件の状態が false の場合のトラブルシューティング方法」を参照してください。

  4. ResourcePlacementWorkSynchronized: 作業オブジェクトが同期されることを示します。

    false の場合は、「 ClusterResourcePlacementWorkSynchronized 条件の状態が false の場合のトラブルシューティング方法」を参照してください。

  5. ResourcePlacementApplied: リソースが適用されていることを示します。 この条件は、適用された戦略の種類が ClientSideApply (既定) または ServerSideApply場合にのみ設定されます。

    false の場合は、「 ClusterResourcePlacementApplied 条件の状態が false の場合のトラブルシューティング方法」を参照してください。

  6. ResourcePlacementAvailable: リソースが使用可能であることを示します。 この条件は、適用された戦略の種類が ClientSideApply (既定) または ServerSideApply場合にのみ設定されます。

    false の場合は、「 ClusterResourcePlacementAvailable 条件の状態が false の場合のトラブルシューティング方法」を参照してください。

  7. ResourcePlacementDiffReported: すべてのリソースで差分レポートが完了するかどうかを示します。 この条件は、適用された戦略の種類が ReportDiffされている場合にのみ設定されます。

FAQ

一部のクラスターが期待どおりに選択されていない場合にデバッグするにはどうすればよいですか?

SchedulingPolicySnapshotの状態を確認して、スケジューラが選択したクラスターとその選択理由を確認します。

SchedulingPolicySnapshot リソースの最新のResourcePlacementを見つけるには、次のコマンドを実行します。

kubectl get schedulingpolicysnapshot -n <namespace> -l kubernetes-fleet.io/is-latest-snapshot=true,kubernetes-fleet.io/parent-CRP={RPName}

このコマンドでは、 {RPName}ResourcePlacement 名に置き換え、 <namespace> を ResourcePlacement が存在する名前空間に置き換えます。

次に、 SchedulingPolicySnapshotResourcePlacement ポリシーと比較して、それらが一致することを確認します。

選択したクラスターに予想されるリソースがない場合、または ResourcePlacement が最新の変更を取得しない場合、デバッグするにはどうすればよいですか?

  1. ResourcePlacementRolloutStarted状態のResourcePlacement条件が true または false に設定されているかどうかを確認します
    • false の場合、リソースの配置はまだロールアウトを開始しません。
    • true の場合は、手順 2 に進みます。
  2. ResourcePlacementApplied条件が unknownfalse、または true に設定されているかどうかを確認します
    • 不明な場合は、Fleet Manager がメンバー クラスターにリソースを適用するため、プロセスが完了するまで待ちます。 状態がしばらく 不明 なままの場合は、この状態が通常とは異なる動作であるため 、問題 を開きます。
    • false の場合、リソースは 1 つ以上のクラスターに適用できませんでした。 クラスター固有の詳細については、状態の placementStatuses セクションを確認します。
    • true の場合は、ResourcePlacement と同じ名前空間内のハブ クラスターにリソースが存在することを確認します。
  3. 特定のクラスターに関する問題を特定するには、placementStatuses状態の ResourcePlacement セクションを調べます。 クラスターごとに、次の情報が表示されます。
    • クラスター名
    • そのクラスターに固有の条件 ( AppliedAvailableなど)
    • failedPlacements セクション。適用に失敗したリソースと理由が一覧表示されます。

最新の ResourceBinding リソースを見つけるにはどうすればよいですか?

次のコマンドは、ResourceBindingsに関連付けられているすべてのResourcePlacementインスタンスを一覧表示します。

kubectl get resourcebinding -n <namespace> -l kubernetes-fleet.io/parent-CRP={RPName}

このコマンドでは、 {RPName}ResourcePlacement 名に置き換え、 <namespace> を ResourcePlacement が存在する名前空間に置き換えます。

  1. 次のコマンドを実行して、 ResourcePlacement デプロイの状態を表示します。 この場合、名前空間test-nsResourcePlacement名はtest-rpです。

    kubectl describe resourceplacement test-rp -n test-ns
    
  2. 出力例を次に示します。

    Status:
      Conditions:
        Last Transition Time:   2025-11-13T22:25:45Z
        Message:                found all cluster needed as specified by the scheduling policy, found 2 cluster(s)
        Observed Generation:    2
        Reason:                 SchedulingPolicyFulfilled
        Status:                 True
        Type:                   ResourcePlacementScheduled
        Last Transition Time:   2025-11-13T22:25:45Z
        Message:                All 2 cluster(s) start rolling out the latest resource
        Observed Generation:    2
        Reason:                 RolloutStarted
        Status:                 True
        Type:                   ResourcePlacementRolloutStarted
        ...
      Placement Statuses:
        Cluster Name:  kind-cluster-1
        Conditions:
          Last Transition Time:   2025-11-13T22:25:45Z
          Message:                Successfully scheduled resources for placement in "kind-cluster-1"
          Status:                 True
          Type:                   Scheduled
          ...
        Cluster Name:             kind-cluster-2
        Conditions:
          ...
      Selected Resources:
        Kind:       ConfigMap
        Name:       app-config
        Namespace:  test-ns
        Version:    v1
    

    placementStatuses状態の test-rp セクションから、リソースが 2 つのメンバー クラスターに分散されているため、2 つのResourceBindings インスタンスがあることに注意してください。

  3. ResourceBindings値を取得するには、次のコマンドを実行します。

    kubectl get resourcebinding -n test-ns -l kubernetes-fleet.io/parent-CRP=test-rp 
    
    NAME                              WORKSYNCHRONIZED   RESOURCESAPPLIED   AGE
    test-rp-kind-cluster-1-be990c3e   True               True               33s
    test-rp-kind-cluster-2-ec4d953c   True               True               33s
    

    出力には、ResourceBindingsに関連付けられているすべてのtest-rp インスタンスが一覧表示されます。 ResourceBinding リソース名は、次の形式を使用します。

    {RPName}-{clusterName}-{suffix}

    ResourceBindingに基づいて、探しているターゲット クラスターのclusterNameを見つけます。

最新の ResourceSnapshot リソースを見つけるにはどうすればよいですか?

最新の ResourceSnapshot リソースを見つけるには、次のコマンドを実行します。

kubectl get resourcesnapshot -n <namespace> -l kubernetes-fleet.io/is-latest-snapshot=true,kubernetes-fleet.io/parent-CRP={RPName}

このコマンドでは、 {RPName}ResourcePlacement 名に置き換え、 <namespace> を ResourcePlacement が存在する名前空間に置き換えます。

ResourcePlacement に関連付けられている正しい作業リソースを見つけるにはどうすればよいですか?

正しい作業リソースを見つけるには、次の手順に従います。

  1. メンバー クラスターの名前空間と ResourcePlacement 名を識別します。 名前空間の形式は fleet-member-{clusterName}

  2. 作業リソースを取得するには、次のコマンドを実行します。

    kubectl get work -n fleet-member-{clusterName} -l kubernetes-fleet.io/parent-CRP={RPName}
    

    このコマンドでは、 {clusterName}{RPName} を、最初の手順で識別した名前に置き換えます。