Freigeben über


Kubernetes-Ressourcenplatzierung vom Hubcluster zu Mitgliedsclustern

In diesem Artikel wird das Konzept der Kubernetes-Ressourcenplatzierung von Hubclustern zu Mitgliedsclustern mithilfe von Azure Kubernetes Fleet Manager (Kubernetes Fleet) beschrieben.

Plattformadministratoren und -administratorinnen müssen häufig Kubernetes-Ressourcen auf mehrere Clustern aus verschiedenen Gründen bereitstellen, z. B.:

  • Verwalten der Zugriffssteuerung mithilfe von Rollen und Rollenbindungen über mehrere Cluster hinweg.
  • Ausführen von Infrastrukturanwendungen wie Prometheus oder Flux, die sich auf allen Clustern befinden müssen.

Anwendungsentwickler und -entwicklerinnen müssen häufig aus verschiedenen Gründen Kubernetes-Ressourcen auf mehrere Cluster bereitstellen, z. B.:

  • Bereitstellen einer Videobereitstellungsanwendung in mehreren Clustern in verschiedenen Regionen für eine geringe Latenz bei der Überwachung.
  • Bereitstellen einer Einkaufswagenanwendung in zwei gekoppelten Regionen, damit die Kundschaft während eines Ausfalls einer Region weiterhin einkaufen kann.
  • Bereitstellen einer Batchcomputeanwendung in Clustern mit kostengünstigen Spot-Knotenpools.

Es ist mühsam, diese Kubernetes-Ressourcen manuell in mehreren Clustern zu erstellen, zu aktualisieren und nachzuverfolgen. Fleet bietet eine Kubernetes-Ressourcenverteilung für die Verwaltung von Kubernetes-Ressourcen. Mit Kubernetes Fleet können Sie Kubernetes-Ressourcen im Hubcluster erstellen und über Kubernetes-Kundenressourcen an ausgewählte Mitgliedscluster verteilen: MemberCluster und ClusterResourcePlacement.

Kubernetes Fleet unterstützt diese benutzerdefinierten Ressourcen basierend auf einer cloudeigenen Open Source-Lösung, die Sie in der Open Source-Fleet-Dokumentation nachlesen können.

Einführung in ClusterResourcePlacement

Ein ClusterResourcePlacement-Objekt wird verwendet, um dem Fleet-Scheduler mitzuteilen, wie eine bestimmte Gruppe von clusterbezogenen Objekten aus dem Flottenhubcluster in Membercluster platziert werden kann. Namespacebezogene Objekte wie Deployments, StatefulSets, DaemonSets, ConfigMaps, Secrets und PersistentVolumeClaims werden einbezogen, wenn der enthaltende Namespace ausgewählt ist.

Mit ClusterResourcePlacement haben Sie folgende Möglichkeiten:

  • Auswählen, welche Kubernetes-Ressourcen im Clusterbereich an Mitgliedscluster verteilt werden.
  • Angeben von Platzierungsrichtlinien, um Mitgliedscluster manuell oder automatisch als Zielcluster auszuwählen.
  • Angeben von Rolloutstrategien zum sicheren Rollout von Updates der ausgewählten Kubernetes-Ressourcen in mehreren Zielclustern.
  • Anzeigen des Verteilungsfortschritts für jeden Zielcluster.

Ein Beispiel ist in der folgenden Abbildung dargestellt.

Diagramm: Weitergabe von Kubernetes-Ressourcen an Mitgliedscluster

Kapseln von Ressourcen

ClusterResourcePlacement unterstützt die Verwendung von ConfigMap, um bestimmte Kubernetes-Ressourcentypen zu umhüllen, damit sie auf dem Hubcluster ohne unbeabsichtigte Nebenwirkungen auf dem Hubcluster bereitgestellt werden können. Eine Liste der Ressourcentypen und Informationen zur Funktionsweise dieses Features finden Sie in der Dokumentation zum Umschlagobjekt

Arten der Platzierung

