ClusterStagedUpdateRun と StagedUpdateRun スタック エラーのトラブルシューティング

概要

この記事では、Microsoft Azure Kubernetes Fleet Manager で更新実行 API を使用しているときに更新プログラムの実行が停止したときに生成される ClusterStagedUpdateRun エラーと StagedUpdateRun エラーのトラブルシューティング方法について説明します。

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

    Last Transition Time:  2026-02-11T22:15:20Z
    Message:               The UpdateRun initialized successfully
    Observed Generation:   2
    Reason:                UpdateRunInitializedSuccessfully
    Status:                True
    Type:                  Initialized
    Last Transition Time:  2026-02-11T22:15:59Z
    Message:               The updateRun is stuck waiting for member2 cluster(s) in stage staging to finish
      updating, please check placement status for potential errors
    Observed Generation:   2
    Reason:                UpdateRunStuck
    Status:                False
    Type:                  Progressing

更新プログラムの実行停止エラーを調査する

  1. ClusterStagedUpdateRun "スタック" エラー メッセージを見つけるには、次のコマンドを実行します。
$ kubectl get csur example-run 

NAME          PLACEMENT           RESOURCE-SNAPSHOT-INDEX   POLICY-SNAPSHOT-INDEX   INITIALIZED   PROGRESSING   SUCCEEDED   AGE
example-run   example-placement   0                         0                       True          False                     24m

PROGRESSING フィールドの値はFalse。 この値は、実行が停止したことを示します。 原因を特定するには、さらに調査が必要です。

  1. エラーの詳細については、次のコマンドを実行します。
$ kubectl get csur example-run -o yaml
Name:         example-run
...
API Version:  placement.kubernetes-fleet.io/v1beta1
Kind:         ClusterStagedUpdateRun
Metadata:
  Creation Timestamp:  2026-02-11T22:15:19Z
  Finalizers:
    kubernetes-fleet.io/clusterstagedupdaterun-finalizer
  Generation:        2
  ...
Spec:
  Placement Name:                example-placement
  Resource Snapshot Index:       0
  Staged Rollout Strategy Name:  example-strategy
  State:                         Run
Status:
  Applied Strategy:
    Comparison Option:  PartialComparison
    Type:               ClientSideApply
    When To Apply:      Always
    When To Take Over:  Always
  Conditions:
    Last Transition Time:  2026-02-11T22:15:20Z
    Message:               The UpdateRun initialized successfully
    Observed Generation:   2
    Reason:                UpdateRunInitializedSuccessfully
    Status:                True
    Type:                  Initialized
    Last Transition Time:  2026-02-11T22:20:59Z
    Message:               The updateRun is stuck waiting for member2 cluster(s) in stage staging to finish
      updating, please check placement status for potential errors
    Observed Generation:   2
    Reason:                UpdateRunStuck
    Status:                False
    Type:                  Progressing
  Deletion Stage Status:
    Clusters:
    Stage Name:                   kubernetes-fleet.io/deleteStage
  Policy Observed Cluster Count:  3
  Policy Snapshot Index Used:     0
  Resource 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:
      Cluster Name:  member2
      Conditions:
        Last Transition Time:  2026-02-11T22:15:59Z
        Message:               The updateRun is stuck waiting for member2 cluster(s) in stage staging to finish
          updating, please check placement status for potential errors
        Observed Generation:   2
        Reason:                ClusterUpdatingStarted
        Status:                True
        Type:                  Started
      ...
    Conditions:
      Last Transition Time:  2026-02-11T22:15:59Z
      Message:               Clusters in the stage started updating
      Observed Generation:   2
      Reason:                StageUpdatingStarted
      Status:                True
      Type:                  Progressing
    ...
    Stage Name:              staging

このメッセージは、ClusterStagedUpdateRun内のmember2 クラスターの更新が完了するまで待機している間、Stages Statusがスタックしていることを示しています。

コントローラーは、対応するバインディングを更新することで、リソースをメンバー クラスターにデプロイします。 その後、更新が完了したかどうかを定期的に確認します。 現在の既定値の 5 分後にバインドをまだ使用できない場合、コントローラーはロールアウトが停止していると判断し、状態を報告します。

スタック ClusterStagedUpdateRun は、通常、問題がクラスターまたはリソースに影響することを示します。

  1. ClusterResourcePlacementの状態を確認します。
$ kubectl describe crp example-placement
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
    ...
