ClusterStagedUpdateRun と StagedUpdateRun 初期化エラーのトラブルシューティング

概要

この記事では、Microsoft Azure Kubernetes Fleet Manager で更新実行 API を使用してリソースを伝達するときに発生する ClusterStagedUpdateRun および StagedUpdateRun 初期化エラーのトラブルシューティング方法について説明します。

エラー メッセージの例を次に示します。

    Last Transition Time:  2026-02-11T00:35:09Z
    Message:               cannot continue the updateRun: failed to validate the updateRun: failed to process the request due to a  client error: no resourceSnapshots with index `1` found for placement `/example-placement`
    Observed Generation:   1
    Reason:                UpdateRunInitializedFailed
    Status:                False
    Type:                  Initialized

初期化エラーを調査する

  1. 次のコマンドを実行して、 ClusterStagedUpdateRun 初期化エラーを見つけます。
$ kubectl get clusterstagedupdaterun example-run
NAME              PLACEMENT           RESOURCE-SNAPSHOT-INDEX   POLICY-SNAPSHOT-INDEX   INITIALIZED   PROGRESSING   SUCCEEDED   AGE
example-run       example-placement   1                         0                       False                                   2s

INITIALIZED フィールドの値はFalse。 この値は、初期化に失敗したことを示します。

  1. エラーの詳細については、次のコマンドを実行します。
$ kubectl describe clusterstagedupdaterun example-run
Name:         example-run
..
API Version:  placement.kubernetes-fleet.io/v1beta1
Kind:         ClusterStagedUpdateRun
Metadata:
  Creation Timestamp:  2026-02-11T21:05:17Z
  Finalizers:
    kubernetes-fleet.io/clusterstagedupdaterun-finalizer
  Generation:        1
  ...
Spec:
  Placement Name:                example-placement
  Resource Snapshot Index:       0
  Staged Rollout Strategy Name:  example-strategy
  State:                         Initialize
Status:
  Applied Strategy:
    Comparison Option:  PartialComparison
    Type:               ClientSideApply
    When To Apply:      Always
    When To Take Over:  Always
  Conditions:
    Last Transition Time:         2026-02-11T21:05:17Z
    Message:                      cannot continue the updateRun: failed to validate the updateRun: failed to process the request due to a client error: some clusters are not placed in any stage, total 3, showing up to 10: cluster-1, cluster-2, cluster-3
    Observed Generation:          1
    Reason:                       UpdateRunInitializedFailed
    Status:                       False
    Type:                         Initialized
  Policy Observed Cluster Count:  3
  Policy Snapshot Index Used:     0
  Staged Update Strategy Snapshot:
    Stages:
      After Stage Tasks:
        Type:  Approval
      Label Selector:
        Match Labels:
          Environment:  staging
      Max Concurrency:  1
      Name:             staging
  Stages Status:
    After Stage Task Status:
      Approval Request Name:  example-run-after-staging
      Type:                   Approval
    Clusters:
    Stage Name:  staging

この状態値は、初期化に失敗したことを示します。 この場合、存在しないリソース スナップショット インデックス 1ClusterStagedUpdateRunに使用されます。

一般的な初期化エラー

原因

初期化エラーが原因で、メッセージ ClusterStagedUpdateRun "Aborted" が生成されます。 初期化プロセスは回復できません。

解決策

検証エラーが原因でエラーが発生した場合は、問題を修正し、新しい ClusterStagedUpdateRun インスタンスを作成します。

親の位置が見つかりません

原因

ClusterResourcePlacementは名前空間に存在しません。

メッセージの例:

cannot continue the updateRun: failed to validate the updateRun: parent placement not found

解決策

ClusterResourcePlacementで指定したのと同じ名前の新しいClusterStagedUpdateRunを作成します。 次に、新しいClusterStagedUpdateRunを参照する新しいClusterResourcePlacement インスタンスを作成します。 詳しくは、 クラスター・スコープ・リソースの配置を参照してください。

既に存在する有効なClusterStagedUpdateRunを参照する新しいClusterResourcePlacement インスタンスを作成することもできます。 次のコマンドを実行します。

kubectl get clusterresourceplacements