Die folgenden Platzierungstypen stehen zur Verfügung, um die Anzahl der Cluster zu steuern, an welche die festgelegte Kubernetes-Ressource verteilt werden muss:

  • PickFixed platziert die Ressourcen nach Namen in eine bestimmte Liste von Memberclustern.
  • PickAll platziert die Ressource auf allen Mitgliedsclustern oder allen Mitgliedsclustern, die einem Kriterium entsprechen. Diese Richtlinie ist nützlich für die Platzierung von Infrastrukturworkloads, z. B. Clusterüberwachungs- oder Berichtsanwendungen.
  • PickN ist die flexibelste Platzierungsoption und ermöglicht die Auswahl von Clustern basierend auf Affinitäts- oder Topologieverteilungseinschränkungen und ist nützlich, wenn Workloads über mehrere geeignete Cluster verteilt werden, um sicherzustellen, dass die Verfügbarkeit gewünscht wird.

Platzierungstyp PickFixed

Wenn Sie eine Workload in einer bekannten Gruppe von Memberclustern bereitstellen möchten, können Sie eine PickFixed-Platzierungsrichtlinie verwenden, um die Cluster anhand des Namens auszuwählen.

clusterNames ist die einzige gültige Richtlinienoption für diesen Platzierungstyp.

Das folgende Beispiel zeigt, wie Sie den test-deployment-Namespace in Memberclustern den cluster1 und cluster2 bereitstellen.

apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
  name: crp-fixed
spec:
  policy:
    placementType: PickFixed
    clusterNames:
    - cluster1
    - cluster2
  resourceSelectors:
    - group: ""
      kind: Namespace
      name: test-deployment
      version: v1

Platzierungstyp PickAll

Sie können einen PickAll-Platzierungstyp verwenden, um eine Workload in allen Mitgliedsclustern in der Flotte oder in einer Teilmenge von Clustern bereitzustellen, die den von Ihnen festgelegten Kriterien entsprechen.

Beim Erstellen dieser Art von Platzierung können die folgenden Clusteraffinitätstypen angegeben werden:

  • requiredDuringSchedulingIgnoredDuringExecution: Da diese Richtlinie während der Planung erforderlich ist, filtert sie das Cluster basierend auf den angegebenen Kriterien.

Das folgende Beispiel zeigt, wie Sie einen prod-deployment Namespace und alle zugehörigen Objekte in allen Clustern bereitstellen, die mit environment: production Bezeichnungen versehen sind:

apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
  name: crp-pickall
spec:
  policy:
    placementType: PickAll
    affinity:
        clusterAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
                clusterSelectorTerms:
                - labelSelector:
                    matchLabels:
                        environment: production
  resourceSelectors:
    - group: ""
      kind: Namespace
      name: prod-deployment
      version: v1

Platzierungstyp PickN

Der PickN-Platzierungstyp ist die flexibelste Option und ermöglicht die Platzierung von Ressourcen in einer konfigurierbaren Anzahl von Clustern basierend auf Affinitäten und Topologie-Spread-Einschränkungen.

Beim Erstellen dieser Art von Platzierung können die folgenden Clusteraffinitätstypen angegeben werden:

  • requiredDuringSchedulingIgnoredDuringExecution: Da diese Richtlinie während der Planung erforderlich ist, filtert sie das Cluster basierend auf den angegebenen Kriterien.
  • preferredDuringSchedulingIgnoredDuringExecution: Da diese Richtlinie bevorzugt wird, aber während der Planung nicht erforderlich ist, bewertet sie Cluster basierend auf angegebenen Kriterien.

Sie können sowohl erforderliche als auch bevorzugte Affinitäten festlegen. Erforderliche Affinitäten verhindern die Platzierung an Clustern, die nicht übereinstimmen, und bevorzugte Affinitäten stellen die Sortierung gültiger Cluster bereit.

PickN mit Affinitäten

Verwenden von Affinitäten mit PickN Platzierungsrichtlinienfunktionen ähnlich wie die Verwendung von Affinitäten mit der Pod-Planung.

