Comprendre l’état du placement des ressources pour Azure Kubernetes Fleet Manager

S’applique à : ✔️ Fleet Manager avec cluster hub

Lorsque vous travaillez avec Azure Kubernetes Fleet Manager, il est essentiel de comprendre l’état de vos ClusterResourcePlacement ressources pour surveiller la progression du déploiement et résoudre les problèmes.

Lorsque vous travaillez avec Azure Kubernetes Fleet Manager, il est essentiel de comprendre l’état de vos ResourcePlacement ressources pour surveiller la progression du déploiement et résoudre les problèmes.

Prerequisites

Vue d’ensemble de la structure d’état de placement

L’objet ClusterResourcePlacement contient non seulement la spécification descriptive sur le placement, mais également l’état de l’opération de placement.

L’objet ResourcePlacement contient non seulement la spécification descriptive sur le placement, mais également l’état de l’opération de placement.

La section État fournit des informations détaillées sur les points suivants :

  • État de placement global exprimé par les conditions
  • Ressources sélectionnées par l’emplacement
  • État de placement par cluster exprimé par conditions
  • les emplacements de Failed, drifted et diffed dans chaque grappe

Pour afficher l’état d’un placement, utilisez la commande suivante :

kubectl describe clusterresourceplacement <placement-name>
kubectl describe resourceplacement <placement-name> -n <namespace-name>

Pour obtenir la sortie YAML brute, utilisez la commande suivante :

kubectl get clusterresourceplacement <placement-name> -o yaml
kubectl get resourceplacement <placement-name> -n <namespace-name> -o yaml

Champs d’état de niveau supérieur

La section d’état contient les champs de niveau supérieur suivants :

  • selectedResources : liste des ressources sélectionnées par le placement
  • conditions : tableau des conditions de placement globales
  • observedResourceIndex : index de l'instantané de ressource actuel
  • placementStatuses : informations d’état de placement par cluster

Les sections suivantes examinent chaque champ en détail.

Ressources sélectionnées

Le selectedResources champ répertorie toutes les ressources sélectionnées par le placement. Utilisez ce champ pour vérifier si les ressources attendues sont incluses dans le placement. Voici un exemple :

selectedResources:
- kind: Namespace
  name: test
  version: v1
- kind: ConfigMap
  name: test-config
  namespace: test
  version: v1
  envelope:
    name: example-envelope
    namespace: test
    type: ResourceEnvelope
- kind: Deployment
  name: web-app
  namespace: test
  group: apps
  version: v1
- kind: Service
  name: web-service
  namespace: test
  version: v1
- kind: Secret
  name: app-secrets
  namespace: test
  version: v1
selectedResources:
- kind: ConfigMap
  name: test-config
  version: v1
  envelope:
    name: example-envelope
    namespace: test
    type: ResourceEnvelope
- kind: Deployment
  name: web-app
  group: apps
  version: v1
- kind: Service
  name: web-service
  version: v1
- kind: Secret
  name: app-secrets
  version: v1

Chaque entrée de ressource inclut les éléments suivants :

  • groupe : groupe d’API (vide pour les ressources principales)
  • version : version de l’API (par exemple, v1, v1beta1)
  • type : Type de ressource
  • nom : nom de la ressource
  • espace de noms : Espace de noms (pour les ressources associées à un espace de noms)
  • enveloppe : si une ressource est encapsulée dans une enveloppe, les métadonnées de l’enveloppe sont également fournies, ce qui inclut :
    • nom : nom de l’enveloppe
  • espace de noms : espace de noms de l’enveloppe
  • type : type de l’enveloppe (par exemple, ResourceEnvelope)

Conditions de positionnement

Le tableau conditions fournit des informations d'état générales sur l'ensemble du placement. Chaque condition suit la définition commune Kubernetes, qui a les champs standard suivants :

  • type : type de condition (décrit dans les sections suivantes).
  • état : True, Falseou Unknown.
  • raison : Code de raison courte pour la condition.
  • message : description lisible par l’homme.
  • lastTransitionTime : lorsque la condition a changé pour la dernière fois.
  • observedGeneration : génération du placement au moment où la condition a été définie.

Types de conditions ClusterResourcePlacement

Les types de condition suivants sont disponibles pour ClusterResourcePlacement :

ClusterResourcePlacementScheduled

Types de conditions de ResourcePlacement