Spec:
    Policy:
    Placement Type:  PickAll
    Resource Selectors:
    Group:                 ""
    Kind:                  Namespace
    Name:                  test-namespace
    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:            member2
    Conditions:
        Last Transition Time:  2026-01-12T22:37:57Z
        Message:               Successfully scheduled resources for placement in "member2" (affinity score: 0, topology spread score: 0): picked by scheduling policy
        Observed Generation:   1
        Reason:                Scheduled
        Status:                True
        Type:                  Scheduled
        Last Transition Time:  2026-01-12T22:44:08Z
        Message:               Detected the new changes on the resources and started the rollout process, resourceSnapshotIndex: 1, updateRun: example-run
        Observed Generation:   1
        Reason:                RolloutStarted
        Status:                True
        Type:                  RolloutStarted
        Last Transition Time:  2026-01-12T22:44:08Z
        Message:               No override rules are configured for the selected resources
        Observed Generation:   1
        Reason:                NoOverrideSpecified
        Status:                True
        Type:                  Overridden
        Last Transition Time:  2026-01-12T22:44:08Z
        Message:               All of the works are synchronized to the latest
        Observed Generation:   1
        Reason:                AllWorkSynced
        Status:                True
        Type:                  WorkSynchronized
        Last Transition Time:  2026-01-12T22:44:08Z
        Message:               All corresponding work objects are applied
        Observed Generation:   1
        Reason:                AllWorkHaveBeenApplied
        Status:                True
        Type:                  Applied
        Last Transition Time:  2026-01-12T22:44:08Z
        Message:               Work object example-placement-work is not yet available
        Observed Generation:   1
        Reason:                NotAllWorkAreAvailable
        Status:                False
        Type:                  Available
    Failed Placements:
        Condition:
        Last Transition Time:  2026-01-12T22:44:08Z
        Message:               Manifest is not yet available; Fleet will check again later
        Observed Generation:   1
        Reason:                ManifestNotAvailableYet
        Status:                False
        Type:                  Available
        Group:                   apps
        Kind:                    Deployment
        Name:                    nginx-deployment
        Namespace:               test-namespace
        Version:                 v1
...

Available条件がFalseされ、Reason値がNotAllWorkAreAvailableFailed Placementsセクションには、nginx-deploymentが使用できないことが示されています。

  1. イメージのプル エラーを確認するには、 member2 クラスターを確認します。
kubectl config use-context member2

kubectl get deployment -n test-namespace
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   0/3     3            0           9m54s

kubectl get pods -n test-namespace
NAME                                READY   STATUS             RESTARTS   AGE
nginx-deployment-5d9874b8b9-gnmm2   0/1     InvalidImageName   0          10m
nginx-deployment-5d9874b8b9-p9zsx   0/1     InvalidImageName   0          10m
nginx-deployment-5d9874b8b9-wxmd7   0/1     InvalidImageName   0          10m

同様のシナリオは、 updateRun の状態が Stopに設定されている場合に発生する可能性があります。

解決策

この問題をデバッグするためのガイダンスについては、 Azure Kubernetes Fleet Manager (プレビュー) での ResourcePlacement API のトラブルシューティングに関するページを参照してください。

問題を解決したら、新しい ClusterStagedUpdateRun インスタンスを作成してロールアウトを再開します。 次に、スタック ClusterStagedUpdateRun インスタンスを削除します。

  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                       True          False                     24m

PROGRESSING フィールドの値はFalse。 この値は、実行が停止したことを示します。 原因を特定するには、さらに調査が必要です。

  1. エラーの詳細については、次のコマンドを実行します。
$ kubectl describe stagedupdaterun <staged-update-run-name> -n <namespace-name>
Name:         web-app-rollout
Namespace:    my-app-namespace
...
API Version:  placement.kubernetes-fleet.io/v1beta1
Kind:         StagedUpdateRun
Metadata:
  Creation Timestamp:  2026-02-11T22:15:19Z
  Finalizers:
    kubernetes-fleet.io/stagedupdaterun-finalizer
  Generation:        2
  ...
Spec:
  Placement Name:                web-app-rollout-placement
  Resource Snapshot Index:       0
  Staged Rollout Strategy Name:  example-strategy
  State:                         Run
Status:
  Applied Strategy:
    Comparison Option:  PartialComparison
    Type:               ClientSideApply
    When To Apply:      Always
    When To Take Over:  Always
  Conditions:
    Last Transition Time:  2026-02-11T22:15:20Z
    Message:               The UpdateRun initialized successfully
    Observed Generation:   2
    Reason:                UpdateRunInitializedSuccessfully
    Status:                True
    Type:                  Initialized
    Last Transition Time:  2026-02-11T22:20:59Z
    Message:               The updateRun is stuck waiting for member2 cluster(s) in stage staging to finish
      updating, please check placement status for potential errors
    Observed Generation:   2
    Reason:                UpdateRunStuck
    Status:                False
    Type:                  Progressing
  Deletion Stage Status:
    Clusters:
    Stage Name:                   kubernetes-fleet.io/deleteStage
  Policy Observed Cluster Count:  3
  Policy Snapshot Index Used:     0
  Resource 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:
      Cluster Name:  member2
      Conditions:
        Last Transition Time:  2026-02-11T22:15:59Z
        Message:               The updateRun is stuck waiting for member2 cluster(s) in stage staging to finish
          updating, please check placement status for potential errors
        Observed Generation:   2
        Reason:                ClusterUpdatingStarted
        Status:                True
        Type:                  Started
      ...
    Conditions:
      Last Transition Time:  2026-02-11T22:15:59Z
      Message:               Clusters in the stage started updating
      Observed Generation:   2
      Reason:                StageUpdatingStarted
      Status:                True
      Type:                  Progressing
    ...
    Stage Name:              staging