Das folgende Beispiel zeigt, wie Sie die Workload auf drei Clustern bereitstellen. Nur Cluster mit der Bezeichnung critical-allowed: "true" sind gültige Platzierungsziele, wobei Cluster mit der Bezeichnung critical-level: 1 bevorzugt werden:

apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
  name: crp-pickn-01
spec:
  resourceSelectors:
    - ...
  policy:
    placementType: PickN
    numberOfClusters: 3
    affinity:
        clusterAffinity:
            preferredDuringSchedulingIgnoredDuringExecution:
              weight: 20
              preference:
              - labelSelector:
                  matchLabels:
                    critical-level: 1
            requiredDuringSchedulingIgnoredDuringExecution:
                clusterSelectorTerms:
                - labelSelector:
                    matchLabels:
                      critical-allowed: "true"

PickN mit Beschränkungen der Topologieverteilung

Sie können Topologieverteilungseinschränkungen verwenden, um die Aufteilung der Clusterplatzierungen über Topologiegrenzen hinweg zu erzwingen, um die Verfügbarkeitsanforderungen zu erfüllen. Verwenden Sie z. B. diese Einschränkungen, um Platzierungen über Regionen hinweg zu teilen oder Ringe zu aktualisieren. Sie können Topologieverteilungseinschränkungen auch so konfigurieren, dass die Planung verhindert wird, wenn die Beschränkung nicht erfüllt werden kann (whenUnsatisfiable: DoNotSchedule) oder dass die Planung so gut wie möglich ist (whenUnsatisfiable: ScheduleAnyway).

Dieses folgende Beispiel zeigt, wie man eine bestimmte Gruppe von Ressourcen über mehrere Regionen hinweg verteilt und versucht, mehrere Mitgliedercluster mit unterschiedlichen Aktualisierungstagen zu planen.

apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
  name: crp-pickn-02
spec:
  resourceSelectors:
    - ...
  policy:
    placementType: PickN
    topologySpreadConstraints:
    - maxSkew: 2
      topologyKey: region
      whenUnsatisfiable: DoNotSchedule
    - maxSkew: 2
      topologyKey: updateDay
      whenUnsatisfiable: ScheduleAnyway

Weitere Informationen finden Sie in der Open-Source-Fleet-Dokumentation in den Einschränkungen der Topologieüberfüllung.

Optionen für Platzierungsrichtlinien

In der Tabelle sind die verfügbaren Planungsrichtlinienfelder für jeden Platzierungstyp zusammengefasst.

Feld "Policy" PickFixed PickAll Auswählen
placementType
affinity
clusterNames
numberOfClusters
topologySpreadConstraints

Auswählen von Clustern basierend auf Bezeichnungen und Eigenschaften

Verfügbare Bezeichnungen und Eigenschaften zum Auswählen von Clustern

Bei Verwendung der PickN-Typen und PickAll-Platzierung können Sie die folgenden Bezeichnungen und Eigenschaften als Teil Ihrer Richtlinien verwenden.

Beschriftungen

Die folgenden Bezeichnungen werden automatisch allen Memberclustern hinzugefügt und können für die Zielclusterauswahl in Ressourcenplatzierungsrichtlinien verwendet werden.

Label Beschreibung
fleet.azure.com/location Azure-Region des Clusters (Westus)
fleet.azure.com/resource-group Azure-Ressourcengruppe des Clusters (rg_prodapps_01)
fleet.azure.com/subscription-id Azure-Abonnementbezeichner, in dem sich das Cluster befindet. Formatiert als UUID/GUID.

Sie können auch alle benutzerdefinierten Bezeichnungen verwenden, die Sie auf Ihre Cluster anwenden.

Eigenschaften

Die folgenden Eigenschaften sind für die Verwendung im Rahmen von Platzierungsrichtlinien verfügbar.

CPU- und Speichereigenschaften werden als Kubernetes-Ressourceneinheiten dargestellt.

