Échec de propagation des ressources : ClusterResourcePlacementRolloutStarted a la valeur false
Cet article explique comment résoudre les ClusterResourcePlacementRolloutStarted
problèmes liés à la propagation des ressources à l’aide de l’objet ClusterResourcePlacement
API dans Azure Kubernetes Fleet Manager.
Symptômes
Lorsque vous utilisez l’objet ClusterResourcePlacement
API dans Azure Kubernetes Fleet Manager pour propager des ressources, les ressources sélectionnées ne sont pas déployées dans tous les clusters planifiés et l’état de la ClusterResourcePlacementRolloutStarted
condition s’affiche False
.
Note
Pour obtenir plus d’informations sur la raison pour laquelle le déploiement ne démarre pas, vous pouvez vérifier les journaux du contrôleur de déploiement.
Cause
La stratégie de déploiement de placement des ressources de cluster est bloquée, car la RollingUpdate
configuration est trop stricte.
Étapes de dépannage
- Dans la
ClusterResourcePlacement
section d’état, vérifiez commentplacementStatuses
identifier les clusters dont l’étatRolloutStarted
est définiFalse
sur . - Recherchez le correspondant
ClusterResourceBinding
pour le cluster identifié. Pour plus d’informations, consultez Comment trouver la dernière ressource ClusterResourceBinding ? Cette ressource doit indiquer l’étatWork
(qu’elle ait été créée ou mise à jour). - Vérifiez les valeurs et vérifiez qu’elles
maxUnavailable
maxSurge
s’alignent sur vos attentes.
Étude de cas
Dans l’exemple suivant, il ClusterResourcePlacement
tente de propager un espace de noms à trois clusters membres. Toutefois, lors de la création initiale de l’espace ClusterResourcePlacement
de noms, l’espace de noms n’existe pas sur le cluster hub, et la flotte comprend actuellement deux clusters membres nommés kind-cluster-1
et kind-cluster-2
.
Spécification ClusterResourcePlacement
spec:
policy:
numberOfClusters: 3
placementType: PickN
resourceSelectors:
- group: ""
kind: Namespace
name: test-ns
version: v1
revisionHistoryLimit: 10
strategy:
type: RollingUpdate
État de ClusterResourcePlacement
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
La sortie précédente indique que l’espace de noms de ressource test-ns
n’existait jamais sur le cluster hub et affiche les états de condition suivants ClusterResourcePlacement
:
- L’état
ClusterResourcePlacementScheduled
de la condition indique ,False
car la stratégie spécifiée vise à choisir trois clusters, mais le planificateur ne peut prendre en charge que les placements dans deux clusters actuellement disponibles et joints. - L’état
ClusterResourcePlacementRolloutStarted
de la condition indique ,True
car le processus de déploiement a démarré avec deux clusters sélectionnés. - L’état
ClusterResourcePlacementOverridden
de la condition indique :True
aucune règle de remplacement n’est configurée pour les ressources sélectionnées. - L’état de la
ClusterResourcePlacementWorkSynchronized
condition s’affiche sous la formeTrue
. - L’état de la
ClusterResourcePlacementApplied
condition s’affiche sous la formeTrue
. - L’état de la
ClusterResourcePlacementAvailable
condition s’affiche sous la formeTrue
.
Pour garantir une propagation transparente de l’espace de noms sur les clusters appropriés, continuez à créer l’espace test-ns
de noms sur le cluster hub.
État clusterResourcePlacement après la création de l’espace de noms « test-ns » sur le cluster hub
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
Dans la sortie précédente, l’état de la ClusterResourcePlacementScheduled
condition s’affiche sous la forme False
. L’état ClusterResourcePlacementRolloutStarted
est également affiché comme False
avec le message : The rollout is being blocked by the rollout strategy in 2 cluster(s)
.
Vérifiez la dernière ClusterResourceSnapshot
version en exécutant la commande dans Comment trouver la dernière ressource ClusterResourceBinding ?
Latest 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
Dans la ClusterResourceSnapshot
spécification, la selectedResources
section affiche maintenant l’espace de noms test-ns
.
Vérifiez si ClusterResourceBinding
kind-cluster-1
elle a été mise à jour après la création de l’espace de noms test-ns
. Pour plus d’informations, consultez Comment trouver la dernière ressource ClusterResourceBinding ?.
ClusterResourceBinding pour 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
Les ClusterResourceBinding
restes inchangés. Dans la ClusterResourceBinding
spécification, le resourceSnapshotName
nom fait toujours référence à l’ancien ClusterResourceSnapshot
nom. Ce problème se produit lorsqu’il n’existe aucune entrée explicite RollingUpdate
de l’utilisateur, car les valeurs par défaut sont appliquées :
- La
maxUnavailable
valeur est configurée sur 25 % × 3 (nombre souhaité), arrondie à1
. - La
maxSurge
valeur est configurée sur 25 % × 3 (nombre souhaité), arrondie à1
.
Pourquoi ClusterResourceBinding n’est pas mis à jour
Au départ, lors de la ClusterResourcePlacement
création, deux ClusterResourceBindings
ont été générées. Toutefois, étant donné que le déploiement ne s’appliquait pas à la phase initiale, la ClusterResourcePlacementRolloutStarted
condition était définie True
sur .
Lors de la création de l’espace test-ns
de noms sur le cluster hub, le contrôleur de déploiement a tenté de mettre à jour les deux éléments existants ClusterResourceBindings
. Toutefois, maxUnavailable
il a été défini 1
en raison de l’absence de clusters membres, ce qui a entraîné la RollingUpdate
configuration trop stricte.
Note
Pendant la mise à jour, si l’une des liaisons ne parvient pas à s’appliquer, elle enfreint également la configuration, ce qui provoque maxUnavailable
1
la RollingUpdate
définition .
Résolution
Dans ce cas, pour résoudre ce problème, envisagez de définir maxUnavailable
manuellement une valeur supérieure 1
à RollingUpdate
la configuration. Vous pouvez également rejoindre un troisième cluster membre.
Contactez-nous pour obtenir de l’aide
Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.