Grundlegendes zum Status für Azure Kubernetes Fleet Manager-Ressourcenplatzierung

Gilt für: ✔️ Flottenmanager mit Hubcluster

Wenn Sie mit Azure Kubernetes Fleet Manager arbeiten, ist das Verständnis des Status Ihrer ClusterResourcePlacement Ressourcen für die Überwachung des Bereitstellungsfortschritts und die Problembehandlung von entscheidender Bedeutung.

Wenn Sie mit Azure Kubernetes Fleet Manager arbeiten, ist das Verständnis des Status Ihrer ResourcePlacement Ressourcen für die Überwachung des Bereitstellungsfortschritts und die Problembehandlung von entscheidender Bedeutung.

Voraussetzungen

Übersicht über die Struktur des Platzierungsstatus

Das ClusterResourcePlacement Objekt enthält nicht nur die beschreibende Spezifikation über die Platzierung, sondern auch den Status des Platzierungsvorgangs.

Das ResourcePlacement Objekt enthält nicht nur die beschreibende Spezifikation über die Platzierung, sondern auch den Status des Platzierungsvorgangs.

Der Statusabschnitt enthält ausführliche Informationen zu:

  • Gesamtplatzierungsstatus, ausgedrückt durch Bedingungen
  • Durch die Platzierung ausgewählte Ressourcen
  • Status der Platzierung pro Cluster, ausgedrückt durch Bedingungen
  • Failed, driftedund diffed Platzierungen in jedem Cluster

Verwenden Sie den folgenden Befehl, um den Status einer Platzierung anzuzeigen:

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

Verwenden Sie den folgenden Befehl, um die unformatierte YAML-Ausgabe abzurufen:

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

Statusfelder der obersten Ebene

Der Statusabschnitt enthält die folgenden Felder auf oberster Ebene:

  • selectedResources: Liste der ressourcen, die durch die Platzierung ausgewählt wurden
  • Bedingungen: Array von Allgemeinen Platzierungsbedingungen
  • observedResourceIndex: Index der aktuellen Momentaufnahme der Ressource
  • placementStatuses: Informationen zum Platzierungsstatus pro Cluster

In den folgenden Abschnitten werden die einzelnen Felder ausführlich untersucht.

Ausgewählte Ressourcen

Das selectedResources-Feld listet alle Ressourcen auf, die vom Placement ausgewählt werden. Verwenden Sie dieses Feld, um zu überprüfen, ob die erwarteten Ressourcen in der Platzierung enthalten sind. Ein Beispiel:

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

Jeder Ressourceneintrag umfasst:

  • group: API-Gruppe (leer für Kernressourcen)
  • Version: API-Version (z. B v1. , v1beta1)
  • Art: Ressourcentyp
  • name: Ressourcenname
  • namespace: Namespace (für Ressourcen mit Namespace)
  • Envelope: Wenn eine Ressource in einen Umschlag eingeschlossen ist, werden auch die Umschlagmetadaten bereitgestellt, die Folgendes umfassen:
    • Name: Name des Umschlags
  • Namespace: Namespace des Umschlags
  • Typ: Typ des Umschlags (z. B ResourceEnvelope. )

Platzierungsbedingungen

Das conditions Array stellt übergeordnete Statusinformationen über die gesamte Platzierung bereit. Jede Bedingung folgt der allgemeinen Kubernetes-Definition, die die folgenden Standardfelder enthält:

  • type: Der Bedingungstyp (in den folgenden Abschnitten beschrieben).
  • status: True, , False, oder Unknown.
  • Grund: Kurzer Grundcode für die Bedingung.
  • Nachricht: Für Menschen lesbare Beschreibung.
  • lastTransitionTime: Wann die Bedingung zuletzt geändert wurde.
  • observedGeneration: Generation der Platzierung zum Zeitpunkt der Festlegung der Bedingung.

ClusterResourcePlacement-Bedingungstypen

Die folgenden Bedingungstypen sind für ClusterResourcePlacement verfügbar:

Geplante Cluster-Ressourcenplatzierung

ResourcePlacement-Bedingungstypen

Die folgenden Bedingungstypen sind für ResourcePlacement verfügbar:

Ressourcenzuordnung geplant

Zeigt an, ob die Platzierung erfolgreich auf den Zielclustern geplant wurde.

  • True: Alle erforderlichen Cluster werden gemäß der Platzierungsrichtlinie ausgewählt.
  • False: Fehler bei der Planung (z. B. unzureichende Cluster verfügbar).
  • Unbekannt: Die Planungsentscheidung steht aus.
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