Kosteneigenschaften sind Dezimalstellen, die Kosten pro Stunde in US-Dollar für Azure Compute darstellen, das für Knoten innerhalb des Clusters verwendet wird. Die Kosten basieren auf öffentlichen Azure-Preisen.

Eigenschaftenname Beschreibung
kubernetes-fleet.io/node-count Verfügbare Knoten im Membercluster.
resources.kubernetes-fleet.io/total-cpu Gesamtanzahl der CPU-Ressourceneinheiten des Clusters.
resources.kubernetes-fleet.io/allocatable-cpu Zuordnungsfähige CPU-Ressourceneinheiten des Clusters.
resources.kubernetes-fleet.io/available-cpu Verfügbare CPU-Ressourceneinheiten des Clusters.
resources.kubernetes-fleet.io/total-memory Gesamtspeicherressourceneinheit des Clusters.
resources.kubernetes-fleet.io/allocatable-memory Zuordnungsfähige Einheiten der Speicherressource des Clusters.
resources.kubernetes-fleet.io/available-memory Verfügbare Speicherressourceneinheiten des Clusters.
kubernetes.azure.com/per-cpu-core-cost Die Kosten pro CPU-Kern des Clusters.
kubernetes.azure.com/per-gb-memory-cost Die Kosten pro GiB-Speicher des Clusters.

Angeben von Auswahlvergleichskriterien

Wenn Sie Clustereigenschaften in einem Richtlinienkriterium verwenden, geben Sie Folgendes an:

  • Name: Der Name der Eigenschaft, bei der es sich um eine der in Eigenschaften in diesem Artikel aufgeführten Eigenschaften handelt.

  • Operator: Ein Operator, mit dem die Bedingung zwischen dem eingeschränkten/gewünschten Wert und dem beobachteten Wert im Cluster ausgedrückt wird. Die folgenden Operatoren werden derzeit unterstützt:

    • Gt (Größer als): Der beobachtete Wert eines Clusters der angegebenen Eigenschaft muss größer als der Wert in der Bedingung sein, damit er für die Ressourcenplatzierung ausgewählt werden kann.
    • Ge (Größer als oder gleich): Der beobachtete Wert eines Clusters der angegebenen Eigenschaft muss größer als der Wert in der Bedingung oder gleich diesem Wert sein, damit er für die Ressourcenplatzierung ausgewählt werden kann.
    • Lt (Kleiner als): Der beobachtete Wert eines Clusters der angegebenen Eigenschaft muss kleiner als der Wert in der Bedingung sein, damit er für die Ressourcenplatzierung ausgewählt werden kann.
    • Le (Kleiner als oder gleich): Der beobachtete Wert eines Clusters der angegebenen Eigenschaft muss kleiner als der Wert in der Bedingung oder gleich diesem Wert sein, damit er für die Ressourcenplatzierung ausgewählt werden kann.
    • Eq (Gleich): Der beobachtete Wert eines Clusters der angegebenen Eigenschaft muss gleich dem Wert in der Bedingung sein, damit er für die Ressourcenplatzierung ausgewählt werden kann.
    • Ne (Ungleich): Der beobachtete Wert eines Clusters der angegebenen Eigenschaft muss ungleich dem Wert in der Bedingung sein, damit er für die Ressourcenplatzierung ausgewählt werden kann.

    Wenn Sie den Operator Gt, Ge, Lt, Le, Eq oder Ne verwenden, muss die Liste der Werte in der Bedingung genau einen Wert aufweisen.

  • Values: Eine Liste der möglichen Werte der Eigenschaft.

Fleet wertet jeden Cluster basierend auf den in der Bedingung angegebenen Eigenschaften aus. Wenn die unter requiredDuringSchedulingIgnoredDuringExecution aufgeführten Bedingungen nicht erfüllt werden, wird dieser Mitgliedscluster von der Ressourcenplatzierung ausgeschlossen.

Hinweis