Les types de conditions suivants sont disponibles pour ResourcePlacement :

ResourcePlacementScheduled

Indique si le placement est correctement planifié pour les clusters cibles.

  • True : tous les clusters requis sont sélectionnés en fonction de la stratégie de placement.
  • False : Échec de la planification (par exemple, clusters insuffisants disponibles).
  • Inconnu : la décision de planification est en attente.
conditions:
- type: ClusterResourcePlacementScheduled
  status: "True"
  reason: SchedulingPolicyFulfilled
  message: "found all the clusters needed as specified by the scheduling policy"
  lastTransitionTime: "2023-11-10T08:14:52Z"
  observedGeneration: 5
conditions:
- type: ResourcePlacementScheduled
  status: "True"
  reason: SchedulingPolicyFulfilled
  message: "found all the clusters needed as specified by the scheduling policy"
  lastTransitionTime: "2023-11-10T08:14:52Z"
  observedGeneration: 5

ClusterResourcePlacementRolloutStarted

ResourcePlacementRolloutStarted

Indique si le déploiement est démarré sur les clusters sélectionnés.

  • True : Les ressources ont commencé à être déployées sur des clusters planifiés.
  • False : Le déploiement n’est pas encore démarré.
  • Inconnu : la décision de lancement est en attente.
conditions:
- type: ClusterResourcePlacementRolloutStarted
  status: "True"
  reason: RolloutStarted
  message: "All 3 cluster(s) start rolling out the latest resource"
  lastTransitionTime: "2023-11-10T08:15:30Z"
  observedGeneration: 5
conditions:
- type: ResourcePlacementRolloutStarted
  status: "True"
  reason: RolloutStarted
  message: "All 3 cluster(s) start rolling out the latest resource"
  lastTransitionTime: "2023-11-10T08:15:30Z"
  observedGeneration: 5

ClusterResourcePlacementOverridden

ResourcePlacementOverridden

Indique si les remplacements de ressources sont correctement appliqués.

  • True : toutes les substitutions applicables sont traitées.
  • False : certains remplacements n'ont pas pu s'appliquer.
  • Unknown : le traitement du remplacement est en attente.
conditions:
- type: ClusterResourcePlacementOverridden
  status: "True"
  reason: NoOverrideSpecified
  message: "No override rules are configured for the selected resources"
  lastTransitionTime: "2023-11-10T08:15:45Z"
  observedGeneration: 5
conditions:
- type: ResourcePlacementOverridden
  status: "True"
  reason: NoOverrideSpecified
  message: "No override rules are configured for the selected resources"
  lastTransitionTime: "2023-11-10T08:15:45Z"
  observedGeneration: 5

ClusterResourcePlacementWorkSynchronized

TravailDePlacementDesRessourcesSynchronisé

Indique si le processus crée des objets de travail dans les espaces de noms par cluster du hub.

  • True : tous les objets de travail sont synchronisés.
  • False : la synchronisation de travail échoue ou est incomplète.
  • Inconnu : la synchronisation de travail est en attente.
conditions:
- type: ClusterResourcePlacementWorkSynchronized  
  status: "True"
  reason: SynchronizeSucceeded
  message: "All 2 cluster(s) are synchronized to the latest resources on the hub cluster"
  lastTransitionTime: "2023-11-10T08:23:43Z"
  observedGeneration: 5
conditions:
- type: ResourcePlacementWorkSynchronized  
  status: "True"
  reason: SynchronizeSucceeded
  message: "All 2 cluster(s) are synchronized to the latest resources on the hub cluster"
  lastTransitionTime: "2023-11-10T08:23:43Z"
  observedGeneration: 5

ClusterResourcePlacementApplied

ResourcePlacementApplied

Indique si toutes les ressources sont correctement appliquées aux clusters membres.

  • True : toutes les ressources appliquées avec succès à tous les clusters cibles.
  • False : Certaines ressources n’ont pas pu s’appliquer (vérification failedPlacements).
  • Inconnu : l’opération Appliquer est en attente.
conditions:
- type: ClusterResourcePlacementApplied
  status: "True"
  reason: ApplySucceeded
  message: "The selected resources are successfully applied to 3 clusters"
  lastTransitionTime: "2023-11-10T08:16:15Z"
  observedGeneration: 5