spec値を表示し、次のコマンドを実行してデプロイspec.Strategy.Type: External戦略を確認します。

$ kubectl describe clusterresourceplacement <cluster-resource-placement-name> 

既存のClusterStagedUpdateRun値のいずれかを参照するClusterResourceplacementを作成する方法については、「リソース配置のクラスター順序を制御する」を参照してください。

選択した配置が外部ロールアウト戦略の種類ではありません

原因

ClusterResourcePlacementでは、明確な外部ロールアウト戦略は指定されません。

メッセージの例:

cannot continue the updateRun: failed to validate the updateRun: The placement does not have an external rollout strategy...

解決策

段階的な更新を有効にするには、ClusterResourcePlacementを使用してspec.Strategy.Type: External インスタンスを再作成し、新しいClusterStagedUpdateRunを作成してから、新しいClusterResourcePlacementを選択します。

ClusterResourcePlacement インスタンスを spec.Strategy.Type: RolloutStrategy から spec.Strategy.Type: External に変更できます。 この変更は許可されます。 ただし、その逆は許可されません。

ClusterResourcePlacement設定されているspec.Strategy.Type: External インスタンスも見つけることができます。 次に、 ClusterStagedUpdateRunを作成し、この ClusterResourcePlacementを指定できます。

戦略が見つかりません

原因

ClusterStagedUpdateStrategy が存在しません。

メッセージの例:

cannot continue the updateRun: failed to validate the updateRun: referenced updateStrategy not found: ...

解決策

ClusterStagedUpdateStrategyで指定したのと同じ名前でClusterStagedUpdateRun インスタンスを作成します。 次に、このClusterStagedUpdateRunを参照するClusterStagedUpdateStrategy インスタンスを作成します。

既に存在する有効なClusterStagedUpdateRunを参照するClusterStagedUpdateStrategy インスタンスを作成することもできます。

無効なステージ タスク

原因

ClusterStagedUpdateStrategyのステージ内で、beforeStageTaskまたはafterStageTaskのインスタンスが正しく定義されていません。

メッセージの例:

cannot continue the updateRun: failed to validate the updateRun: the before stage tasks are invalid, updateStrategy: ...

### Solution