Wenn ein Mitgliedscluster nicht über die in der Bedingung ausgedrückte Eigenschaft verfügt, wird die Bedingung automatisch als nicht erfüllt angesehen.

Hier ist eine Beispiel-Platzierungsrichtlinie, um nur Cluster mit fünf oder mehr Knoten auszuwählen.

apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
  name: crp
spec:
  resourceSelectors:
    - ...
  policy:
    placementType: PickAll
    affinity:
        clusterAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
                clusterSelectorTerms:
                - propertySelector:
                    matchExpressions:
                    - name: "kubernetes-fleet.io/node-count"
                      operator: Ge
                      values:
                      - "5"

Funktionsweise der Eigenschaftenbewertung

Wenn preferredDuringSchedulingIgnoredDuringExecution verwendet wird, priorisiert ein Eigenschaftensortierer alle Cluster in der Flotte basierend auf ihren Werten in aufsteigender oder absteigender Reihenfolge. Die für die Sortierung verwendeten Gewichtungen werden basierend auf dem angegebenen Wert berechnet.

Ein Eigenschaftensortierer besteht aus:

  • Name: Name der Clustereigenschaft.
  • Sortierreihenfolge: Die Sortierreihenfolge kann entweder Ascending oder Descending sein. Wenn eine Ascending-Reihenfolge verwendet wird, werden Mitgliedscluster mit niedrigeren beobachteten Werten bevorzugt. Wenn eine Descending-Reihenfolge verwendet wird, werden Mitgliedscluster mit höheren beobachteten Werten bevorzugt.
Absteigende Reihenfolge

Für die Sortierreihenfolge „Absteigend“ wird die proportionale Gewichtung mithilfe der folgenden Formel berechnet:

((Observed Value - Minimum observed value) / (Maximum observed value - Minimum observed value)) * Weight

Beispiel: Sie möchten Cluster basierend auf der Eigenschaft der verfügbaren CPU-Kapazität in absteigender Reihenfolge priorisieren und verfügen über eine Flotte von drei Clustern mit der folgenden verfügbaren CPU:

Cluster Verfügbare CPU-Kapazität
cluster-a 100
cluster-b 20
cluster-c 10

In diesem Fall berechnet der Sortierer die folgenden Gewichtungen:

Cluster Verfügbare CPU-Kapazität Berechnung Weight
cluster-a 100 (100 - 10) / (100 - 10) 100 %%
cluster-b 20 (20 - 10) / (100 - 10) 11,11%
cluster-c 10 (10 - 10) / (100 - 10) 0 %
Aufsteigende Reihenfolge

Für die Sortierreihenfolge „Aufsteigend“ wird die proportionale Gewichtung mithilfe der folgenden Formel berechnet:

(1 - ((Observed Value - Minimum observed value) / (Maximum observed value - Minimum observed value))) * Weight

Beispiel: Sie möchten Cluster basierend auf den Kosten pro CPU-Kern in aufsteigender Reihenfolge priorisieren und verfügen über eine Flotte von drei Clustern mit den folgenden Kosten pro CPU-Kern:

Cluster Kosten pro CPU-Kern
cluster-a 1
cluster-b 0.2
cluster-c 0.1

In diesem Fall berechnet der Sortierer die folgenden Gewichtungen:

Cluster Kosten pro CPU-Kern Berechnung Weight
cluster-a 1 1 - ((1 - 0.1) / (1 - 0.1)) 0 %
cluster-b 0.2 1 - ((0.2 - 0.1) / (1 - 0.1)) 88,89%
cluster-c 0.1 1 - (0.1 - 0.1) / (1 - 0.1) 100 %%

Verwenden von Toleranzen

ClusterResourcePlacement Objekte unterstützen die Spezifikation von Toleranzen, die für das ClusterResourcePlacement-Objekt gelten. Jedes Toleranzobjekt umfasst folgende Felder:

  • key: Der Schlüssel der Toleranz.
  • value: Der Wert der Toleranz.
  • effect: Die Wirkung der Toleranz, z. B. NoSchedule.
  • operator: Der Operator der Toleranz, z. B. Exists oder Equal.