conditions:
- type: ResourcePlacementApplied
  status: "True"
  reason: ApplySucceeded
  message: "The selected resources are successfully applied to 3 clusters"
  lastTransitionTime: "2023-11-10T08:16:15Z"
  observedGeneration: 5

ClusterResourcePlacementAvailable

ResourcePlacementAvailable

Indique si les ressources placées sont toutes disponibles et prêtes sur les clusters membres.

  • True : toutes les ressources sont disponibles sur tous les clusters cibles.
  • False : certaines ressources ne sont pas encore disponibles.
  • Inconnu : la vérification de la disponibilité est en attente.
conditions:
- type: ClusterResourcePlacementAvailable
  status: "True"
  reason: ResourceAvailable
  message: "The selected resources in 3 clusters are available now"
  lastTransitionTime: "2023-11-10T08:16:30Z"
  observedGeneration: 5
conditions:
- type: ResourcePlacementAvailable
  status: "True"
  reason: ResourceAvailable
  message: "The selected resources in 3 clusters are available now"
  lastTransitionTime: "2023-11-10T08:16:30Z"
  observedGeneration: 5

ClusterResourcePlacementDiffReported

ResourcePlacementDiffReported

Indique si les différences de configuration sont signalées (lors de l’utilisation de la stratégie ReportDiff).

  • True : Le rapport de différences complet est disponible.
  • False : la génération du rapport de différences a échoué ou est incomplète.
  • Inconnu : le rapport de différences est en attente.
conditions:
- type: ClusterResourcePlacementDiffReported
  status: "True"
  reason: DiffReportComplete
  message: "Configuration differences are reported for all target clusters"
  lastTransitionTime: "2023-11-10T08:16:45Z"
  observedGeneration: 5
conditions:
- type: ResourcePlacementDiffReported
  status: "True"
  reason: DiffReportComplete
  message: "Configuration differences are reported for all target clusters"
  lastTransitionTime: "2023-11-10T08:16:45Z"
  observedGeneration: 5

Captures instantanées de ressources

Le champ observedResourceIndex indique quelle capture instantanée des ressources est en cours de déploiement.

observedResourceIndex: "1"

Fleet Manager crée des captures instantanées de ressources différemment en fonction de la stratégie de déploiement :

Pour RollingUpdate la stratégie (par défaut) : Fleet Manager crée automatiquement des instantanés de ressources lorsque :

  • Les sélecteurs de ressources changent
  • Vous modifiez les ressources sélectionnées

Pour la stratégie External : Fleet Manager ne crée pas automatiquement d'instantanés de ressources. Au lieu de cela, il les crée lorsque vous exécutez une exécution de mise à jour intermédiaire et omettez le resourceSnapshotIndex champ. Cette condition signifie que lorsque vous créez pour la première fois un placement avec une stratégie de déploiement External, aucun instantané des ressources n’existe tant que vous n’avez pas exécuté la première exécution de mise à jour par étapes.

Note

Si un placement utilisait auparavant la stratégie RollingUpdate et que vous la remplacez par External, les instantanés de ressources existants restent disponibles. Vous pouvez référencer ces instantanés existants lors de la création d’exécutions de mises à jour intermédiaires.

Chaque instantané a un index unique. Vous pouvez afficher des instantanés à l’aide des éléments suivants :

kubectl get clusterresourcesnapshot --selector=kubernetes-fleet.io/resource-index=1
kubectl get resourcesnapshot -n <namespace-name> --selector=kubernetes-fleet.io/resource-index=1

État du placement par cluster

Le placementStatuses tableau contient un état détaillé pour chaque cluster où les ressources sont placées ou tentées d’être placées :

