概要
このトラブルシューティング ガイドは、Azure Kubernetes Fleet Manager を使用 ResourcePlacement API オブジェクト関連の問題を解決するのに役立ちます。 ハブ クラスターでこれらのエラーをトラブルシューティングするには、次のオブジェクトに関する知識が必要です。
ResourceSnapshotSchedulingPolicySnapshotResourceBindingWork
各オブジェクトの詳細については、 KubeFleet API リファレンスを参照してください。
ResourcePlacement と ClusterResourcePlacement の関係
ResourcePlacement と ClusterResourcePlacement は、条件の種類の 1 対 1 のマッピングと同じ基になるアーキテクチャを共有します。 ClusterResourcePlacement トラブルシューティング ガイドに記載されているトラブルシューティング方法は、ResourcePlacement にも適用できます。 主な違いは、ResourcePlacement は名前空間スコープであり、名前空間スコープのリソースで動作し、ClusterResourcePlacement はクラスター スコープである点です。
条件の種類は名前付け規則に従います。ResourcePlacement 条件では ResourcePlacement プレフィックスが使用され、ClusterResourcePlacement 条件では ClusterResourcePlacement プレフィックスが使用されます。 例えば次が挙げられます。
-
ResourcePlacementScheduled↔ClusterResourcePlacementScheduled -
ResourcePlacementApplied↔ClusterResourcePlacementApplied -
ResourcePlacementAvailable↔ClusterResourcePlacementAvailable
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の完全な進行は次のとおりです。
ResourcePlacementScheduled: リソースが配置用にスケジュールされていることを示します。
false の場合は、「 ClusterResourcePlacementScheduled 条件の状態が false の場合のトラブルシューティング方法」を参照してください。
ResourcePlacementRolloutStarted: ロールアウト プロセスが開始されたことを示します。
false の場合は、「 ClusterResourcePlacementRolloutStarted 条件の状態が false の場合のトラブルシューティング方法」を参照してください。
ResourcePlacementOverridden: リソースがオーバーライドされたことを示します。
false の場合は、「 ClusterResourcePlacementOverridden 条件の状態が false の場合のトラブルシューティング方法」を参照してください。
ResourcePlacementWorkSynchronized: 作業オブジェクトが同期されることを示します。
false の場合は、「 ClusterResourcePlacementWorkSynchronized 条件の状態が false の場合のトラブルシューティング方法」を参照してください。
ResourcePlacementApplied: リソースが適用されていることを示します。 この条件は、適用された戦略の種類が
ClientSideApply(既定) またはServerSideApply場合にのみ設定されます。false の場合は、「 ClusterResourcePlacementApplied 条件の状態が false の場合のトラブルシューティング方法」を参照してください。
ResourcePlacementAvailable: リソースが使用可能であることを示します。 この条件は、適用された戦略の種類が
ClientSideApply(既定) またはServerSideApply場合にのみ設定されます。false の場合は、「 ClusterResourcePlacementAvailable 条件の状態が false の場合のトラブルシューティング方法」を参照してください。
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 が存在する名前空間に置き換えます。
次に、 SchedulingPolicySnapshot を ResourcePlacement ポリシーと比較して、それらが一致することを確認します。
選択したクラスターに予想されるリソースがない場合、または ResourcePlacement が最新の変更を取得しない場合、デバッグするにはどうすればよいですか?
-
ResourcePlacementRolloutStarted状態のResourcePlacement条件が true または false に設定されているかどうかを確認します。- false の場合、リソースの配置はまだロールアウトを開始しません。
- true の場合は、手順 2 に進みます。
-
ResourcePlacementApplied条件が unknown、false、または true に設定されているかどうかを確認します。- 不明な場合は、Fleet Manager がメンバー クラスターにリソースを適用するため、プロセスが完了するまで待ちます。 状態がしばらく 不明 なままの場合は、この状態が通常とは異なる動作であるため 、問題 を開きます。
-
false の場合、リソースは 1 つ以上のクラスターに適用できませんでした。 クラスター固有の詳細については、状態の
placementStatusesセクションを確認します。 - true の場合は、ResourcePlacement と同じ名前空間内のハブ クラスターにリソースが存在することを確認します。
- 特定のクラスターに関する問題を特定するには、
placementStatuses状態のResourcePlacementセクションを調べます。 クラスターごとに、次の情報が表示されます。- クラスター名
- そのクラスターに固有の条件 (
Applied、Availableなど) -
failedPlacementsセクション。適用に失敗したリソースと理由が一覧表示されます。
最新の ResourceBinding リソースを見つけるにはどうすればよいですか?
次のコマンドは、ResourceBindingsに関連付けられているすべてのResourcePlacementインスタンスを一覧表示します。
kubectl get resourcebinding -n <namespace> -l kubernetes-fleet.io/parent-CRP={RPName}
注
このコマンドでは、 {RPName} を ResourcePlacement 名に置き換え、 <namespace> を ResourcePlacement が存在する名前空間に置き換えます。
例
次のコマンドを実行して、
ResourcePlacementデプロイの状態を表示します。 この場合、名前空間test-nsのResourcePlacement名はtest-rpです。kubectl describe resourceplacement test-rp -n test-ns出力例を次に示します。
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: v1placementStatuses状態のtest-rpセクションから、リソースが 2 つのメンバー クラスターに分散されているため、2 つのResourceBindingsインスタンスがあることに注意してください。ResourceBindings値を取得するには、次のコマンドを実行します。kubectl get resourcebinding -n test-ns -l kubernetes-fleet.io/parent-CRP=test-rpNAME 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 に関連付けられている正しい作業リソースを見つけるにはどうすればよいですか?
正しい作業リソースを見つけるには、次の手順に従います。
メンバー クラスターの名前空間と
ResourcePlacement名を識別します。 名前空間の形式はfleet-member-{clusterName}。作業リソースを取得するには、次のコマンドを実行します。
kubectl get work -n fleet-member-{clusterName} -l kubernetes-fleet.io/parent-CRP={RPName}注
このコマンドでは、
{clusterName}と{RPName}を、最初の手順で識別した名前に置き換えます。