Jede Toleranz wird verwendet, um einen oder mehrere spezifische Taints zu tolerieren, die auf ClusterResourcePlacement angewendet werden. Sobald alleTaints auf MemberCluster toleriert werden, kann die planende Person Ressourcen dann an den Cluster verteilen. Sie können keine Toleranzen aus einem ClusterResourcePlacement-Objekt aktualisieren oder entfernen, nachdem es erstellt wurde.

Weitere Informationen finden Sie in der Open-Source-Fleet-Dokumentation zu Toleranzen.

Konfigurieren der Rolloutstrategie

Fleet verwendet eine rollierende Aktualisierungsstrategie, um zu steuern, wie Updates über Cluster hinweg eingeführt werden.

Im folgenden Beispiel führt der Flottenplaner Updates für jedes Cluster sequenziell aus und wartet mindestens unavailablePeriodSeconds zwischen Clustern. Der Rolloutstatus wird als erfolgreich betrachtet, wenn alle Ressourcen ordnungsgemäß auf den Cluster angewendet wurden. Die Überprüfung des Rolloutstatus wird nicht an untergeordnete Ressourcen weitergegeben – beispielsweise wird nicht bestätigt, dass von einer Bereitstellung erstellte Pods bereit sind.

apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
  name: crp
spec:
  resourceSelectors:
    - ...
  policy:
    ...
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
      unavailablePeriodSeconds: 60

Weitere Informationen finden Sie in der Open-Source-Fleet-Dokumentation zur Rolloutstrategie.

Festlegen des Platzierungsstatus

Der Fleet-Scheduler aktualisiert Details und Status von Platzierungsentscheidungen auf das ClusterResourcePlacement Objekt. Die Ausgabe enthält die folgenden Informationen:

  • Die Bedingungen, die derzeit für die Platzierung gelten, einschließlich, wenn die Platzierung erfolgreich abgeschlossen wurde.
  • Ein Platzierungsstatusabschnitt für jeden Mitgliedscluster, der den Status der Bereitstellung für diesen Cluster anzeigt.

Das folgende Beispiel zeigt einen ClusterResourcePlacement, der den test Namespace und die test-1 ConfigMap in zwei Member-Clustern mithilfe vonPickN bereitgestellt hat. Die Platzierung wurde erfolgreich abgeschlossen, und die Ressourcen wurden in die aks-member-1 und aks-member-2 Cluster platziert.

Sie können diese Informationen mithilfe des kubectl describe crp <name> Befehls anzeigen.

kubectl describe crp crp-1
Name:         crp-1
Namespace:
Labels:       <none>
Annotations:  <none>
API Version:  placement.kubernetes-fleet.io/v1
Kind:         ClusterResourcePlacement
Metadata:
  ...
Spec:
  Policy:
    Number Of Clusters:  2
    Placement Type:      PickN
  Resource Selectors:
    Group:
    Kind:                  Namespace
    Name:                  test
    Version:               v1
  Revision History Limit:  10