placementStatuses:
- clusterName: aks-member-1
  observedResourceIndex: "1"
  conditions:
    - type: ResourceScheduled
      status: "True"
      reason: ScheduleSucceeded
      message: "Successfully scheduled resources for placement in aks-member-1"
      lastTransitionTime: "2023-11-10T08:14:52Z"
      observedGeneration: 5
    - type: RolloutStarted
      status: "True"
      reason: RolloutStarted
      message: "Detected the new changes on the resources and started the rollout process"
      lastTransitionTime: "2023-11-10T08:15:30Z"
      observedGeneration: 5
    - type: Overridden
      status: "True"
      reason: NoOverrideSpecified
      message: "No override rules are configured for the selected resources"
      lastTransitionTime: "2023-11-10T08:15:45Z"
      observedGeneration: 5
    - type: WorkSynchronized
      status: "True"
      reason: AllWorkSynced
      message: "All of the works are synchronized to the latest"
      lastTransitionTime: "2023-11-10T08:16:00Z"
      observedGeneration: 5
    - type: Applied
      status: "True"
      reason: AllWorkHaveBeenApplied
      message: "All corresponding work objects are applied"
      lastTransitionTime: "2023-11-10T08:16:15Z"
      observedGeneration: 5
    - type: Available
      status: "True"
      reason: ResourceAvailable
      message: "All resources are available on the target cluster"
      lastTransitionTime: "2023-11-10T08:16:30Z"
      observedGeneration: 5
  failedPlacements: []
  driftedPlacements: []
  diffedPlacements: []
- clusterName: aks-member-2
  observedResourceIndex: "1"
  conditions:
    - type: ResourceScheduled
      status: "True"
      reason: ScheduleSucceeded
      message: "Successfully scheduled resources for placement in aks-member-2"
      lastTransitionTime: "2023-11-10T08:14:52Z"
      observedGeneration: 5
    - type: Applied
      status: "False"
      reason: AppliedManifestFailedReason
      message: "Failed to apply some manifests"
      lastTransitionTime: "2023-11-10T08:16:15Z"
      observedGeneration: 5
  failedPlacements:
    - kind: Deployment
      name: web-app
      namespace: test
      version: apps/v1
      condition:
        type: Applied
        status: "False"
        reason: AppliedManifestFailedReason
        message: "Failed to apply manifest: insufficient resources"
        lastTransitionTime: "2023-11-10T08:16:15Z"

Types de conditions par cluster

L’état de chaque cluster inclut des conditions qui suivent le cycle de vie du déploiement :

ResourceScheduled

Indique si le cluster est sélectionné avec succès pour le placement.

- type: ResourceScheduled
  status: "True"
  reason: ScheduleSucceeded
  message: "Successfully scheduled resources for placement in aks-member-1 (affinity score: 0, topology spread score: 0): picked by scheduling policy"
  lastTransitionTime: "2023-11-10T08:14:52Z"
  observedGeneration: 5

DéploiementCommencé

Indique si le déploiement a démarré sur ce cluster spécifique.

- type: RolloutStarted
  status: "True"
  reason: RolloutStarted
  message: "Detected new changes on the resources and started the rollout process"
  lastTransitionTime: "2023-11-10T08:15:30Z"
  observedGeneration: 5

Remplacé.

Indique si des substitutions de ressources sont appliquées à ce cluster.

- type: Overridden
  status: "True"
  reason: NoOverrideSpecified
  message: "No override rules are configured for the selected resources"
  lastTransitionTime: "2023-11-10T08:15:45Z"
  observedGeneration: 5

WorkSynchronized

Indique si des objets de travail sont créés pour ce cluster.

- type: WorkSynchronized
  status: "True"
  reason: AllWorkSynced
  message: "All of the works are synchronized to the latest"
  lastTransitionTime: "2023-11-10T08:16:00Z"
  observedGeneration: 5

Mis en œuvre

Indique si toutes les ressources sont correctement appliquées à ce cluster.

- type: Applied
  status: "True"
  reason: AllWorkHaveBeenApplied
  message: "All corresponding work objects are applied"
  lastTransitionTime: "2023-11-10T08:16:15Z"
  observedGeneration: 5

Disponible

Indique si toutes les ressources sont disponibles et prêtes sur ce cluster.

- type: Available
  status: "True"
  reason: ResourceAvailable
  message: "All resources are available on the target cluster"
  lastTransitionTime: "2023-11-10T08:16:30Z"
  observedGeneration: 5

DiffReported

Indique si les différences de configuration sont signalées pour ce cluster.

- type: DiffReported
  status: "True"
  reason: DiffReportComplete
  message: "Configuration differences are reported for this cluster"
  lastTransitionTime: "2023-11-10T08:16:45Z"
  observedGeneration: 5

Placements ayant échoué

Lorsque les ressources ne s’appliquent pas à un cluster, le système enregistre les détails du failedPlacements tableau :

failedPlacements:
- kind: Deployment
  name: my-app
  namespace: default
  version: apps/v1
  condition:
    type: Applied
    status: "False"
    reason: AppliedManifestFailedReason
    message: "Failed to apply manifest: namespaces 'app' not found"
    lastTransitionTime: "2023-12-06T00:09:53Z"
  envelope:
    name: example
    namespace: app
    type: ResourceEnvelope
- kind: Service
  name: my-service
  namespace: default
  version: v1
  condition:
    type: Applied
    status: "False"
    reason: AppliedManifestFailedReason
    message: "Failed to apply manifest: Service 'my-service' is forbidden: User 'system:serviceaccount:fleet-system:fleet-agent' cannot create resource 'services' in API group '' in the namespace 'default'"
    lastTransitionTime: "2023-12-06T00:10:15Z"
- kind: ConfigMap
  name: app-config
  namespace: production
  version: v1
  condition:
    type: Applied
    status: "False"
    reason: AppliedManifestFailedReason
    message: "Failed to apply manifest: configmaps 'app-config' already exists"
    lastTransitionTime: "2023-12-06T00:10:30Z"

Chaque placement ayant échoué inclut les éléments suivants :

  • Identification des ressources : groupe, version, type, nom, espace de noms
  • condition : condition d’échec spécifique
  • enveloppe : informations sur l’enveloppe, le cas échéant

Placements dérivés

Fleet Manager signale toujours les ressources qui dérivent de leur état souhaité :

driftedPlacements:
- kind: Namespace
  name: web
  version: v1
  observationTime: "2025-03-19T06:50:25Z"
  firstDriftedObservedTime: "2025-03-19T06:49:54Z"
  targetClusterObservedGeneration: 12
  observedDrifts:
  - path: "/metadata/labels/owner"
    valueInHub: "simon"
    valueInMember: "chen"
  - path: "/metadata/annotations/purpose"
    valueInHub: "production"
    valueInMember: "testing"
- kind: Deployment
  name: web-app
  namespace: web
  group: apps
  version: v1
  observationTime: "2025-03-19T06:50:25Z"
  firstDriftedObservedTime: "2025-03-19T06:49:54Z"
  targetClusterObservedGeneration: 8
  observedDrifts:
  - path: "/spec/replicas"
    valueInHub: "3"
    valueInMember: "5"
  - path: "/spec/template/spec/containers/0/image"
    valueInHub: "nginx:1.20"
    valueInMember: "nginx:1.21"
- kind: ConfigMap
  name: app-config
  namespace: web
  version: v1
  observationTime: "2025-03-19T06:50:25Z"
  firstDriftedObservedTime: "2025-03-19T06:49:54Z"
  targetClusterObservedGeneration: 5
  observedDrifts:
  - path: "/data/environment"
    valueInHub: "production"
    valueInMember: "staging"

Chaque placement dérivé comprend les éléments suivants :

  • Identification des ressources : groupe, version, type, nom, espace de noms
  • observationTime : quand la dérive a été observée pour la dernière fois
  • firstDriftedObservedTime : quand la dérive a été détectée pour la première fois
  • targetClusterObservedGeneration : génération de la ressource sur le cluster membre
  • observedDrifts : Liste détaillée des différences de configuration

Placements comparés

Lorsque vous utilisez la stratégie ReportDiff apply, Fleet Manager signale des différences de configuration.

diffedPlacements:
- kind: Service
  name: my-service
  namespace: default
  version: v1
  observationTime: "2025-03-19T06:50:25Z"
  firstDiffedObservedTime: "2025-03-19T06:49:54Z"
  targetClusterObservedGeneration: 8
  observedDiffs:
  - path: "/spec/ports/0/nodePort"
    valueInHub: ""
    valueInMember: "30080"
  - path: "/spec/clusterIP"
    valueInHub: ""
    valueInMember: "10.96.100.200"
- kind: Deployment
  name: web-app
  namespace: default
  group: apps
  version: v1
  observationTime: "2025-03-19T06:50:25Z"
  firstDiffedObservedTime: "2025-03-19T06:49:54Z"
  targetClusterObservedGeneration: 12
  observedDiffs:
  - path: "/status/replicas"
    valueInHub: ""
    valueInMember: "3"
  - path: "/status/readyReplicas"
    valueInHub: ""
    valueInMember: "3"
  - path: "/metadata/generation"
    valueInHub: "1"
    valueInMember: "2"