ClusterressourcenplatzierungseinführungGestartet

Ressourcenplatzierungs-Rollout gestartet

Gibt an, ob das Rollout über die ausgewählten Cluster hinweg gestartet wird.

  • True: Die Bereitstellung der Ressourcen für geplante Cluster hat begonnen.
  • False: Das Rollout wurde noch nicht gestartet.
  • Unbekannt: Die Rolloutentscheidung steht aus.
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

Gibt an, ob Ressourcenüberschreibungen erfolgreich angewendet werden.

  • True: Alle anwendbaren Überschreibungen wurden verarbeitet.
  • False: Einige Überschreibungen konnten nicht angewendet werden.
  • Unbekannt: Die Überschreibungsverarbeitung steht noch aus.
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

ResourcePlacementWorkSynchronized

Gibt an, ob der Prozess Arbeitsobjekte in den clusterbezogenen Namespaces des Hub-Clusters erstellt.

  • True: Alle Arbeitsobjekte werden synchronisiert.
  • False: Die Arbeitssynchronisierung schlägt fehl oder ist unvollständig.
  • Unbekannt: Die Arbeitssynchronisierung steht aus.
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

RessourcenplatzierungAngewendet

Gibt an, ob alle Ressourcen erfolgreich auf Member-Cluster angewendet werden.

  • True: Alle Ressourcen wurden erfolgreich auf alle Zielcluster angewendet.
  • False: Einige Ressourcen konnten nicht angewendet werden (prüfen Sie failedPlacements).
  • Unbekannt: Der Vorgang "Anwenden" steht aus.
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

ClusterRessourcenPlatzierungVerfügbar

Verfügbare Ressourcenplatzierung

Gibt an, ob die platzierten Ressourcen alle verfügbar und für Mitglieder-Cluster bereit sind.

  • True: Alle Ressourcen sind für alle Zielcluster verfügbar.
  • False: Einige Ressourcen sind noch nicht verfügbar.
  • Unbekannt: Die Verfügbarkeitsprüfung steht aus.
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

Ressourcenplatzierungsdifferenz Berichtet

Gibt an, ob Konfigurationsunterschiede gemeldet werden (bei Verwendung der ReportDiff-Strategie).

  • True: Der vollständige Diff-Bericht ist verfügbar.
  • False: Die Erstellung des Diff-Berichts ist fehlgeschlagen oder unvollständig.
  • Unbekannt: Die Diff-Berichterstellung steht aus.
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

Ressourcenmomentaufnahmen

Das observedResourceIndex Feld gibt an, welcher Snapshot von Ressourcen derzeit bereitgestellt wird.

observedResourceIndex: "1"

Fleet Manager erstellt je nach Rolloutstrategie Ressourcenabbilder auf unterschiedliche Weise.

Für die Strategie RollingUpdate (Standard): Fleet Manager erstellt automatisch Ressourcen-Snapshots, wenn:

  • Die Ressourcenfilter ändern sich
  • Sie ändern die ausgewählten Ressourcen

Für die Strategie External: Fleet Manager erstellt nicht automatisch Ressourcen-Snapshots. Stattdessen wird sie erstellt, wenn Sie eine mehrstufige Aktualisierung ausführen und das resourceSnapshotIndex Feld weglassen. Das bedeutet, dass beim erstmaligen Erstellen einer Platzierung mit einer External-Rollout-Strategie keine Ressourcen-Snapshots vorhanden sind, bis Sie den ersten gestaffelten Aktualisierungslauf ausführen.

Hinweis

Wenn für eine Platzierung zuvor die Strategie RollingUpdate verwendet wurde und Sie sie in External ändern, bleiben die vorhandenen Ressourcen-Snapshots verfügbar. Sie können beim Erstellen von mehrstufigen Aktualisierungen auf diese vorhandenen Momentaufnahmen verweisen.

Jede Momentaufnahme weist einen eindeutigen Index auf. Sie können Momentaufnahmen anzeigen, indem Sie Folgendes verwenden:

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

Platzierungsstatus pro Cluster

Das placementStatuses Array enthält detaillierten Status für jeden Cluster, in dem Ressourcen platziert oder versucht werden, platziert zu werden:

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"

Bedingungstypen pro Cluster

Der Status jedes Clusters umfasst Bedingungen, die den Bereitstellungslebenszyklus nachverfolgen:

RessourceEingeplant

Gibt an, ob der Cluster für die Platzierung erfolgreich ausgewählt wurde.

- 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

RolloutGestartet

Gibt an, ob das Rollout für diesen bestimmten Cluster gestartet wurde.

- 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