Status:
  Conditions:
    Last Transition Time:  2023-11-10T08:14:52Z
    Message:               found all the clusters needed as specified by the scheduling policy
    Observed Generation:   5
    Reason:                SchedulingPolicyFulfilled
    Status:                True
    Type:                  ClusterResourcePlacementScheduled
    Last Transition Time:  2023-11-10T08:23:43Z
    Message:               All 2 cluster(s) are synchronized to the latest resources on the hub cluster
    Observed Generation:   5
    Reason:                SynchronizeSucceeded
    Status:                True
    Type:                  ClusterResourcePlacementSynchronized
    Last Transition Time:  2023-11-10T08:23:43Z
    Message:               Successfully applied resources to 2 member clusters
    Observed Generation:   5
    Reason:                ApplySucceeded
    Status:                True
    Type:                  ClusterResourcePlacementApplied
  Placement Statuses:
    Cluster Name:  aks-member-1
    Conditions:
      Last Transition Time:  2023-11-10T08:14:52Z
      Message:               Successfully scheduled resources for placement in aks-member-1 (affinity score: 0, topology spread score: 0): picked by scheduling policy
      Observed Generation:   5
      Reason:                ScheduleSucceeded
      Status:                True
      Type:                  ResourceScheduled
      Last Transition Time:  2023-11-10T08:23:43Z
      Message:               Successfully Synchronized work(s) for placement
      Observed Generation:   5
      Reason:                WorkSynchronizeSucceeded
      Status:                True
      Type:                  WorkSynchronized
      Last Transition Time:  2023-11-10T08:23:43Z
      Message:               Successfully applied resources
      Observed Generation:   5
      Reason:                ApplySucceeded
      Status:                True
      Type:                  ResourceApplied
    Cluster Name:            aks-member-2
    Conditions:
      Last Transition Time:  2023-11-10T08:14:52Z
      Message:               Successfully scheduled resources for placement in aks-member-2 (affinity score: 0, topology spread score: 0): picked by scheduling policy
      Observed Generation:   5
      Reason:                ScheduleSucceeded
      Status:                True
      Type:                  ResourceScheduled
      Last Transition Time:  2023-11-10T08:23:43Z
      Message:               Successfully Synchronized work(s) for placement
      Observed Generation:   5
      Reason:                WorkSynchronizeSucceeded
      Status:                True
      Type:                  WorkSynchronized
      Last Transition Time:  2023-11-10T08:23:43Z
      Message:               Successfully applied resources
      Observed Generation:   5
      Reason:                ApplySucceeded
      Status:                True
      Type:                  ResourceApplied
  Selected Resources:
    Kind:       Namespace
    Name:       test
    Version:    v1
    Kind:       ConfigMap
    Name:       test-1
    Namespace:  test
    Version:    v1
Events:
  Type    Reason                     Age                    From                                   Message
  ----    ------                     ----                   ----                                   -------
  Normal  PlacementScheduleSuccess   12m (x5 over 3d22h)    cluster-resource-placement-controller  Successfully scheduled the placement
  Normal  PlacementSyncSuccess       3m28s (x7 over 3d22h)  cluster-resource-placement-controller  Successfully synchronized the placement
  Normal  PlacementRolloutCompleted  3m28s (x7 over 3d22h)  cluster-resource-placement-controller  Resources have been applied to the selected clusters

Platzierungsänderungstrigger

Der Fleet-Scheduler priorisiert die Stabilität bestehender Arbeitsauslastungsplatzierungen. Diese Priorisierung kann die Anzahl der Änderungen einschränken, die dazu führen, dass eine Arbeitsauslastung entfernt und neu geplant wird. Die folgenden Szenarien können Platzierungsänderungen auslösen:

  • Änderungen der Platzierungsrichtlinien im ClusterResourcePlacement Objekt können das Entfernen und Neuplanen einer Arbeitsauslastung auslösen.
    • Skalierungsvorgänge (Erhöhungen von numberOfClusters ohne andere Änderungen) platzieren Arbeitslasten nur auf neuen Clustern und wirken sich nicht auf vorhandene Platzierungen aus.
  • Clusteränderungen, einschließlich:
    • Ein neues Cluster, das berechtigt wird, kann die Platzierung auslösen, wenn es die Platzierungsrichtlinie erfüllt, z. B. eine PickAll-Richtlinie.
    • Ein Cluster mit einer Platzierung wird aus der Flotte entfernt. Je nach Richtlinie versucht der Scheduler, alle betroffenen Workloads auf verbleibenden Clustern zu platzieren, ohne vorhandene Platzierungen zu beeinträchtigen.

Nur Ressourcenänderungen (das Aktualisieren der Ressourcen oder das Aktualisieren des ResourceSelector Objekts ClusterResourcePlacement) werden schrittweise in vorhandenen Platzierungen eingeführt, aber die Neuplanung der Workload wird nicht ausgelöst.

Nächste Schritte