Les placements différenciés ont une structure similaire aux placements déviés, mais sont utilisés pour différents scénarios.

  • Placements dérivés : utilisez quand vous appliquez des ressources, puis modifiez-les.
  • Placements différenciés : à utiliser avec la stratégie ReportDiff ou lorsque les conditions de prise en charge ne sont pas remplies.

Surveillance de la progression du positionnement

Pour surveiller efficacement la progression du placement, vérifiez ces indicateurs clés :

  1. Ressource placée : Vérifiez que ClusterResourcePlacementWorkSynchronized est True
  2. Intégrité globale : examiner la condition ClusterResourcePlacementApplied
  3. État par cluster : passer en revue les conditions de chaque cluster cible
  4. Insertions en échec : vérifiez s’il existe des entrées dans les tableaux failedPlacements
  1. Ressource placée: Vérifiez que ResourcePlacementWorkSynchronized est défini sur True
  2. État général : consultez l’ResourcePlacementApplied état
  3. État par cluster : passer en revue les conditions de chaque cluster cible
  4. Placements échoués : vérifiez s’il existe des entrées dans les tableaux failedPlacements

Exemple d’état complet

Voici un exemple complet montrant l’état complet d’un ClusterResourcePlacement :

apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
  name: web-app-placement
  generation: 5
spec:
  resourceSelectors:
  - group: ""
    kind: Namespace
    name: web-app
    version: v1
  - group: apps
    kind: Deployment
    name: web-server
    namespace: web-app
    version: v1
  - group: ""
    kind: Service
    name: web-service
    namespace: web-app
    version: v1
  policy:
    placementType: PickN
    numberOfClusters: 2
    affinity:
      clusterAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          clusterSelectorTerms:
          - matchLabels:
              region: us-west
status:
  conditions:
  - type: ClusterResourcePlacementScheduled
    status: "True"
    reason: SchedulingPolicyFulfilled
    message: "found all the clusters needed as specified by the scheduling policy"
    lastTransitionTime: "2023-11-10T08:14:52Z"
    observedGeneration: 5
  - type: ClusterResourcePlacementRolloutStarted
    status: "True"
    reason: RolloutStarted
    message: "All 2 cluster(s) start rolling out the latest resource"
    lastTransitionTime: "2023-11-10T08:15:30Z"
    observedGeneration: 5
  - type: ClusterResourcePlacementOverridden
    status: "True"
    reason: NoOverrideSpecified
    message: "No override rules are configured for the selected resources"
    lastTransitionTime: "2023-11-10T08:15:45Z"
    observedGeneration: 5
  - type: ClusterResourcePlacementWorkSynchronized
    status: "True"
    reason: SynchronizeSucceeded
    message: "All 2 cluster(s) are synchronized to the latest resources on the hub cluster"
    lastTransitionTime: "2023-11-10T08:16:00Z"
    observedGeneration: 5
  - type: ClusterResourcePlacementApplied
    status: "True"
    reason: ApplySucceeded
    message: "The selected resources are successfully applied to 2 clusters"
    lastTransitionTime: "2023-11-10T08:16:15Z"
    observedGeneration: 5
  - type: ClusterResourcePlacementAvailable
    status: "True"
    reason: ResourceAvailable
    message: "The selected resources in 2 cluster are available now"
    lastTransitionTime: "2023-11-10T08:16:30Z"
    observedGeneration: 5
  observedResourceIndex: "1"
  selectedResources:
  - group: ""
    kind: Namespace
    name: web-app
    version: v1
  - group: apps
    kind: Deployment
    name: web-server
    namespace: web-app
    version: v1
  - group: ""
    kind: Service
    name: web-service
    namespace: web-app
    version: v1
  placementStatuses:
  - clusterName: aks-west-1
    observedResourceIndex: "1"
    conditions:
    - type: ResourceScheduled
      status: "True"
      reason: ScheduleSucceeded
      message: "Successfully scheduled resources for placement in aks-west-1 (affinity score: 0, topology spread score: 0): picked by scheduling policy"
      lastTransitionTime: "2023-11-10T08:14:52Z"
      observedGeneration: 5
    - type: RolloutStarted
      status: "True"
      reason: RolloutStarted
      message: "Detected the new changes on the resources and started the rollout process"
      lastTransitionTime: "2023-11-10T08:15:30Z"
      observedGeneration: 5
    - type: Overridden
      status: "True"
      reason: NoOverrideSpecified
      message: "No override rules are configured for the selected resources"
      lastTransitionTime: "2023-11-10T08:15:45Z"
      observedGeneration: 5
    - type: WorkSynchronized
      status: "True"
      reason: AllWorkSynced
      message: "All of the works are synchronized to the latest"
      lastTransitionTime: "2023-11-10T08:16:00Z"
      observedGeneration: 5
    - type: Applied
      status: "True"
      reason: AllWorkHaveBeenApplied
      message: "All corresponding work objects are applied"
      lastTransitionTime: "2023-11-10T08:16:15Z"
      observedGeneration: 5
    - type: Available
      status: "True"
      reason: ResourceAvailable
      message: "All resources are available on the target cluster"
      lastTransitionTime: "2023-11-10T08:16:30Z"
      observedGeneration: 5
    failedPlacements: []
    driftedPlacements: []
    diffedPlacements: []
  - clusterName: aks-west-2
    observedResourceIndex: "1"
    conditions:
    - type: ResourceScheduled
      status: "True"
      reason: ScheduleSucceeded
      message: "Successfully scheduled resources for placement in aks-west-2 (affinity score: 0, topology spread score: 0): picked by scheduling policy"
      lastTransitionTime: "2023-11-10T08:14:52Z"
      observedGeneration: 5
    - type: RolloutStarted
      status: "True"
      reason: RolloutStarted
      message: "Detected new changes on the resources and started the rollout process"
      lastTransitionTime: "2023-11-10T08:15:30Z"
      observedGeneration: 5
    - type: Overridden
      status: "True"
      reason: NoOverrideSpecified
      message: "No override rules are configured for the selected resources"
      lastTransitionTime: "2023-11-10T08:15:45Z"
      observedGeneration: 5
    - type: WorkSynchronized
      status: "True"
      reason: AllWorkSynced
      message: "All of the works are synchronized to the latest"
      lastTransitionTime: "2023-11-10T08:16:00Z"
      observedGeneration: 5
    - type: Applied
      status: "True"
      reason: AllWorkHaveBeenApplied
      message: "All corresponding work objects are applied"
      lastTransitionTime: "2023-11-10T08:16:15Z"
      observedGeneration: 5
    - type: Available
      status: "True"
      reason: ResourceAvailable
      message: "All resources are available on the target cluster"
      lastTransitionTime: "2023-11-10T08:16:30Z"
      observedGeneration: 5
    failedPlacements: []
    driftedPlacements: []
    diffedPlacements: []

