Partager via


É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

  1. Dans la ClusterResourcePlacement section d’état, vérifiez comment placementStatuses identifier les clusters dont l’état RolloutStarted est défini Falsesur .
  2. 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’état Work (qu’elle ait été créée ou mise à jour).
  3. 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 ClusterResourcePlacementde 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 , Falsecar 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 , Truecar le processus de déploiement a démarré avec deux clusters sélectionnés.
  • L’état ClusterResourcePlacementOverridden de la condition indique : Trueaucune règle de remplacement n’est configurée pour les ressources sélectionnées.
  • L’état de la ClusterResourcePlacementWorkSynchronized condition s’affiche sous la forme True.
  • L’état de la ClusterResourcePlacementApplied condition s’affiche sous la forme True.
  • L’état de la ClusterResourcePlacementAvailable condition s’affiche sous la forme True.

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 Truesur .

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 1la 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.