Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für ✔️ Flottenmanager mit Hubcluster
Die Verwaltung von Kubernetes-Ressourcen über mehrere Cluster hinweg stellt sowohl Plattformadministratoren als auch Anwendungsentwicklern erhebliche Herausforderungen dar. Da Organisationen ihre Kubernetes-Infrastruktur über einen einzelnen Cluster hinaus skalieren, treten häufig Komplexitäten im Zusammenhang mit der Ressourcenverteilung, Konsistenz und manuellem Verwaltungsaufwand auf. Der traditionelle Ansatz, jeden Cluster unabhängig voneinander zu verwalten, schafft Betriebssilos, die immer schwieriger zu halten sind, wenn die Flottengröße wächst.
Plattformadministratoren müssen aus verschiedenen Gründen häufig Kubernetes-Ressourcen auf mehreren Clustern bereitstellen, darunter:
- 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 und möglicherweise fehleranfällig, Kubernetes-Ressourcen über mehrere Cluster manuell zu erstellen, zu aktualisieren und nachzuverfolgen.
In diesem Artikel erfahren Sie, wie Sie die intelligente Ressourcenplatzierungsfunktion von Fleet Manager verwenden können, um die Verteilung von Cluster- und Namespace-bezogenen Kubernetes-Ressourcen über Mitgliedscluster in einer Flotte hinweg zu verwalten.
Die Ressourcenplatzierungsfähigkeit des Flottenmanagers basiert auf dem KubeFleet CNCF-Projekt.
Übersicht über den Ressourcenplatzierungsprozess
Führen Sie die folgenden Schritte aus, um die intelligente Ressourcenplatzierung von Fleet Manager zu verwenden:
- Phasenressourcen auf Hubcluster: Verwenden Sie die fortlaufende Bereitstellung, GitOps oder eine ähnliche Methode, um die Manifeste für Ressourcenverteilungen auf dem Fleet Manager-Hubcluster anzuwenden.
- Erstellen Sie eine Ressourcenplatzierung: Erstellen Sie ein Platzierungsmanifest, das die Ressource auswählt, und definiert eine Richtlinie zum Auswählen der Membercluster, die die Ressource erhalten.
- Wenden Sie die Ressourcenplatzierung auf Hubcluster an: Wenden Sie das Platzierungsmanifest auf den Hubcluster an, um mit der Verteilung der Ressource zu beginnen.
- Flottenmanager plant Ressourcen: Flottenmanager beobachtet die Ressourcenplatzierung und den ausgewählten Umfang und führt die Verteilung der Ressourcen durch.
- Beobachten Sie die Verteilung über die Ressourcenplatzierung: Fragen Sie die Ressourcenplatzierung auf dem Hubcluster ab, um den Status der Ressource nach dem Rollout zu überprüfen.
Fleet Manager verfügt über eine Azure Portalerfahrung für die Ressourcenplatzierung, die eine visuellere Darstellung des Rollouts bietet.
Einführung der Ressourcenplatzierung im Clusterbereich
Verwenden Sie ein ClusterResourcePlacement (CRP), um eine bestimmte Gruppe von clusterbezogenen Ressourcen oder ganzen Namespaces aus dem Fleet Manager-Hubcluster auf einen oder mehrere Membercluster zu verteilen.
Wichtige Merkmale:
- Cluster-Scoped: Wählt cluster-skalierte Ressourcen oder Namespaces aus.
-
Deklarativ: verwendet die gleichen Platzierungsrichtlinien wie
ResourcePlacementfür ein einheitliches Verhalten.
Mithilfe von CRP haben Sie folgende Möglichkeiten:
- Wählen Sie aus, welche Kubernetes-Ressourcen verteilt werden sollen. Diese Ressourcen können clusterbezogene Kubernetes-Ressourcen sein, die mithilfe von Kubernetes Group Version Kind (GVK) -Verweisen oder einem Namespace definiert werden, der den Namespace und alle zugehörigen Ressourcen verteilt.
- Geben Sie Richtlinien zur Platzierung an, um Mitglieder-Cluster auszuwählen. Diese Richtlinien können Cluster explizit nach Namen auswählen oder Cluster basierend auf Clusterbeschriftungen und -eigenschaften dynamisch auswählen.
- Angeben von Rolloutstrategien zum sicheren Rollout von Updates der ausgewählten Kubernetes-Ressourcen in mehreren Zielclustern.
- Zeigen Sie den Rolloutstatus für jeden Zielcluster an.
Szenarien, die eine fein abgestimmte Kontrolle über einzelne Namespace-bezogenen Ressourcen innerhalb eines Namespaces erfordern, finden Sie unter "Namespace-bezogene Ressourcenplatzierung", die die Verteilung bestimmter Ressourcen anstelle vollständiger Namespaces ermöglicht.
Einführung der Ressourcenplatzierung im Namespace-Bereich
Verwenden Sie ein ResourcePlacement (RP), um eine bestimmte Gruppe von Ressourcen innerhalb eines bestimmten Namespaces aus dem Fleet Manager-Hubcluster auf einen oder mehrere Membercluster zu verteilen. ResourcePlacement bietet eine differenzierte Kontrolle darüber, wie bestimmte Ressourcen in einem Namespace über Membercluster verteilt werden.
Wichtige Merkmale:
-
Namespace-Bereich: Sowohl
ResourcePlacementals auch die davon ausgewählten Ressourcen existieren innerhalb desselben Namespaces. - Selektiv: Wählt bestimmte Ressourcen innerhalb des Namespaces anhand von Typ, Name oder Bezeichnungen anstelle vollständiger Namespaces aus.
-
Deklarativ: Verwendet die gleichen Platzierungsrichtlinien wie
ClusterResourcePlacementfür ein einheitliches Verhalten.
Gründe für die Verwendung von ResourcePlacement
ResourcePlacement eignet sich ideal für Szenarien, die eine präzise Kontrolle über namespacebezogene Ressourcen erfordern:
- Selektive Ressourcenverteilung: Bereitstellen bestimmter ConfigMaps, Geheimer Schlüssel oder Dienste ohne Auswirkungen auf den gesamten Namespace.
- Mehrinstanzenfähige Umgebungen: Zulassen, dass verschiedene Teams ihre Ressourcen unabhängig innerhalb freigegebener Namespaces verwalten können.
- Konfigurationsverwaltung: Verteilen von umgebungsspezifischen Konfigurationen in verschiedenen Clusterumgebungen.
- Compliance und Governance: Wenden Sie unterschiedliche Richtlinien auf verschiedene Ressourcentypen innerhalb desselben Namensraums an.
- Schrittweise Rollouts: Ressourcenaktualisierungen clusterübergreifend mithilfe von Zero-Downtime-Strategien sicher bereitstellen.
In Multiclusterumgebungen bestehen Workloads häufig aus clusterbezogenen und namespacebezogenen Ressourcen, die Sie über verschiedene Cluster verteilen müssen. Während ClusterResourcePlacement (CRP) clusterbezogene Ressourcen effektiv verwaltet, verwaltet es auch ganze Namespaces und deren Inhalte. Einige Szenarien erfordern jedoch eine granularere Kontrolle über Ressourcen mit Namespace-Bereich innerhalb vorhandener Namespaces.
ResourcePlacement (RP) behebt diese Lücke, indem Folgendes bereitgestellt wird:
- Namespaceweite Ressourcenverwaltung: Zielspezifische Ressourcen innerhalb eines Namespaces, ohne dass sich dies auf den gesamten Namespace auswirkt.
- Betriebsflexibilität: Teams können verschiedene Ressourcen innerhalb desselben Namespace unabhängig voneinander verwalten.
- Ergänzende Funktionalität: Arbeiten Sie mit CRP zusammen, um eine vollständige Multicluster-Ressourcenverwaltungslösung bereitzustellen.
Hinweis
Sie können ResourcePlacement zusammen mit ClusterResourcePlacement im Nur-Namespace-Modus verwenden. Verwenden Sie z. B. CRP, um den Namespace bereitzustellen, und verwenden Sie RP für eine differenzierte Verwaltung bestimmter Ressourcen wie umgebungsspezifische ConfigMaps oder Secrets innerhalb dieses Namespaces.
Ressourcenplatzierungskomponenten
Eine Ressourcenplatzierung besteht unabhängig vom Bereich (Cluster oder Namespace) aus den folgenden Komponenten:
-
Ressourcenselektoren: Wählen Sie die Ressourcen aus, die über
resourceSelectorseinbezogen werden sollen. -
Platzierungsrichtlinie: Definieren Sie, wie Cluster mithilfe von
placementTypeunter Verwendung eines der TypenPickAll,PickFixedoderPickNausgewählt werden. -
Rolloutstrategie: Steuern Sie, wie Ressourcen über ausgewählte Cluster hinweg unter Einbeziehung einer optionalen
strategyausgerollt werden.
Dieses Beispiel für ClusterResourcePlacement (CRP) platziert den Namespace my-app auf allen Clustern in der Flotte. Da Sie keine explizite Strategie definiert haben, verwendet der Prozess eine RollingUpdate.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: namespace-only-crp
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: my-app
version: v1
policy:
placementType: PickAll
In diesem Beispiel für ResourcePlacement (RP) wird die mit app=my-application gekennzeichnete ConfigMap im Namespace my-app in den passenden Namespace auf den beiden benannten Clustern platziert. Da Sie keine explizite Strategie definiert haben, verwendet der Prozess eine RollingUpdate.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
policy:
placementType: PickFixed
clusterNames:
- cluster1
- cluster2
Ressourcenselektoren
Wählen Sie Ressourcen aus, indem Sie innerhalb einer Platzierung eine oder mehrere resourceSelectors verwenden. Jede Ressourcenauswahl kann Folgendes angeben:
- Group, Version, Kind (GVK):Der Typ der kubernetes-Ressource, die ausgewählt werden soll.
- Name: Der Name einer bestimmten Ressource.
- Label-Selektoren: Labels, die mehrere Ressourcen zuordnen.
Namespaceauswahlbereich
Wenn Sie die Clusterbereichsplatzierung verwenden, um einen gesamten Namespace auszuwählen, verwenden Sie das selectionScope Feld, um zu steuern, ob alle untergeordneten Ressourcen in den Namespace eingeschlossen werden sollen, oder platzieren Sie einfach einen leeren Namespace.
-
Standardverhalten (wenn
selectionScopenicht angegeben): verteilt den Namespace und alle darin enthaltenen Ressourcen. -
NamespaceOnly: verteilt nur die Namespaceressource ohne Ressourcen innerhalb des Namespaces. Diese Option ist nützlich, wenn Sie mithilfe vonResourcePlacementeinzelne Ressourcen separat verwalten und gleichzeitig clusterübergreifend Namespaces erstellen möchten.
In diesem Beispiel wird gezeigt, wie nur der Namespace ohne inhalt verteilt wird.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: namespace-only-crp
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: my-app
version: v1
selectionScope: NamespaceOnly
policy:
placementType: PickAll
Dieser Ansatz ermöglicht einen Workflow, bei dem Plattformadministratoren ClusterResourcePlacement zum Einrichten von Namespaces verwenden, während Anwendungsteams ResourcePlacement für eine differenzierte Kontrolle über bestimmte Ressourcen innerhalb dieser Namespaces verwenden.
Platzierungsrichtlinie
Die Ressourcenplatzierung von Fleet Manager unterstützt die folgenden Platzierungsrichtlinientypen, um zu steuern, wie Cluster ausgewählt werden:
- PickFixed platziert Ressourcen mithilfe ihrer Clusternamen in Mitgliedsclustern.
- PickAll platziert Ressourcen 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. Sie können Cluster basierend auf Affinitäts- oder Topologie-Spreadeinschränkungen auswählen. Verwenden Sie diese Richtlinie, wenn Sie Workloads über mehrere ähnliche Cluster verteilen, um sicherzustellen, dass die Verfügbarkeit beibehalten wird.
Platzierungstyp PickFixed
Verwenden Sie PickFixed, um die Cluster anhand des Namens auszuwählen. Geben Sie Namen im clusterNames Array an.
In diesem Beispiel wird gezeigt, wie der test-deployment-Namespace auf die Mitglieds-Cluster cluster1 und cluster2 verteilt wird.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-fixed
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: test-deployment
version: v1
policy:
placementType: PickFixed
clusterNames:
- cluster1
- cluster2
In diesem Beispiel für ResourcePlacement (RP) wird die mit app: my-application gekennzeichnete ConfigMap im Namespace my-app in den passenden Namespace auf den beiden benannten Clustern platziert.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
policy:
placementType: PickFixed
clusterNames:
- cluster1
- cluster2
Platzierungstyp PickAll
Verwenden Sie PickAll, um Ressourcen auf alle Mitgliedscluster oder auf alle Cluster zu verteilen, die einem von Ihnen angegebenen Kriterium entsprechen.
Wenn Sie diesen Platzierungstyp erstellen, geben Sie die folgenden Clusteraffinitätstypen an:
- requiredDuringSchedulingIgnoredDuringExecution: Da diese Richtlinie während der Planung erforderlich ist, filtert sie das Cluster basierend auf den angegebenen Kriterien.
In diesem Beispiel wird gezeigt, wie der prod-deployment -Namespace und alle untergeordneten Ressourcen über alle mit environment: production markierten Mitgliedscluster verteilt werden.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-pickall
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: prod-deployment
version: v1
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
environment: production
In diesem Beispiel platziert ResourcePlacement (RP) die ConfigMap, die mit app: my-application in dem Namespace my-app in den entsprechenden Namespace auf allen Clustern, die mit environment: production gekennzeichnet sind:
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp-pickall
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
environment: production
Platzierungstyp PickN
Verwenden Sie PickN, um Ressourcen auf eine konfigurierbare Anzahl von Clustern basierend auf Affinitäten und Topologie-Spread-Einschränkungen zu verteilen.
Wenn Sie diesen Platzierungstyp erstellen, geben Sie die folgenden Clusteraffinitätstypen an:
- 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. Bevorzugte Affinitäten stellen die Sortierung übereinstimmener Cluster bereit.
PickN mit Affinitäten
Die Verwendung von Affinitäten mit einer PickN Platzierungsrichtlinie entspricht der Verwendung von Affinitäten beim Pod-Scheduling in einem einzelnen Kubernetes-Cluster.
Das folgende Beispiel zeigt, wie Sie eine Ressource in 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-critical-preferences
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: prod-deployment
version: v1
policy:
placementType: PickN
numberOfClusters: 3
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
weight: 20
preference:
- labelSelector:
matchLabels:
critical-level: 1
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
critical-allowed: "true"
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp-pickn-critical-preferences
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
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 Topologieausbreitungseinschränkungen
Verwenden Sie Topologie-Spread-Einschränkungen, um Platzierungen über Topologiegrenzen hinweg zu erzwingen, um Verfügbarkeitsanforderungen zu erfüllen.
Mit der whenUnsatisfiable Eigenschaft können Sie das Verhalten von Spreadeinschränkungen der Topologie konfigurieren:
- DoNotSchedule: Wenn die Einschränkung nicht erfüllt werden kann, schlägt die Platzierungsanforderung fehl.
- ScheduleAnyway: Wenn die Einschränkung nicht erfüllt werden kann, platzieren Sie Ressourcen trotzdem.
Das folgende Beispiel zeigt, wie Sie Ressourcen über mehrere Azure Regionen verteilen und versuchen, mehrere Mitgliedercluster mit unterschiedlichen Aktualisierungstagen mithilfe einer benutzerdefinierten Bezeichnung updateDayzu planen.
Wenn die Verteilung über Azure-Regionen nicht eingehalten werden kann, schlägt die Platzierung fehl. Wenn die updateDay Einschränkung nicht erfüllt ist, erfolgt die Platzierung weiterhin.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-pickn-locations-updates
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: prod-deployment
version: v1
policy:
placementType: PickN
topologySpreadConstraints:
- maxSkew: 2
topologyKey: fleet.azure.com/location
whenUnsatisfiable: DoNotSchedule
- maxSkew: 2
topologyKey: updateDay
whenUnsatisfiable: ScheduleAnyway
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp-pickn-locations-updates
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
policy:
placementType: PickN
topologySpreadConstraints:
- maxSkew: 2
topologyKey: fleet.azure.com/location
whenUnsatisfiable: DoNotSchedule
- maxSkew: 2
topologyKey: updateDay
whenUnsatisfiable: ScheduleAnyway
Weitere Informationen finden Sie in der KubeFleet-Dokumentation zu Topologie-Spread-Einschränkungen.
Auswählen von Clustern mithilfe von Bezeichnungen und Eigenschaften
Die intelligente Ressourcenplatzierung von Fleet Manager bietet eine Reihe leistungsstarker Kriterien, die Sie verwenden können, wenn Sie bestimmen, wie Cluster bei Verwendung der PickN Und PickAll Platzierungstypen ausgewählt werden sollen. In diesem Abschnitt erfahren Sie, wie Sie diese Optionen verwenden, um Richtlinien zu erstellen, die Ihren Anforderungen entsprechen.
Optionen für Platzierungsrichtlinien
In der folgenden Tabelle sind die verfügbaren Planungsrichtlinienfelder für jeden Platzierungstyp aufgeführt.
| Feld "Policy" | PickFixed | PickAll | Auswählen |
|---|---|---|---|
placementType |
✅ | ✅ | ✅ |
affinity |
❌ | ✅ | ✅ |
clusterNames |
✅ | ❌ | ❌ |
numberOfClusters |
❌ | ❌ | ✅ |
topologySpreadConstraints |
❌ | ❌ | ✅ |
Mitglieder-Cluster-Labels
Sie können die MemberCluster Ressource auf dem Hubcluster wie jede Kubernetes-Ressource bezeichnen.
Darüber hinaus fügt Fleet Manager allen Mitgliedsclustern automatisch die folgenden schreibgeschützten Labels hinzu.
| Bezeichnung | Beschreibung |
|---|---|
| fleet.azure.com/location | Region des Azure-Clusters (westus) |
| fleet.azure.com/resource-group | Azure Ressourcengruppe des Clusters (rg_prodapps_01) |
| fleet.azure.com/subscription-id | Azure-Abonnement-ID, in dem sich der Cluster befindet. Formatiert als UUID/GUID. |
| fleet.azure.com/cluster-name | Der Name des Clusters, das der Fleet-Mitglieds-Cluster-Ressource zugeordnet ist. |
| fleet.azure.com/member-name | Der Name des Fleet Manager-Mitgliedsclusternamens, der dem Cluster entspricht. |
Clustereigenschaften
Verwenden Sie die folgenden Eigenschaften als Teil von Platzierungsrichtlinien.
| Objektname | 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. |
| kubernetes.azure.com/vm-sizes/{vm-sku-name}/count | Die verfügbare Anzahl vorhandener Knoten vom Typ "vm-sku-name " im Cluster*. Beispielname der VM-SKU: NV16as_v4. * In der Vorschau über das v1beta1-API. |
| kubernetes.azure.com/vm-sizes/{vm-sku-name}/capacity | Die Anzahl potenzieller neuer Knoten vom Typ "vm-sku"-Name in der Azure-Region des Clusters*. Beispielname der VM-SKU: NV16as_v4. * In der Vorschau über das v1beta1-API. |
Kubernetes-Ressourceneinheiten stellen CPU- und Speichereigenschaften dar. Weitere Informationen finden Sie unter "Ressourceneinheiten" in Kubernetes.
Kosteneigenschaften sind Dezimalwerte, die die Kosten pro Stunde in US-Dollar für die Azure-Rechenressourcen darstellen, die von Knoten innerhalb des Clusters verwendet werden. Die Kosten basieren auf den öffentlichen Azure-Preisen.
Auswahlvergleichskriterien
Wenn Sie Clustereigenschaften in einem Richtlinienkriterium verwenden, geben Sie Folgendes an:
Name: Name der Eigenschaft, die eine der in Eigenschaften in diesem Artikel aufgeführten Eigenschaften ist.
Operator: Ein Operator, der die Bedingung zwischen der Einschränkung oder dem gewünschten Wert und dem beobachteten Wert im Cluster ausdrückt. 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(Nicht gleich): Der beobachtete Wert eines Clusters der angegebenen Eigenschaft darf nicht dem Wert in der Bedingung entsprechen, bevor er für die Ressourcenplatzierung ausgewählt werden kann.
Wenn Sie den Operator
Gt,Ge,Lt,Le,EqoderNeverwenden, muss die Liste der Werte in der Bedingung genau einen Wert aufweisen.-
Values: Eine Liste der möglichen Werte der Eigenschaft.
Flotte wertet jeden Cluster basierend auf den Eigenschaften aus, die Sie in der Bedingung angeben. Wenn ein Cluster die unter requiredDuringSchedulingIgnoredDuringExecutionaufgeführten Bedingungen nicht erfüllt, schließt Fleet den Cluster von der Ressourcenplatzierung aus.
Hinweis
Wenn ein Membercluster nicht über die in der Bedingung ausgedrückte Eigenschaft verfügt, schlägt die Bedingung automatisch fehl.
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-pickall-five-nodes
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: prod-deployment
version: v1
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- propertySelector:
matchExpressions:
- name: "kubernetes-fleet.io/node-count"
operator: Ge
values:
- "5"
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp-pickall-five-nodes
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- propertySelector:
matchExpressions:
- name: "kubernetes-fleet.io/node-count"
operator: Ge
values:
- "5"
Funktionsweise der Eigenschaftenbewertung
Bei Verwendung preferredDuringSchedulingIgnoredDuringExecutionsortiert ein Eigenschaftssortierer 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 von Ihnen angegebenen Wert berechnet.
Ein Eigenschaftensortierer besteht aus:
- Name: Name der Clustereigenschaft.
-
Sortierreihenfolge: Die Sortierreihenfolge kann entweder
AscendingoderDescendingsein. Wenn Sie die ReihenfolgeAscendingverwenden, werden Mitgliedscluster mit niedrigeren beobachteten Werten bevorzugt. Bei Verwendung derDescending-Sortierung werden Mitgliedscluster mit höherem beobachtetem Wert bevorzugt.
Weitere Informationen finden Sie in der KubeFleet-Dokumentation zur eigenschaftsbasierten Planung.
Konfigurieren der Rolloutstrategie
Die Ressourcenplatzierung von Fleet Manager verwendet eine Standardstrategie RollingUpdate , um zu steuern, wie Ressourcen an Mitgliedscluster verteilt werden.
Im folgenden Beispiel wird die Platzierung sequenziell auf jeden Mitgliedscluster verteilt, wobei zwischen Clustern mindestens unavailablePeriodSeconds gewartet wird.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-pick-all-rolling
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: prod-deployment
version: v1
policy:
placementType: PickAll
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
unavailablePeriodSeconds: 60
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp-pickall-rolling
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
policy:
placementType: PickAll
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
unavailablePeriodSeconds: 60
Der Rolloutstatus wird als erfolgreich betrachtet, wenn alle Ressourcen ordnungsgemäß auf den Cluster angewendet werden. Dieser Status vererbt nicht den Status untergeordneter Ressourcen und bestätigt daher nicht, dass Pods, die in einem Mitgliedscluster von einem Deployment erstellt wurden, bereit sind.
Weitere Informationen finden Sie in der Dokumentation zu Rolloutstrategien.
Verwenden von Tolerierungen
Sie können Mitgliedscluster genauso mit Taints versehen, wie Sie Knoten in einem Cluster mit Taints versehen.
Ressourcenplatzierungen unterstützen die Verwendung von Toleranzen, bei denen jede Toleranz aus den folgenden Feldern besteht:
-
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.ExistsoderEqual.
Jede Tolerierung wird verwendet, um einen oder mehrere spezifische Taints zu tolerieren, die auf einen MemberCluster angewendet werden. Sobald alle Taints toleriert werden, kann der Fleet Manager Ressourcen an den Mitgliedscluster verteilen.
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: test-ns
spec:
policy:
placementType: PickAll
tolerations:
- key: app-team-a
operator: Exists
resourceSelectors:
- group: ""
kind: Namespace
name: test-ns
version: v1
revisionHistoryLimit: 10
strategy:
type: RollingUpdate
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp-pickall-rolling
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
policy:
placementType: PickAll
tolerations:
- key: app-team-a
operator: Exists
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
unavailablePeriodSeconds: 60
Weitere Informationen finden Sie in der Dokumentation zu Tolerationen.
Verwenden von Umschlagressourcen
Der Fleet Manager Hub Cluster ist auch ein Kubernetes-Cluster. Sie wenden zuerst alle Ressourcen an, die Sie auf den Hubcluster verteilen möchten. Dieser Ansatz kann dazu führen:
Unbeabsichtigte Nebenwirkungen: ValidatingWebhookConfigurations, MutatingWebhookConfigurations oder Admission Controller werden im Hubcluster aktiv und können potenziell Hubclustervorgänge abfangen und beeinflussen.
Sicherheitsrisiken: RBAC-Ressourcen (Rollen, ClusterRoles, RoleBindings, ClusterRoleBindings), die für Mitgliedscluster vorgesehen sind, könnten Berechtigungen auf dem Hub-Cluster gewähren oder einschränken.
Ressourcenlimits: Für Mitgliedscluster definierte ResourceQuotas, FlowSchemas oder LimitRanges gelten für den Hub-Cluster.
Um unnötige Nebenwirkungen zu vermeiden, bietet Fleet Manager benutzerdefinierte Umschlagressourcen (ClusterResourceEnvelope und ResourceEnvelope), um Objekte umzuschließen und diese potenziellen Probleme zu vermeiden.
Sie wenden die Umschlagressource auf den Hubcluster an, aber die darin enthaltenen Ressourcen werden extrahiert und angewendet, wenn sie Mitgliedscluster erreichen.
Weitere Informationen finden Sie in der Dokumentation Umschließende Objekte.
Festlegen des Platzierungsstatus
Die Ressourcenplatzierung von Fleet Manager bietet zwei Möglichkeiten, den Status je nach Zugriffsebene und Anforderungen des Hubclusters anzuzeigen:
-
ClusterResourcePlacement-Status: Status der Platzierung direkt auf der clusterweiten
ClusterResourcePlacementRessource anzeigen. Verwenden Sie diese Einstellung, wenn Sie über Berechtigungen auf Clusterebene verfügen und den Status für eine beliebige Platzierung in der Gesamten Flotte anzeigen müssen.
-
ResourcePlacement-Status: Anzeigen des Platzierungsstatus direkt in der
ResourcePlacement-Ressource im Namespace-Bereich. Verwenden Sie diese Funktion, wenn Sie über Berechtigungen auf der Namespace-Ebene verfügen und den Status einer namespace-spezifischen Platzierung in der gesamten Flotte anzeigen müssen.
Anzeigen des ClusterResourcePlacement-Status
Sie können diese Informationen mithilfe des kubectl describe resourceplacement <rp-name> Befehls anzeigen.
kubectl describe resourceplacement place-cmap-1
-
ClusterResourcePlacementStatus (Vorschau):Anzeigen des Platzierungsstatus über eine
ClusterResourcePlacementStatus-Ressource im Namespace-Bereich. Verwenden Sie diese Ressource, wenn auf einen Namespace beschränkte Benutzer den Status der Platzierung anzeigen müssen, ohne Berechtigungen auf Clusterebene zu gewähren. Weitere Informationen finden Sie im Abschnitt "ClusterResourcePlacementStatus".
Beide Ansätze liefern 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.
ClusterResourcePlacement-Status verwenden
Das folgende Beispiel zeigt den Status direkt in einem ClusterResourcePlacement, das den Namespace test und die ConfigMap test-1 mithilfe von PickN in zwei Member-Clustern 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 clusterresourceplacement <crp-name> Befehls anzeigen.
kubectl describe clusterresourceplacement 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
ClusterResourcePlacementStatus-Ressource verwenden (Vorschau)
Die Ressource ClusterResourcePlacementStatus ist auf den Namespace beschränkt und stellt den Platzierungsstatus für ein entsprechendes clusterweites ClusterResourcePlacement-Objekt bereit. Diese Ressource ermöglicht Namespacebenutzern ohne Rechte auf Clusterebene, den Status zu lesen.
Von Bedeutung
Die ClusterResourcePlacementStatus Ressource und StatusReportingScope das Feld sind in der placement.kubernetes-fleet.io/v1beta1 API-Version als Vorschaufeature verfügbar. Sie sind in der placement.kubernetes-fleet.io/v1 API nicht verfügbar.
Um diesen Ansatz zu verwenden, konfigurieren Sie ClusterResourcePlacement mit statusReportingScope: NamespaceAccessible mithilfe der v1beta1 API.
Wenn Sie statusReportingScope auf NamespaceAccessible festlegen, können Sie nur einen Namespace-Ressourcenselektor angeben, und ihn nach dem Erstellen nicht mehr ändern.
Konfigurieren von ClusterResourcePlacementStatus
Um dieses Feature zu verwenden, geben Sie in Ihrem ClusterResourcePlacement die v1beta1-API-Version an:
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp-with-status-reporting
spec:
statusReportingScope: NamespaceAccessible
resourceSelectors:
- group: ""
kind: Namespace
name: my-app
version: v1
policy:
placementType: PickAll
Anzeige von ClusterResourcePlacementStatus
Sie können den Status mithilfe des kubectl describe Befehls anzeigen:
kubectl describe clusterresourceplacementstatuses.v1beta1.placement.kubernetes-fleet.io crp-with-status-reporting -n my-app
Die Ausgabe enthält die gleichen Statusinformationen wie die ClusterResourcePlacement, ist jedoch nur für Benutzer mit Berechtigungen auf Namespaceebene zugänglich.
Weitere Informationen finden Sie in der Dokumentation zum Verständnis des Platzierungsergebnisses.
Platzierungsänderungstrigger
Der Scheduler des Fleet Manager priorisiert die Stabilität der Platzierung vorhandener Ressourcen. Diese Priorität beschränkt die Anzahl der Änderungen, die eine Ressource entfernen und neu planen.
Die folgenden Szenarien können Platzierungsänderungen auslösen:
- Platzierungsrichtlinienänderungen in der Ressourcenplatzierung (
ClusterResourcePlacementoderResourcePlacement) können das Entfernen und Neuplanen einer Ressource auslösen.- Scale-out-Vorgänge (Erhöhen von
numberOfClustersohne sonstige Änderungen) platzieren Workloads ausschließlich auf neuen Clustern und wirken sich nicht auf bestehende Platzierungen aus.
- Scale-out-Vorgänge (Erhöhen von
- Mitgliederclusteränderungen, einschließlich:
- Ein neuer Mitgliedscluster, der geeignet wird und die Platzierungsrichtlinie erfüllt, z. B. eine
PickAll-Richtlinie. - Entfernung eines Mitgliedsclusters aus der Flotte. Je nach Richtlinie versucht der Scheduler, alle betroffenen Ressourcen auf verbleibenden Clustern zu platzieren, ohne vorhandene Platzierungen zu beeinträchtigen.
- Ein neuer Mitgliedscluster, der geeignet wird und die Platzierungsrichtlinie erfüllt, z. B. eine
Das Aktualisieren der ausgewählten Ressourcen (z. B. das Ändern eines Deployment) oder das Aktualisieren der resourceSelector in einer Ressourcenplatzierung bewirkt, dass Fleet Manager vorhandene Platzierungen schrittweise ausrollt, löst aber keine Neuplanung (d. h. ein Wechseln der ausgewählten Cluster) der Ressource aus.
Zusammenarbeit mit ResourcePlacement und ClusterResourcePlacement
Dabei ClusterResourcePlacement wird davon ausgegangen, dass Namespaces Anwendungsgrenzen darstellen, reale Verwendungsmuster sind häufig komplexer. Organisationen verwenden häufig Namespaces als Teamgrenzen und nicht als Anwendungsgrenzen, was zu mehreren Herausforderungen führt, die ResourcePlacement direkt behandelt werden:
Namespaces mit mehreren Anwendungen: In vielen Organisationen enthält ein einzelner Namespace mehrere unabhängige Anwendungen im Besitz desselben Teams. Diese Anwendungen könnten haben:
- Unterschiedliche Lebenszyklusanforderungen (eine Anwendung benötigt möglicherweise häufige Updates, während eine andere stabil bleibt).
- Verschiedene Clusterplatzierungsanforderungen (Entwicklung im Vergleich zu Produktionsanwendungen).
- Unabhängige Skalierung und Ressourcenanforderungen.
- Separate Compliance- oder Governanceanforderungen.
Individuelle Planungsentscheidungen: Viele Workloads, insbesondere KI/ML-Aufträge, erfordern individuelle Planungsentscheidungen:
- KI-Aufträge: Machine Learning-Workloads bestehen häufig aus kurzlebigen, ressourcenintensiven Aufträgen, die basierend auf der Verfügbarkeit von Clusterressourcen, der GPU-Verfügbarkeit oder der Datenlokalität geplant werden müssen.
- Batcharbeitslasten: Verschiedene Batchaufträge innerhalb desselben Namespaces können auf verschiedene Clustertypen basierend auf rechentechnischen Anforderungen ausgerichtet sein.
Vollständige Steuerung des Anwendungsteams: ResourcePlacement Bietet Anwendungsteams die direkte Kontrolle über ihre Ressourcenplatzierung, ohne dass ein Plattformteam eingreifen muss:
- Self-Service-Vorgänge: Teams können ihre eigenen Ressourcenverteilungsstrategien verwalten.
- Unabhängige Bereitstellungszyklen: Verschiedene Anwendungen innerhalb eines Namespaces können unabhängige Rolloutzeitpläne haben.
- Granulare Überschreibungsfunktionen: Teams können Ressourcenkonfigurationen pro Cluster anpassen, ohne dass dies Auswirkungen auf andere Anwendungen im Namespace hat.
Dieser granulare Ansatz stellt sicher, dass ResourcePlacement sich an verschiedene Organisationsstrukturen und Arbeitsauslastungsmuster anpassen kann, während die Einfachheit und Leistungsfähigkeit des Fleet-Scheduling-Frameworks erhalten bleibt.
Wichtige Unterschiede zwischen ResourcePlacement und ClusterResourcePlacement
Die folgende Tabelle hebt die wichtigsten Unterschiede zwischen ResourcePlacement und ClusterResourcePlacement hervor.
| Aspekt | ResourcePlacement (RP) | ClusterResourcePlacement (CRP) |
|---|---|---|
| Bereich | Nur auf Namespace-Ebene verfügbare Ressourcen | Clusterweite Ressourcen (insbesondere Namespaces und deren Inhalt) |
| Ressource | API-Objekt im Namespacebereich | API-Objekt im Clusterbereich |
| Auswahlgrenze | Beschränkt auf Ressourcen innerhalb desselben Namespaces wie das RP | Kann eine beliebige clusterweite Ressource auswählen |
| Typische Anwendungsfälle | AI/ML-Aufträge, einzelne Workloads, spezifische ConfigMaps/Secrets, die unabhängige Platzierungsentscheidungen benötigen | Anwendungsbundle, ganze Namespaces, clusterweite Richtlinien |
| Teamverantwortung | Namespacebesitzer und Entwickler | Plattformoperatoren |
Sowohl ResourcePlacement als auch ClusterResourcePlacement teilen die gleichen Kernfunktionen in Bezug auf alle anderen Aspekte, die nicht in der Unterschiedstabelle aufgeführt sind.
Beispielszenario mit ResourcePlacement und ClusterResourcePlacement
ResourcePlacement arbeitet mit ClusterResourcePlacement (CRP) zusammen, um eine vollständige Multicluster-Ressourcenverwaltungslösung bereitzustellen. Das Verständnis dieser Beziehung ist entscheidend für ein effektives Flottenmanagement.
Von Bedeutung
ResourcePlacement kann namespacenbezogene Ressourcen nur in Clustern platzieren, die bereits über den Ziel-Namespace verfügen. Verwenden Sie ClusterResourcePlacement zum Einrichten des Namespace.
Typischer Workflow:
-
Plattformadministratoren: Verwenden Sie
ClusterResourcePlacement, um Namespaces in der gesamten Flotte bereitzustellen. -
Anwendungsteams: Verwenden Sie
ResourcePlacement, um bestimmte Ressourcen innerhalb dieser eingerichteten Namespaces zu verwalten.
Die folgenden Beispiele zeigen, wie CRP und RP koordiniert werden.
Plattformadministrator: Erstellen Sie den Namespace mithilfe von ClusterResourcePlacement:
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: app-namespace-crp
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: my-app
version: v1
selectionScope: NamespaceOnly # only namespace itself is placed, no resources within the namespace
policy:
placementType: PickAll # If placement type is not PickAll, the application teams needs to know what are the clusters they can place their applications.
Anwendungsteam: Verwalten bestimmter Ressourcen innerhalb des Namespace mithilfe von ResourcePlacement:
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
policy:
placementType: PickFixed
clusterNames:
- cluster1
- cluster2
Bewährte Praktiken für ResourcePlacement und ClusterResourcePlacement
Wenn Sie ResourcePlacement mit ClusterResourcePlacement verwenden, beachten Sie die folgenden bewährten Vorgehensweisen:
-
Richten Sie zuerst Namespaces ein: Stellen Sie vor dem Erstellen von
ResourcePlacementObjekten immer Namespaces über CRP bereit. - Überwachen von Abhängigkeiten: Verwenden Sie die Flottenüberwachung, um sicherzustellen, dass CRPs auf Namespaceebene gesund sind, bevor abhängige RPs bereitgestellt werden.
- Richtlinien koordinieren: Richten Sie die CRP- und RP-Platzierungsrichtlinien aufeinander aus, um Konflikte zu vermeiden. Wenn Z. B. CRP den Namespace auf Cluster A, B und C platziert, kann RP eine beliebige Teilmenge dieser Cluster als Ziel festlegen.
- Teamgrenzen: Verwenden Sie CRP für plattformverwaltete Ressourcen (Namespaces, RBAC) und RP für anwendungsverwaltete Ressourcen (App-Konfigurationen, geheime Schlüssel).
Durch diesen koordinierten Ansatz wird sichergestellt, dass ResourcePlacement die Flexibilität bietet, die Teams benötigen, während die grundlegende Infrastruktur, die von Plattformbetreibern verwaltet wird, beibehalten wird.
Ressourcenauswahl, Platzierung und Rollout
ResourcePlacement verwendet die gleichen Platzierungsmuster wie ClusterResourcePlacement:
-
Platzierungsrichtlinie:
PickAll,PickFixedundPickNRichtlinien funktionieren für beide APIs identisch. - Rolloutstrategie: Steuern Sie, wie Updates sich über Cluster ausbreiten, mit denselben rollenden Update-Mechanismen.
-
Status und Beobachtbarkeit: Überwachen Sie den Bereitstellungsfortschritt mithilfe von
kubectl describe resourceplacement <name> -n <namespace>. - Erweiterte Features: Verwendung von Tolerationen, Ressourcenüberschreibungen, Topologie-Spreadeinschränkungen und Affinitätsregeln.
Der Hauptunterschied liegt im Ressourcenauswahlbereich . Während ClusterResourcePlacement typischerweise ganze Namespaces und deren Inhalte auswählt, bietet ResourcePlacement eine differenzierte Kontrolle über einzelne ressourcenbezogene Namespaces.
:::zone-end
Nächste Schritte
- Verwenden Sie die Ressourcenplatzierung von Fleet Manager, um Workloads in mehreren Clustern bereitzustellen.
- Verwenden von ResourcePlacement zum Bereitstellen von Namespace-bezogenen Ressourcen.
- Intelligente clusterübergreifende Platzierung von Kubernetes-Ressourcen basierend auf den Eigenschaften der Mitgliedscluster.
- Steuerung von Verdrängung und Störung bei der Ressourcenplatzierung.
- Definition einer Rolloutstrategie für eine Ressourcenplatzierung.
- Häufig gestellte Fragen zur Ressourcenplatzierung des Flottenmanagers.