Voici un exemple complet montrant l’état complet d’un ResourcePlacement :

apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ResourcePlacement
metadata:
  name: web-app-placement
  namespace: web-app
  generation: 5
spec:
  resourceSelectors:
  - group: apps
    kind: Deployment
    name: web-server
    version: v1
  - group: ""
    kind: Service
    name: web-service
    version: v1
  policy:
    placementType: PickN
    numberOfClusters: 2
    affinity:
      clusterAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          clusterSelectorTerms:
          - matchLabels:
              region: us-west
status:
  conditions:
  - type: ResourcePlacementScheduled
    status: "True"
    reason: SchedulingPolicyFulfilled
    message: "found all the clusters needed as specified by the scheduling policy"
    lastTransitionTime: "2023-11-10T08:14:52Z"
    observedGeneration: 5
  - type: ResourcePlacementRolloutStarted
    status: "True"
    reason: RolloutStarted
    message: "All 2 cluster(s) start rolling out the latest resource"
    lastTransitionTime: "2023-11-10T08:15:30Z"
    observedGeneration: 5
  - type: ResourcePlacementOverridden
    status: "True"
    reason: NoOverrideSpecified
    message: "No override rules are configured for the selected resources"
    lastTransitionTime: "2023-11-10T08:15:45Z"
    observedGeneration: 5
  - type: ResourcePlacementWorkSynchronized
    status: "True"
    reason: SynchronizeSucceeded
    message: "All 2 cluster(s) are synchronized to the latest resources on the hub cluster"
    lastTransitionTime: "2023-11-10T08:16:00Z"
    observedGeneration: 5
  - type: ResourcePlacementApplied
    status: "True"
    reason: ApplySucceeded
    message: "The selected resources are successfully applied to 2 clusters"
    lastTransitionTime: "2023-11-10T08:16:15Z"
    observedGeneration: 5
  - type: ResourcePlacementAvailable
    status: "True"
    reason: ResourceAvailable
    message: "The selected resources in 2 cluster are available now"
    lastTransitionTime: "2023-11-10T08:16:30Z"
    observedGeneration: 5
  observedResourceIndex: "1"
  selectedResources:
  - group: apps
    kind: Deployment
    name: web-server
    version: v1
  - group: ""
    kind: Service
    name: web-service
    version: v1
  placementStatuses:
  - clusterName: aks-west-1
    observedResourceIndex: "1"
    conditions:
    - type: ResourceScheduled
      status: "True"
      reason: ScheduleSucceeded
      message: "Successfully scheduled resources for placement in aks-west-1 (affinity score: 0, topology spread score: 0): picked by scheduling policy"
      lastTransitionTime: "2023-11-10T08:14:52Z"
      observedGeneration: 5
    - type: RolloutStarted
      status: "True"
      reason: RolloutStarted
      message: "Detected the new changes on the resources and started the rollout process"
      lastTransitionTime: "2023-11-10T08:15:30Z"
      observedGeneration: 5
    - type: Overridden
      status: "True"
      reason: NoOverrideSpecified
      message: "No override rules are configured for the selected resources"
      lastTransitionTime: "2023-11-10T08:15:45Z"
      observedGeneration: 5
    - type: WorkSynchronized
      status: "True"
      reason: AllWorkSynced
      message: "All of the works are synchronized to the latest"
      lastTransitionTime: "2023-11-10T08:16:00Z"
      observedGeneration: 5
    - type: Applied
      status: "True"
      reason: AllWorkHaveBeenApplied
      message: "All corresponding work objects are applied"
      lastTransitionTime: "2023-11-10T08:16:15Z"
      observedGeneration: 5
    - type: Available
      status: "True"
      reason: ResourceAvailable
      message: "All resources are available on the target cluster"
      lastTransitionTime: "2023-11-10T08:16:30Z"
      observedGeneration: 5
    failedPlacements: []
    driftedPlacements: []
    diffedPlacements: []
  - clusterName: aks-west-2
    observedResourceIndex: "1"
    conditions:
    - type: ResourceScheduled
      status: "True"
      reason: ScheduleSucceeded
      message: "Successfully scheduled resources for placement in aks-west-2 (affinity score: 0, topology spread score: 0): picked by scheduling policy"
      lastTransitionTime: "2023-11-10T08:14:52Z"
      observedGeneration: 5
    - type: RolloutStarted
      status: "True"
      reason: RolloutStarted
      message: "Detected new changes on the resources and started the rollout process"
      lastTransitionTime: "2023-11-10T08:15:30Z"
      observedGeneration: 5
    - type: Overridden
      status: "True"
      reason: NoOverrideSpecified
      message: "No override rules are configured for the selected resources"
      lastTransitionTime: "2023-11-10T08:15:45Z"
      observedGeneration: 5
    - type: WorkSynchronized
      status: "True"
      reason: AllWorkSynced
      message: "All of the works are synchronized to the latest"
      lastTransitionTime: "2023-11-10T08:16:00Z"
      observedGeneration: 5
    - type: Applied
      status: "True"
      reason: AllWorkHaveBeenApplied
      message: "All corresponding work objects are applied"
      lastTransitionTime: "2023-11-10T08:16:15Z"
      observedGeneration: 5
    - type: Available
      status: "True"
      reason: ResourceAvailable
      message: "All resources are available on the target cluster"
      lastTransitionTime: "2023-11-10T08:16:30Z"
      observedGeneration: 5
    failedPlacements: []
    driftedPlacements: []
    diffedPlacements: []

Cet exemple montre :

  • Planification réussie : le placement a trouvé deux clusters qui correspondent à la stratégie de placement.
  • Déploiement réussi : toutes les ressources sont déployées sur les deux clusters cibles.
  • Aucune substitution : aucune substitution de ressource n’est configurée ou nécessaire.
  • Travail synchronisé : les objets de travail sont créés et synchronisés.
  • Ressources appliquées : toutes les ressources sont correctement appliquées.
  • Ressources disponibles : toutes les ressources sont en cours d’exécution et disponibles.
  • État propre : aucun échec, dérive ou différence de placement.

Pour en savoir plus sur le placement des ressources, consultez les articles suivants :