For information about how to correctly update the `ClusterStagedUpdateStrategy`, see [Staged update strategy (preview)](/azure/kubernetes-fleet/concepts-rollout-strategy#staged-update-strategy-preview).

**Cluster appears more than one time**

### Cause

View the `ClusterStagedUpdateStrategy` instance:

```bash
    $ kubectl describe clusterstagedupdatestrategy <cluster-staged-update-strategy-name>
    Name:         example-strategy
    ...
    API Version:  placement.kubernetes-fleet.io/v1beta1
    Kind:         ClusterStagedUpdateStrategy
    Metadata:
      Creation Timestamp:  2026-02-11T21:01:41Z
      Generation:          2
      ...
    Spec:
      Stages:
        After Stage Tasks:
          Type:  Approval
        Label Selector:
          Match Labels:
            Environment:  staging
        Max Concurrency:  1
        Name:             staging
        After Stage Tasks:
          Type:  Approval
        Label Selector:
          Match Labels:
            Region:       west
        Max Concurrency:  1
        Name:             west

ClusterStagedUpdateStrategyには、Environment: stagingRegion: westの両方のラベルが選択されています。

次に、エラー メッセージで参照されている member-1 ラベルが複数のステージに表示されるように表示します。 次のコマンドを実行します。

    $ kubectl get membercluster member-1  --show-labels

    NAME             JOINED   AGE   MEMBER-AGENT-LAST-SEEN   NODE-COUNT   AVAILABLE-CPU   AVAILABLE-MEMORY   LABELS
    member-1         True     81m   16s                      2            14750m          48308656Ki         environment=staging,region=west

このクラスターでは、これら 2 つのステージで両方のラベルが使用されます。

メッセージの例:

cannot continue the updateRun: failed to validate the updateRun: cluster `member-1` appears in more than one stage

解決策

いずれかのラベルを削除するか、 ClusterStagedUpdateStrategy でステージを更新して、個別のクラスター ラベルを選択します。 次に、新しい ClusterStagedUpdateRunを作成します。

一部のクラスターにステージが割り当てられない

原因

エラー メッセージには、ステージが割り当てられていないクラスター (最大 10 個) の一覧が表示されます。 ClusterResourcePlacementを調べて、対象となるクラスターを決定します。 この情報を取得するには、次のコマンドを実行します。

    $ kubectl get clusterresourceplacement <cluster-resource-placement-name>
    Name:         example-placement
    ...
    API Version:  placement.kubernetes-fleet.io/v1beta1
    Kind:         ClusterResourcePlacement
    Metadata:
      Creation Timestamp:  2026-02-11T21:02:36Z
      Finalizers:
        kubernetes-fleet.io/crp-cleanup
        kubernetes-fleet.io/scheduler-cleanup
      Generation:        1
      Resource Version:  11468
      UID:               d268e4c0-b614-408c-bdc0-b2670194587b
    Spec:
      Policy:
        Placement Type:  PickAll
      Resource Selectors:
        Group:                 ""
        Kind:                  Namespace
        Name:                  test
        Selection Scope:       NamespaceWithResources
        Version:               v1
      Revision History Limit:  10
      Status Reporting Scope:  ClusterScopeOnly
      Strategy:
        Type:  External
    Status:
      Conditions:
        Last Transition Time:  2026-02-11T21:02:37Z
        Message:               found all cluster needed as specified by the scheduling policy, found 3 cluster(s)
        Observed Generation:   1
        Reason:                SchedulingPolicyFulfilled
        Status:                True
        Type:                  ResourcePlacementScheduled
        Last Transition Time:  2026-02-11T21:02:37Z
        Message:               Rollout is controlled by an external controller and no resource snapshot name is observed across clusters, probably rollout has not started yet
        Observed Generation:   1
        Reason:                RolloutControlledByExternalController
        Status:                Unknown
        Type:                  ResourcePlacementRolloutStarted
      Placement Statuses:
        Cluster Name:            cluster-1
        Conditions:
          ...
        Cluster Name:            cluster-2
        Conditions:
          ...
        Cluster Name:            cluster-3
        Conditions:
          ...

ClusterResourcePlacement は、リソースを割り当てるサブセット クラスター (またはフリート内のすべてのクラスター) をターゲットにします。

ClusterResourcePlacementでは、配置の種類はPickAll。 この種類は、フリート内のすべてのクラスターをステージに割り当てる必要があることを意味します。 クラスターがステージに配置されていない場合、クラスターには、 ClusterStagedUpdateStrategyで指定されているステージのラベルがありません。

ClusterStagedUpdateStrategyを確認します。

    $  kubectl describe clusterstagedupdatestrategy <cluster-staged-update-strategy-name>
    Name:         example-strategy
    ...
    API Version:  placement.kubernetes-fleet.io/v1beta1
    Kind:         ClusterStagedUpdateStrategy
    Metadata:
      Creation Timestamp:  2026-02-11T21:01:41Z
      Generation:          1
      ...
    Spec:
      Stages:
        After Stage Tasks:
          Type:  Approval
        Label Selector:
          Match Labels:
            Environment:  staging
        Max Concurrency:  1
        Name:             staging

[ Spec ] フィールドには、ラベルを持つクラスターを選択する 1 つのステージ ( Environment: staging) が表示されます。

メッセージの例:

cannot continue the updateRun: failed to validate the updateRun: failed to process the request due to a client error: some clusters are not placed in any stage, total 3, showing up to 10: cluster-1, cluster-2, cluster-3

解決策

  1. environment=staging ラベルを持つクラスターを更新します。
    $ az fleet member update -g <resource-group-name> -f <fleet-name> -n <member-cluster-name> --labels "environment=staging"
  1. メンバー クラスターに新しいラベルがあることを確認します。
    $ kubectl get membercluster <member-cluster-name> --show-labels

    NAME             JOINED   AGE   MEMBER-AGENT-LAST-SEEN   NODE-COUNT   AVAILABLE-CPU   AVAILABLE-MEMORY   LABELS
    cluster-1        True     62m   3s                       2            14750m          48308656Ki         environment=staging,region=east
  1. 残りのクラスターにラベルを追加します。

  2. 同じClusterStagedUpdateRunClusterResourcePlacementのインスタンスを参照するClusterStagedUpdateStrategy インスタンスを作成します。

    Last Transition Time:  2026-02-11T00:35:09Z
    Message:               cannot continue the updateRun: failed to validate the updateRun: failed to process the request due to     a         client error: no resourceSnapshots with index `1` found for placement `test-namespace/example-placement`
    Observed Generation:   1
    Reason:                UpdateRunInitializedFailed
    Status:                False
    Type:                  Initialized

初期化エラーを調査する

  1. 次のコマンドを実行して、 StagedUpdateRun 初期化エラーを見つけます。
$ kubectl get stagedupdaterun web-app-rollout -n my-app-namespace
NAME              PLACEMENT           RESOURCE-SNAPSHOT-INDEX   POLICY-SNAPSHOT-INDEX   INITIALIZED   PROGRESSING   SUCCEEDED   AGE
web-app-rollout   web-app-placement   1                         0                       False                                   2s

INITIALIZED フィールドの値はFalse。 この値は、初期化に失敗したことを示します。

  1. エラーの詳細については、次のコマンドを実行します。
$ kubectl describe stagedupdaterun web-app-rollout -n my-app-namespace
Name:         web-app-rollout
Namespace:    my-app-namespace
..
API Version:  placement.kubernetes-fleet.io/v1beta1
Kind:         StagedUpdateRun
Metadata:
  Creation Timestamp:  2026-02-11T21:05:17Z
  Finalizers:
    kubernetes-fleet.io/stagedupdaterun-finalizer
  Generation:        1
  ...
Spec:
  Placement Name:                web-app-rollout-placement
  Resource Snapshot Index:       0
  Staged Rollout Strategy Name:  example-strategy
  State:                         Initialize
Status:
  Applied Strategy:
    Comparison Option:  PartialComparison
    Type:               ClientSideApply
    When To Apply:      Always
    When To Take Over:  Always
  Conditions:
    Last Transition Time:         2026-02-11T21:05:17Z
    Message:                      cannot continue the updateRun: failed to validate the updateRun: failed to process the request due to a client error: some clusters are not placed in any stage, total 3, showing up to 10: cluster-1, cluster-2, cluster-3
    Observed Generation:          1
    Reason:                       UpdateRunInitializedFailed
    Status:                       False
    Type:                         Initialized
  Policy Observed Cluster Count:  3
  Policy Snapshot Index Used:     0
  Staged Update Strategy Snapshot:
    Stages:
      After Stage Tasks:
        Type:  Approval
      Label Selector:
        Match Labels:
          Environment:  staging
      Max Concurrency:  1
      Name:             staging
  Stages Status:
    After Stage Task Status:
      Approval Request Name:  web-app-rollout-after-staging
      Type:                   Approval
    Clusters:
    Stage Name:  staging

この条件は、初期化が失敗したことを示します。 この場合、 1 の存在しないリソース スナップショット インデックス値が StagedUpdateRunに使用されます。

一般的な初期化エラー

原因

"Aborted" StagedUpdateRun メッセージは、初期化失敗が原因で発生します。 初期化プロセスは回復できません。

解決策

検証エラーが原因でエラーが発生した場合は、問題を修正し、新しい StagedUpdateRunを作成します。

親の位置が見つかりません

原因

ResourcePlacement は名前空間に存在しません。

メッセージの例:

cannot continue the updateRun: failed to validate the updateRun: parent placement not found

解決策

ResourcePlacementで指定されたのと同じ名前空間にStagedUpdateRun インスタンスを作成します。 次に、そのStagedUpdateRunを参照するResourcePlacement インスタンスを作成します。

ResourcePlacement インスタンスを作成する方法については、「Azure Kubernetes Fleet Manager クラスター リソースの配置を使用して複数のクラスターにワークロードをデプロイする」を参照してください。

既に存在する有効な配置を参照する StagedUpdateRun インスタンスを作成するには:

  1. 次のコマンドを実行します。
    $ kubectl get resourceplacements -n <namespace-name>
  1. ResourcePlacement値を表示するためのSpec戦略について説明します。 戦略を確認し、値が spec.Strategy.Type: Externalされていることを確認します。

  2. 戦略をロールアウトするリソースを設定します。

    $ kubectl describe resourceplacement <cluster-resource-placement-name> -n <namespace-name>

詳細については、「 リソース配置のクラスター順序の制御」を参照してください。

選択した配置が外部ロールアウト戦略の種類ではありません

原因

ClusterResourcePlacementでは、明確な外部ロールアウト戦略は指定されません。

メッセージの例:

cannot continue the updateRun: failed to validate the updateRun: The placement does not have an external rollout strategy.

解決策

段階的な更新を有効にするには、ClusterResourcePlacement値を使用してspec.Strategy.Type: External インスタンスを再作成し、ClusterStagedUpdateRun インスタンスを作成してから、新しいClusterResourcePlacementを選択します。

ResourcePlacement インスタンスを spec.Strategy.Type: RolloutStrategy から spec.Strategy.Type: External に変更できます。 この変更は許可されますが、逆の変更は許可されません。

また、ResourcePlacement値を持つspec.Strategy.Type: Externalを見つけ、見つけたStagedUpdateRunを指定してResourcePlacementを作成することもできます。

戦略が見つかりません

原因

StagedUpdateStrategyは同じ名前空間に存在しません。

メッセージの例:

cannot continue the updateRun: failed to validate the updateRun: referenced updateStrategy not found: ...

解決策

StagedUpdateStrategyで指定したのと同じ名前空間内にStagedUpdateRun インスタンスを作成し、その戦略を参照するStagedUpdateRun インスタンスを作成します。

既に存在する有効なStagedUpdateRunを参照するStagedUpdateStrategy インスタンスを作成することもできます。

無効なステージ タスク

原因

StagedUpdateStrategyのステージ内で、beforeStageTaskまたはafterStageTaskインスタンスが正しく定義されていません。

メッセージの例:

cannot continue the updateRun: failed to validate the updateRun: the before stage tasks are invalid, updateStrategy: ...

解決策

StagedUpdateStrategyを正しく更新する方法については、「段階的更新戦略」を参照してください。

クラスターが複数回表示される

原因

クラスターは、 StagedUpdateRunの複数のステージで選択されます。

メッセージの例:

cannot continue the updateRun: failed to validate the updateRun: cluster `member-1` appears in more than one stage

StagedUpdateStrategyを確認します。

    $ kubectl describe stagedupdatestrategy <staged-update-strategy-name> -n <namespace-name>
    Name:         example-strategy
    Namespace:    my-app-namespace
    ...
    API Version:  placement.kubernetes-fleet.io/v1beta1
    Kind:         StagedUpdateStrategy
    Metadata:
      Creation Timestamp:  2026-02-11T21:01:41Z
      Generation:          2
      ...
    Spec:
      Stages:
        After Stage Tasks:
          Type:  Approval
        Label Selector:
          Match Labels:
            Environment:  staging
        Max Concurrency:  1
        Name:             staging
        After Stage Tasks:
          Type:  Approval
        Label Selector:
          Match Labels:
            Region:       west
        Max Concurrency:  1
        Name:             west

StagedUpdateStrategy インスタンスには、Environment: stagingラベルとRegion: west ラベルの両方が選択されている 2 つのラベルがあります。

複数のステージに表示されるため、エラー メッセージで参照されている member-1 ラベルを調べます。 次のコマンドを実行します。

    $ kubectl get membercluster member-1  --show-labels

    NAME             JOINED   AGE   MEMBER-AGENT-LAST-SEEN   NODE-COUNT   AVAILABLE-CPU   AVAILABLE-MEMORY   LABELS
    member-1         True     81m   16s                      2            14750m          48308656Ki         environment=staging,region=east

このクラスターでは、これら 2 つのステージで両方のラベルが使用されます。

解決策

いずれかのラベルを削除するか、 StagedUpdateStrategy でステージを更新して、個別のクラスター ラベルを選択します。 次に、新しい StagedUpdateRun インスタンスを作成します。

一部のクラスターにステージが割り当てられない

原因

エラー メッセージには、ステージが割り当てられていないクラスター (最大 10 個) の一覧が表示されます。 ResourcePlacementを調べて、対象となるクラスターを決定します。

メッセージの例:

cannot continue the updateRun: failed to validate the updateRun: failed to process the request due to a client error: some clusters are not placed in any stage, total 3, showing up to 10: cluster-1, cluster-2, cluster-3
```text

Run the following commands:

```bash
    $ kubectl get resourceplacement web-app-rollout-placement -n my-app-namespace
    Name:         web-app-rollout-placement
    Namespace:    my-app-namespace
    ...
    API Version:  placement.kubernetes-fleet.io/v1beta1
    Kind:         ResourcePlacement
    Metadata:
      Creation Timestamp:  2026-02-11T21:02:36Z
      Finalizers:
        kubernetes-fleet.io/crp-cleanup
        kubernetes-fleet.io/scheduler-cleanup
      Generation:        1
      Resource Version:  11468
      UID:               d268e4c0-b614-408c-bdc0-b2670194587b
    Spec:
      Policy:
        Placement Type:  PickAll
      Resource Selectors:
        Group:                 apps
        Kind:                  Deployment
        Name:                  test
        Selection Scope:       NamespaceWithResources
        Version:               v1
      Revision History Limit:  10
      Status Reporting Scope:  ClusterScopeOnly
      Strategy:
        Type:  External
    Status:
      Conditions:
        Last Transition Time:  2026-02-11T21:02:37Z
        Message:               found all cluster needed as specified by the scheduling policy, found 3 cluster(s)
        Observed Generation:   1
        Reason:                SchedulingPolicyFulfilled
        Status:                True
        Type:                  ResourcePlacementScheduled
        Last Transition Time:  2026-02-11T21:02:37Z
        Message:               Rollout is controlled by an external controller and no resource snapshot name is observed across clusters, probably rollout has not started yet
        Observed Generation:   1
        Reason:                RolloutControlledByExternalController
        Status:                Unknown
        Type:                  ResourcePlacementRolloutStarted
      Placement Statuses:
        Cluster Name:            cluster-1
        Conditions:
          ...
        Cluster Name:            cluster-2
        Conditions:
          ...
        Cluster Name:            cluster-3
        Conditions:
          ...

ResourcePlacement は、リソースを割り当てるサブセット クラスター (またはフリート内のすべてのクラスター) をターゲットにします。

ResourcePlacementでは、配置の種類はPickAll。 つまり、フリート内のすべてのクラスターをステージに割り当てる必要があります。

クラスターがステージに配置されていない場合、クラスターには、StagedUpdateStrategyで指定されているステージのラベルがありません。

StagedUpdateStrategyを確認します。

    $  kubectl describe stagedupdatestrategy example-strategy -n my-app-namespace
    Name:         example-strategy
    Namespace:    my-app-namespace
    ...
    API Version:  placement.kubernetes-fleet.io/v1beta1
    Kind:         StagedUpdateStrategy
    Metadata:
      Creation Timestamp:  2026-02-11T21:01:41Z
      Generation:          1
      ...
    Spec:
      Stages:
        After Stage Tasks:
          Type:  Approval
        Label Selector:
          Match Labels:
            Environment:  staging
        Max Concurrency:  1
        Name:             staging

[ Spec ] フィールドには、ラベルを持つクラスターを選択する 1 つのステージ ( Environment: staging) が表示されます。

解決策

  1. environment=staging ラベルを持つクラスターを更新します。
    $ az fleet member update -g <resource-group-name> -f <fleet-name> -n <member-cluster-name> --labels "environment=staging"
  1. メンバー クラスターに新しいラベルがあることを確認します。
    $ kubectl get membercluster <member-cluster-name> --show-labels

    NAME             JOINED   AGE   MEMBER-AGENT-LAST-SEEN   NODE-COUNT   AVAILABLE-CPU   AVAILABLE-MEMORY   LABELS
    cluster-1        True     62m   3s                       2            14750m          48308656Ki         environment=staging,region=east
  1. 残りのクラスターにラベルを追加します。

  2. 同じStagedUpdateRunResourcePlacementのインスタンスを参照するStagedUpdateStrategy インスタンスを作成します。