このメッセージは、StagedUpdateRun内のmember2 クラスターの更新が完了するまで、Stages Statusが停止していることを示しています。

コントローラーは、対応するバインディングを更新することで、リソースをメンバー クラスターにデプロイします。 その後、更新が完了したかどうかを定期的に確認します。 現在の既定値の 5 分後にバインドをまだ使用できない場合、コントローラーはロールアウトが停止していると判断し、状態を報告します。

スタック StagedUpdateRun は、通常、問題がクラスターまたはリソースに影響することを示します。

  1. ClusterResourcePlacementの状態を確認します。
$ kubectl describe rp web-app-placement -n my-app-namespace
Name:         web-app-placement
Namespace:    my-app-namespace
...
API Version:  placement.kubernetes-fleet.io/v1beta1
Kind:         ReourcePlacement
Metadata:
    Creation Timestamp:  2026-02-11T21:02:36Z
    Finalizers:
    kubernetes-fleet.io/crp-cleanup
    kubernetes-fleet.io/scheduler-cleanup
    Generation:        1
    ...
Spec:
    Policy:
    Placement Type:  PickAll
    Resource Selectors:
    Group:                 apps
    Kind:                  Deployment
    Name:                  nginx-deployment
    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:            member2
    Conditions:
        Last Transition Time:  2026-01-12T22:37:57Z
        Message:               Successfully scheduled resources for placement in "member2" (affinity score: 0, topology spread score: 0): picked by scheduling policy
        Observed Generation:   1
        Reason:                Scheduled
        Status:                True
        Type:                  Scheduled
        Last Transition Time:  2026-01-12T22:44:08Z
        Message:               Detected the new changes on the resources and started the rollout process, resourceSnapshotIndex: 1, updateRun: example-run
        Observed Generation:   1
        Reason:                RolloutStarted
        Status:                True
        Type:                  RolloutStarted
        Last Transition Time:  2026-01-12T22:44:08Z
        Message:               No override rules are configured for the selected resources
        Observed Generation:   1
        Reason:                NoOverrideSpecified
        Status:                True
        Type:                  Overridden
        Last Transition Time:  2026-01-12T22:44:08Z
        Message:               All of the works are synchronized to the latest
        Observed Generation:   1
        Reason:                AllWorkSynced
        Status:                True
        Type:                  WorkSynchronized
        Last Transition Time:  2026-01-12T22:44:08Z
        Message:               All corresponding work objects are applied
        Observed Generation:   1
        Reason:                AllWorkHaveBeenApplied
        Status:                True
        Type:                  Applied
        Last Transition Time:  2026-01-12T22:44:08Z
        Message:               Work object example-placement-work is not yet available
        Observed Generation:   1
        Reason:                NotAllWorkAreAvailable
        Status:                False
        Type:                  Available
    Failed Placements:
        Condition:
        Last Transition Time:  2026-01-12T22:44:08Z
        Message:               Manifest is not yet available; Fleet will check again later
        Observed Generation:   1
        Reason:                ManifestNotAvailableYet
        Status:                False
        Type:                  Available
        Group:                   apps
        Kind:                    Deployment
        Name:                    nginx-deployment
        Namespace:               my-app-namespace
        Version:                 v1
...

Available条件がFalseされ、Reason値がNotAllWorkAreAvailableFailed Placementsセクションには、nginx-deploymentが使用できないことが示されています。

  1. member2 クラスターを確認して、イメージのプル エラーを確認します。
kubectl config use-context member2

kubectl get deployment -n test-namespace
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   0/3     3            0           9m54s

kubectl get pods -n test-namespace
NAME                                READY   STATUS             RESTARTS   AGE
nginx-deployment-5d9874b8b9-gnmm2   0/1     InvalidImageName   0          10m
nginx-deployment-5d9874b8b9-p9zsx   0/1     InvalidImageName   0          10m
nginx-deployment-5d9874b8b9-wxmd7   0/1     InvalidImageName   0          10m

同様のシナリオは、 updateRunの状態が Stopに設定されている場合に発生する可能性があります。

解決策

問題をデバッグする方法のガイダンスについては、 Azure Kubernetes Fleet Manager (プレビュー) の ResourcePlacement API のトラブルシューティング を参照してください。

問題を解決したら、新しい StagedUpdateRun インスタンスを作成してロールアウトを再開します。 その後、スタック StagedUpdateRun インスタンスを削除できます。