Bilješka
Pristup ovoj stranici zahtijeva provjeru vjerodostojnosti. Možete pokušati da se prijavite ili promijenite direktorije.
Pristup ovoj stranici zahtijeva provjeru vjerodostojnosti. Možete pokušati promijeniti direktorije.
Summary
This article discusses how to troubleshoot the ClusterStagedUpdateRun and StagedUpdateRun errors that are generated when the update run gets stuck while it uses update run APIs in Microsoft Azure Kubernetes Fleet Manager.
Here's an example error message:
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
Investigate update run stuck errors
- To locate the
ClusterStagedUpdateRun"stuck" error message, run the following command:
$ 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
The PROGRESSING field value is False. This value indicates that the run stopped. Further investigation is necessary in order to determine the cause.
- For more information about the error, run the following commands:
$ 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
This message shows that the ClusterStagedUpdateRun is stuck while it waits for the member2 cluster in Stages Status to finish updating.
The controller deploys resources to a member cluster by updating its corresponding binding. It then checks periodically whether the update finishes. If the binding still isn't available after the current default of five (5) minutes, the controller determines that the rollout is stuck, and it reports the condition.
A stuck ClusterStagedUpdateRun usually indicates that an issue affects the cluster or resources.
- Check the
ClusterResourcePlacementstatus:
$ 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
...
The Available condition is False, and the Reason value is NotAllWorkAreAvailable. The Failed Placements section shows that nginx-deployment isn't available.
- To see the image pull failure, check the
member2cluster:
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
Note
A similar scenario can occur if the state of updateRun is set to Stop.
Solution
For guidance to debug the issue, see Troubleshooting ResourcePlacement API in Azure Kubernetes Fleet Manager (preview).
After you resolve the issue, create a new ClusterStagedUpdateRun instance to restart the rollout. Then, delete the stuck ClusterStagedUpdateRun instance.
- To locate the
StagedUpdateRun"stuck" error message, run the following command:
$ 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
The PROGRESSING field value is False. This value indicates that the run stopped. Further investigation is necessary in order to determine the cause.
- For more information about the error, run the following commands:
$ 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
This message shows that the StagedUpdateRun is stuck waiting for the member2 cluster in Stages Status to finish updating.
The controller deploys resources to a member cluster by updating its corresponding binding. It then checks periodically whether the update finishes. If the binding still isn't available after the current default of five (5) minutes, the controller determines that the rollout is stuck, and it reports the condition.
A stuck StagedUpdateRun usually indicates that an issue affects the cluster or resources.
- Check the
ClusterResourcePlacementstatus:
$ 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
...
The Available condition is False, and the Reason value is NotAllWorkAreAvailable. The Failed Placements section shows that nginx-deployment isn't available.
- Check the
member2cluster to see the image pull failure:
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
Note
A similar scenario can occur when the updateRun's state is set to Stop.
Solution
See Troubleshooting ResourcePlacement API in Azure Kubernetes Fleet Manager (preview) for guidance about how to debug the issue.
After you resolve the issue, create a new StagedUpdateRun instance to restart the rollout. You can then delete the stuck StagedUpdateRun instance.