Resursspridningsfel: ClusterResourcePlacementRolloutStarted är falskt
Den här artikeln beskriver hur du felsöker ClusterResourcePlacementRolloutStarted
problem när du sprider resurser med API-objektet ClusterResourcePlacement
i Azure Kubernetes Fleet Manager.
Symptom
När du använder ClusterResourcePlacement
API-objektet i Azure Kubernetes Fleet Manager för att sprida resurser distribueras inte de valda resurserna i alla schemalagda kluster, och villkorsstatusen ClusterResourcePlacementRolloutStarted
visas som False
.
Kommentar
Om du vill ha mer information om varför distributionen inte startas kan du kontrollera loggarna för distributionskontrollanten.
Orsak
Distributionsstrategin för klusterresursplacering blockeras eftersom konfigurationen RollingUpdate
är för strikt.
Felsökningsanvisningar
- I statusavsnittet
ClusterResourcePlacement
kontrollerar duplacementStatuses
för att identifiera kluster som har statusenRolloutStarted
inställd påFalse
. - Leta upp motsvarande
ClusterResourceBinding
för det identifierade klustret. Mer information finns i Hur hittar jag den senaste ClusterResourceBinding-resursen? Den här resursen bör ange statusenWork
(oavsett om den har skapats eller uppdaterats). - Kontrollera värdena
maxUnavailable
för ochmaxSurge
för att säkerställa att de överensstämmer med dina förväntningar.
Fallstudie
I följande exempel ClusterResourcePlacement
försöker sprida ett namnområde till tre medlemskluster. Men när det första skapandet av , fanns inte namnområdet i hubbklustret, och flottan består för närvarande av ClusterResourcePlacement
två medlemskluster med namnet kind-cluster-1
och kind-cluster-2
.
ClusterResourcePlacement-specifikation
spec:
policy:
numberOfClusters: 3
placementType: PickN
resourceSelectors:
- group: ""
kind: Namespace
name: test-ns
version: v1
revisionHistoryLimit: 10
strategy:
type: RollingUpdate
ClusterResourcePlacement-status
status:
conditions:
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: could not find all the clusters needed as specified by the scheduling
policy
observedGeneration: 1
reason: SchedulingPolicyUnfulfilled
status: "False"
type: ClusterResourcePlacementScheduled
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All 2 cluster(s) start rolling out the latest resource
observedGeneration: 1
reason: RolloutStarted
status: "True"
type: ClusterResourcePlacementRolloutStarted
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: No override rules are configured for the selected resources
observedGeneration: 1
reason: NoOverrideSpecified
status: "True"
type: ClusterResourcePlacementOverridden
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: Works(s) are successfully created or updated in the 2 target clusters'
namespaces
observedGeneration: 1
reason: WorkSynchronized
status: "True"
type: ClusterResourcePlacementWorkSynchronized
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: The selected resources are successfully applied to 2 clusters
observedGeneration: 1
reason: ApplySucceeded
status: "True"
type: ClusterResourcePlacementApplied
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: The selected resources in 2 cluster are available now
observedGeneration: 1
reason: ResourceAvailable
status: "True"
type: ClusterResourcePlacementAvailable
observedResourceIndex: "0"
placementStatuses:
- clusterName: kind-cluster-2
conditions:
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: 'Successfully scheduled resources for placement in kind-cluster-2 (affinity
score: 0, topology spread score: 0): picked by scheduling policy'
observedGeneration: 1
reason: Scheduled
status: "True"
type: Scheduled
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: Detected the new changes on the resources and started the rollout process
observedGeneration: 1
reason: RolloutStarted
status: "True"
type: RolloutStarted
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: No override rules are configured for the selected resources
observedGeneration: 1
reason: NoOverrideSpecified
status: "True"
type: Overridden
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All of the works are synchronized to the latest
observedGeneration: 1
reason: AllWorkSynced
status: "True"
type: WorkSynchronized
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All corresponding work objects are applied
observedGeneration: 1
reason: AllWorkHaveBeenApplied
status: "True"
type: Applied
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All corresponding work objects are available
observedGeneration: 1
reason: AllWorkAreAvailable
status: "True"
type: Available
- clusterName: kind-cluster-1
conditions:
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: 'Successfully scheduled resources for placement in kind-cluster-1 (affinity
score: 0, topology spread score: 0): picked by scheduling policy'
observedGeneration: 1
reason: Scheduled
status: "True"
type: Scheduled
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: Detected the new changes on the resources and started the rollout process
observedGeneration: 1
reason: RolloutStarted
status: "True"
type: RolloutStarted
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: No override rules are configured for the selected resources
observedGeneration: 1
reason: NoOverrideSpecified
status: "True"
type: Overridden
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All of the works are synchronized to the latest
observedGeneration: 1
reason: AllWorkSynced
status: "True"
type: WorkSynchronized
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All corresponding work objects are applied
observedGeneration: 1
reason: AllWorkHaveBeenApplied
status: "True"
type: Applied
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All corresponding work objects are available
observedGeneration: 1
reason: AllWorkAreAvailable
status: "True"
type: Available
Föregående utdata anger att resursnamnområdet test-ns
aldrig fanns i hubbklustret och visar följande ClusterResourcePlacement
villkorsstatusar:
- Villkorsstatusen
ClusterResourcePlacementScheduled
visas somFalse
, eftersom den angivna principen syftar till att välja tre kluster, men schemaläggaren kan bara hantera placeringar i två tillgängliga och anslutna kluster. - Villkorsstatusen
ClusterResourcePlacementRolloutStarted
visas somTrue
, eftersom distributionsprocessen har startat med två valda kluster. - Villkorsstatusen
ClusterResourcePlacementOverridden
visas somTrue
, eftersom inga åsidosättningsregler har konfigurerats för de valda resurserna. - Villkorsstatusen
ClusterResourcePlacementWorkSynchronized
visas somTrue
. - Villkorsstatusen
ClusterResourcePlacementApplied
visas somTrue
. - Villkorsstatusen
ClusterResourcePlacementAvailable
visas somTrue
.
Om du vill säkerställa sömlös spridning av namnområdet mellan de relevanta klustren fortsätter du med att skapa test-ns
namnområdet i hubbklustret.
ClusterResourcePlacement-status efter att namnområdet "test-ns" har skapats i hubbklustret
status:
conditions:
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: could not find all the clusters needed as specified by the scheduling
policy
observedGeneration: 1
reason: SchedulingPolicyUnfulfilled
status: "False"
type: ClusterResourcePlacementScheduled
- lastTransitionTime: "2024-05-07T23:13:51Z"
message: The rollout is being blocked by the rollout strategy in 2 cluster(s)
observedGeneration: 1
reason: RolloutNotStartedYet
status: "False"
type: ClusterResourcePlacementRolloutStarted
observedResourceIndex: "1"
placementStatuses:
- clusterName: kind-cluster-2
conditions:
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: 'Successfully scheduled resources for placement in kind-cluster-2 (affinity
score: 0, topology spread score: 0): picked by scheduling policy'
observedGeneration: 1
reason: Scheduled
status: "True"
type: Scheduled
- lastTransitionTime: "2024-05-07T23:13:51Z"
message: The rollout is being blocked by the rollout strategy
observedGeneration: 1
reason: RolloutNotStartedYet
status: "False"
type: RolloutStarted
- clusterName: kind-cluster-1
conditions:
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: 'Successfully scheduled resources for placement in kind-cluster-1 (affinity
score: 0, topology spread score: 0): picked by scheduling policy'
observedGeneration: 1
reason: Scheduled
status: "True"
type: Scheduled
- lastTransitionTime: "2024-05-07T23:13:51Z"
message: The rollout is being blocked by the rollout strategy
observedGeneration: 1
reason: RolloutNotStartedYet
status: "False"
type: RolloutStarted
selectedResources:
- kind: Namespace
name: test-ns
version: v1
I föregående utdata visas villkorsstatusen ClusterResourcePlacementScheduled
som False
. Statusen ClusterResourcePlacementRolloutStarted
visas också som False
med meddelandet: The rollout is being blocked by the rollout strategy in 2 cluster(s)
.
Kontrollera det senaste ClusterResourceSnapshot
genom att köra kommandot i Hur hittar jag den senaste ClusterResourceBinding-resursen?
Senaste ClusterResourceSnapshot
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourceSnapshot
metadata:
annotations:
kubernetes-fleet.io/number-of-enveloped-object: "0"
kubernetes-fleet.io/number-of-resource-snapshots: "1"
kubernetes-fleet.io/resource-hash: 72344be6e268bc7af29d75b7f0aad588d341c228801aab50d6f9f5fc33dd9c7c
creationTimestamp: "2024-05-07T23:13:51Z"
generation: 1
labels:
kubernetes-fleet.io/is-latest-snapshot: "true"
kubernetes-fleet.io/parent-CRP: crp-3
kubernetes-fleet.io/resource-index: "1"
name: crp-3-1-snapshot
ownerReferences:
- apiVersion: placement.kubernetes-fleet.io/v1beta1
blockOwnerDeletion: true
controller: true
kind: ClusterResourcePlacement
name: crp-3
uid: b4f31b9a-971a-480d-93ac-93f093ee661f
resourceVersion: "14434"
uid: 85ee0e81-92c9-4362-932b-b0bf57d78e3f
spec:
selectedResources:
- apiVersion: v1
kind: Namespace
metadata:
labels:
kubernetes.io/metadata.name: test-ns
name: test-ns
spec:
finalizers:
- kubernetes
I specifikationen ClusterResourceSnapshot
selectedResources
visar avsnittet nu namnområdet test-ns
.
ClusterResourceBinding
Kontrollera om kind-cluster-1
den har uppdaterats efter att namnområdet test-ns
har skapats. Mer information finns i Hur hittar jag den senaste ClusterResourceBinding-resursen?.
ClusterResourceBinding för kind-cluster-1
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourceBinding
metadata:
creationTimestamp: "2024-05-07T23:08:53Z"
finalizers:
- kubernetes-fleet.io/work-cleanup
generation: 2
labels:
kubernetes-fleet.io/parent-CRP: crp-3
name: crp-3-kind-cluster-1-7114c253
resourceVersion: "14438"
uid: 0db4e480-8599-4b40-a1cc-f33bcb24b1a7
spec:
applyStrategy:
type: ClientSideApply
clusterDecision:
clusterName: kind-cluster-1
clusterScore:
affinityScore: 0
priorityScore: 0
reason: picked by scheduling policy
selected: true
resourceSnapshotName: crp-3-0-snapshot
schedulingPolicySnapshotName: crp-3-0
state: Bound
targetCluster: kind-cluster-1
status:
conditions:
- lastTransitionTime: "2024-05-07T23:13:51Z"
message: The resources cannot be updated to the latest because of the rollout
strategy
observedGeneration: 2
reason: RolloutNotStartedYet
status: "False"
type: RolloutStarted
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: No override rules are configured for the selected resources
observedGeneration: 2
reason: NoOverrideSpecified
status: "True"
type: Overridden
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All of the works are synchronized to the latest
observedGeneration: 2
reason: AllWorkSynced
status: "True"
type: WorkSynchronized
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All corresponding work objects are applied
observedGeneration: 2
reason: AllWorkHaveBeenApplied
status: "True"
type: Applied
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All corresponding work objects are available
observedGeneration: 2
reason: AllWorkAreAvailable
status: "True"
type: Available
Förblir ClusterResourceBinding
oförändrad. I specifikationen ClusterResourceBinding
resourceSnapshotName
refererar fortfarande det gamla ClusterResourceSnapshot
namnet. Det här problemet uppstår när det inte finns några explicita RollingUpdate
indata från användaren eftersom standardvärdena tillämpas:
- Värdet
maxUnavailable
är konfigurerat till 25 % × 3 (önskat tal), avrundat till1
. - Värdet
maxSurge
är konfigurerat till 25 % × 3 (önskat tal), avrundat till1
.
Varför ClusterResourceBinding inte uppdateras
När skapades ClusterResourcePlacement
genererades först två ClusterResourceBindings
. Men eftersom distributionen inte gällde för den inledande fasen, var villkoret ClusterResourcePlacementRolloutStarted
inställt på True
.
När du skapade test-ns
namnområdet i hubbklustret försökte distributionskontrollanten uppdatera de två befintliga ClusterResourceBindings
. Var dock maxUnavailable
inställd 1
på på grund av bristen på medlemskluster, vilket gjorde att konfigurationen RollingUpdate
var för strikt.
Kommentar
Om en av bindningarna inte tillämpas under uppdateringen bryter den även mot konfigurationen RollingUpdate
, vilket gör maxUnavailable
att den är inställd på 1
.
Åtgärd
I det här fallet bör du överväga att manuellt ange maxUnavailable
ett värde som är större än 1
för att minska konfigurationen för att lösa problemet RollingUpdate
. Du kan också ansluta till ett tredje medlemskluster.
Kontakta oss för att få hjälp
Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.