Außer Kraft gesetzt

Gibt an, ob Ressourcenüberschreibungen für diesen Cluster angewendet werden.

- 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

Gibt an, ob Arbeitsobjekte für diesen Cluster erstellt werden.

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

Angewendet

Gibt an, ob alle Ressourcen erfolgreich auf diesen Cluster angewendet werden.

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

Verfügbar

Gibt an, ob alle Ressourcen für diesen Cluster verfügbar und bereit sind.

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

DiffReported

Gibt an, ob Konfigurationsunterschiede für diesen Cluster gemeldet werden.

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

Fehlgeschlagene Platzierungen

Wenn Ressourcen nicht auf einen Cluster angewendet werden, zeichnet das System die Details im failedPlacements Array auf:

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"

Jede fehlgeschlagene Platzierung umfasst:

  • Ressourcenidentifikation: Gruppe, Version, Art, Name, Namespace
  • bedingung: Die spezifische Fehlerbedingung
  • Umschlag: Umschlaginformationen, falls zutreffend

Verschobene Platzierungen

Flottenmanager meldet immer Ressourcen, die vom gewünschten Zustand entfernt werden:

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"

Jede abweichende Platzierung umfasst:

  • Ressourcenidentifikation: Gruppe, Version, Art, Name, Namespace
  • observationTime: Wann die Abweichung zuletzt beobachtet wurde
  • firstDriftedObservedTime: Wann die Abweichung zum ersten Mal erkannt wurde
  • targetClusterObservedGeneration: Beobachtete Generation der Ressource im Mitgliedscluster
  • observedDrifts: Detaillierte Liste der Konfigurationsunterschiede

Unterschiede bei Platzierungen

Wenn Sie die ReportDiff-Anwendungsstrategie verwenden, meldet Fleet Manager Konfigurationsunterschiede.

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"

Diffed placements haben eine ähnliche Struktur wie drifted placements, werden jedoch für verschiedene Szenarien verwendet:

  • Abgewichene Platzierungen: Verwenden Sie diese Option, wenn Sie Ressourcen zuweisen, diese anschließend jedoch ändern.
  • Abweichende Platzierungen: Verwenden Sie diese Option mit der „ReportDiff“-Strategie oder wenn die Übernahmebedingungen nicht erfüllt sind.

Überwachen des Platzierungsfortschritts

Um den Platzierungsfortschritt effektiv zu überwachen, überprüfen Sie die folgenden wichtigen Indikatoren:

  1. Ressource platziert: Prüfen, ob ClusterResourcePlacementWorkSynchronized wahr ist
  2. Gesamtzustand: Sehen Sie sich den ClusterResourcePlacementApplied Zustand an
  3. Status pro Cluster: Überprüfen der Bedingungen für jeden Zielcluster
  4. Fehlgeschlagene Platzierungen: Prüfen Sie, ob Einträge in failedPlacements-Arrays vorhanden sind
  1. Ressource platziert: Überprüfen Sie, dass ResourcePlacementWorkSynchronized auf „True“ gesetzt ist
  2. Gesamtzustand: Sehen Sie sich den ResourcePlacementApplied Zustand an
  3. Status pro Cluster: Überprüfen der Bedingungen für jeden Zielcluster
  4. Fehlgeschlagene Platzierungen: Prüfen Sie, ob in failedPlacements-Arrays Einträge vorhanden sind

Vollständiges Statusbeispiel

Hier ist ein umfassendes Beispiel, das den vollständigen Status eines ClusterResourcePlacement zeigt:

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: []

Hier ist ein umfassendes Beispiel, das den vollständigen Status eines ResourcePlacement zeigt:

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: []

Dieses Beispiel zeigt:

  • Erfolgreiche Terminplanung: Bei der Platzierung wurden zwei Cluster gefunden, die der Platzierungsrichtlinie entsprechen.
  • Erfolgreiches Rollout: Alle Ressourcen werden in beiden Zielclustern bereitgestellt.
  • Keine Überschreibungen: Es sind keine Überschreibungen für Ressourcen konfiguriert oder erforderlich.
  • Synchronisierte Arbeit: Arbeitsobjekte werden erstellt und synchronisiert.
  • Angewendete Ressourcen: Alle Ressourcen werden erfolgreich angewendet.
  • Verfügbare Ressourcen: Alle Ressourcen laufen und sind verfügbar.
  • Sauberer Status: Keine fehlgeschlagenen, abweichenden oder mit Abweichungen versehenen Platzierungen.

Weitere Informationen zur Ressourcenplatzierung finden Sie in den folgenden Artikeln: