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.
Anwendungsentwickler müssen Häufig Kubernetes-Ressourcen in mehreren Clustern in Cloud- und lokalen Umgebungen bereitstellen. Flottenoperatoren müssen die besten Cluster für Workloads häufig basierend auf Heuristiken (wie Computekosten) oder verfügbaren Ressourcen (wie Arbeitsspeicher und CPU) auswählen. Es ist mühsam, diese Kubernetes-Ressourcen manuell in mehreren Clustern zu erstellen, zu aktualisieren und nachzuverfolgen. In diesem Artikel wird erläutert, wie Sie diese Szenarien mithilfe der intelligenten Kubernetes-Ressourcenplatzierungsfunktion in Azure Kubernetes Fleet Manager behandeln können.
Fleet Manager unterstützt intelligente Ressourcenplatzierung sowohl für clusterweite (ClusterResourcePlacement) als auch für namespaceweite (ResourcePlacement) Ressourcen. Die Ressourcenplatzierungsfunktion kann Planungsentscheidungen basierend auf den folgenden Clustereigenschaften treffen:
- Anzahl der Knoten
- Kosten für Rechenleistung/Speicher in Zielmitglieds-Cluster
- Ressourcenverfügbarkeit (CPU/Arbeitsspeicher) in Zielmitgliedsclustern
Weitere Informationen zu den Konzepten in diesem Artikel finden Sie unter Cluster-bezogene Ressourcenplatzierung und namespacebezogene Ressourcenplatzierung.
Voraussetzungen
Sie benötigen ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
Sie müssen über einen Flottenmanager mit einem Hubcluster und einem oder mehreren Mitgliedsclustern verfügen. Wenn Sie keinen haben, folgen Sie der Schnellstartanleitung , um einen Flottenmanager mit einem Hubcluster zu erstellen. Nehmen Sie dann Ihre unterstützten Kubernetes-Cluster als Mitglieder auf.
Tipp
Stellen Sie sicher, dass Ihre Kubernetes-Cluster so konfiguriert sind, dass Sie die Platzierung mithilfe der Clustereigenschaften testen können, die Sie interessieren (Standort, Knotenanzahl, Ressourcen oder Kosten).
Legen Sie die folgenden Umgebungsvariablen fest:
export GROUP=<resource-group> export FLEET=<fleet-name> export MEMBERCLUSTER01=<cluster01> export MEMBERCLUSTER02=<cluster02>Sie benötigen Azure CLI, Version 2.58.0 oder höher, um diesen Artikel abzuschließen. Informationen zum Ausführen einer Installation oder eines Upgrades finden Sie unter Installieren der Azure-Befehlszeilenschnittstelle.
Wenn Sie noch keine Kubernetes-CLI (kubectl) besitzen, können Sie sie mithilfe dieses Befehls installieren:
az aks install-cliSie benötigen die
fleetAzure CLI-Erweiterung. Sie können das SDK mithilfe des folgenden Befehls installieren:az extension add --name fleetFühren Sie den Befehl
az extension updateaus, um ein Update auf die neueste Version der Erweiterung durchzuführen:az extension update --name fleetAutorisieren Sie kubectl für die Verbindung mit dem Fleet Manager Hub Cluster:
az fleet get-credentials --resource-group $GROUP --name $FLEET
Eigenschaften von Mitgliederclustern überprüfen
Rufen Sie die Bezeichnungen, Eigenschaften und Ressourcen für Ihr Member-Cluster ab, indem Sie das Hub-Cluster abfragen. Ausgabe als YAML, damit Sie die Ergebnisse lesen können.
kubectl get membercluster $MEMBERCLUSTER01 –o yaml
Die resultierende YAML-Datei enthält Details (Bezeichnungen und Eigenschaften), die Sie zum Erstellen von Platzierungsrichtlinien verwenden können. Ein Beispiel:
apiVersion: cluster.kubernetes-fleet.io/v1
kind: MemberCluster
metadata:
annotations:
...
labels:
fleet.azure.com/location: eastus2
fleet.azure.com/resource-group: resource-group
fleet.azure.com/subscription-id: 8xxxxxxx-dxxx-4xxx-bxxx-xxxxxxxxxxx8
name: cluster01
resourceVersion: "123456"
uid: 7xxxxxxx-5xxx-4xxx-bxxx-xxxxxxxxxxx4
spec:
...
status:
...
properties:
kubernetes-fleet.io/node-count:
observationTime: "2024-09-19T01:33:54Z"
value: "2"
kubernetes.azure.com/per-cpu-core-cost:
observationTime: "2024-09-19T01:33:54Z"
value: "0.073"
kubernetes.azure.com/per-gb-memory-cost:
observationTime: "2024-09-19T01:33:54Z"
value: "0.022"
resourceUsage:
allocatable:
cpu: 3800m
memory: 10320392Ki
available:
cpu: 2740m
memory: 8821256Ki
capacity:
cpu: "4"
memory: 14195208Ki
Wiederholen Sie diesen Schritt für jedes Mitgliedscluster, das Sie hinzufügen, um die Bezeichnungen und Eigenschaften zu identifizieren, die Sie in Ihrer Richtlinie verwenden können.
Vorbereiten einer Workload für die Platzierung
Veröffentlichen Sie als Nächstes eine Arbeitslast im Hubcluster, damit sie in den Mitgliedsclustern platziert werden kann.
Erstellen Sie einen Namespace für die Workload im Hubcluster.
kubectl create namespace test-appDie Beispiel-Workload kann im neuen Namespace im Hubcluster bereitgestellt werden. Da diese Kubernetes-Ressourcentypen keine Kapselung erfordern, können Sie sie ohne Änderung bereitstellen.
Speichern Sie den folgenden YAML-Code in einer Datei namens
sample-workload.yaml:apiVersion: v1 kind: Service metadata: name: nginx-service namespace: test-app spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: test-app spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.16.1 ports: - containerPort: 80Stellen Sie die Workloaddefinition auf Ihrem Hubcluster bereit:
kubectl apply -f sample-workload.yaml
Mit der bereitgestellten Workloaddefinition ist es jetzt möglich, die intelligente Platzierungsfähigkeit von Fleet Manager zu testen.
Workload-Platzierungsrichtlinien testen
Sie können die folgenden Beispiele als Leitfäden zum Schreiben eigener Ressourcenplatzierungsobjekte verwenden. Weitere Informationen finden Sie in der Dokumentation zur Ressourcenplatzierung im Clusterbereich und in der Dokumentation zur Ressourcenplatzierung im Namespacebereich.
Jedes Beispiel zeigt sowohl ClusterResourcePlacement (für Cluster-bezogene Ressourcen als auch ganze Namespaces) und ResourcePlacement (für bestimmte Namespace-bezogene Ressourcen) Varianten.
Hinweis
Um jede Beispielrichtlinie auszuprobieren, löschen Sie die vorherige ClusterResourcePlacement oder ResourcePlacement bevor Sie die nächste Richtlinie anwenden.
Platzierung basierend auf der Anzahl der Clusterknoten
Dieses Beispiel zeigt einen Eigenschaftensortierer, der die Descending-Reihenfolge verwendet. Diese Reihenfolge bedeutet, dass Fleet Manager Cluster mit höheren Knotenanzahl bevorzugt.
Der Cluster mit der höchsten Knotenanzahl erhält eine Gewichtung von 20, der Cluster mit der niedrigsten Anzahl eine Gewichtung von 0. Andere Cluster erhalten proportionale Gewichtungen, die mithilfe der Berechnungsformel für Gewichtungen berechnet werden.
ClusterResourcePlacement-Beispiel
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-demo
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: test-app
version: v1
policy:
placementType: PickN
numberOfClusters: 10
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 20
preference:
propertySorter:
name: kubernetes-fleet.io/node-count
sortOrder: Descending
ResourcePlacement-Beispiel
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ResourcePlacement
metadata:
name: rp-demo
namespace: test-app
spec:
resourceSelectors:
- group: "apps"
kind: Deployment
name: nginx-deployment
version: v1
policy:
placementType: PickN
numberOfClusters: 10
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 20
preference:
propertySorter:
name: kubernetes-fleet.io/node-count
sortOrder: Descending
Platzierung mit Bezeichnungsauswahl und Eigenschaftensortierer
In diesem Beispiel erhält ein Cluster nur eine Gewichtung, wenn er über die Bezeichnung env=prod verfügt. Wenn der Cluster diese Bezeichnungseinschränkung erfüllt, weist der Fleet Manager dem Cluster ein proportionales Gewicht basierend auf der Gesamt-CPU-Leistung des entsprechenden Mitgliedsclusters zu.
In diesem Beispiel wird veranschaulicht, wie Sie sowohl den Label-Selector als auch den Property-Sorter für preferredDuringSchedulingIgnoredDuringExecution-Affinität verwenden können. Ein Mitgliedscluster, der die Bezeichnungsauswahl nicht erfüllt, erhält keine Gewichtung. Mitgliedscluster, die die Bezeichnungsauswahl erfüllen, erhalten proportionale Gewichtungen, wie unter dem Eigenschaftensortierer angegeben.
ClusterResourcePlacement-Beispiel
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-demo
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: test-app
version: v1
policy:
placementType: PickN
numberOfClusters: 10
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 20
preference:
labelSelector:
matchLabels:
env: prod
propertySorter:
name: resources.kubernetes-fleet.io/total-cpu
sortOrder: Descending
ResourcePlacement-Beispiel
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ResourcePlacement
metadata:
name: rp-demo
namespace: test-app
spec:
resourceSelectors:
- group: "apps"
kind: Deployment
name: nginx-deployment
version: v1
policy:
placementType: PickN
numberOfClusters: 10
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 20
preference:
labelSelector:
matchLabels:
env: prod
propertySorter:
name: resources.kubernetes-fleet.io/total-cpu
sortOrder: Descending
Platzierung basierend auf Speicher- und CPU-Kernkosten
Da der Sortierer in diesem Beispiel eine Ascending Reihenfolge aufweist, bevorzugt Fleet Manager Cluster mit geringerem Arbeitsspeicher und CPU-Kernkosten. Der Cluster mit den niedrigsten Arbeitsspeicher- und CPU-Kernkosten erhält eine Gewichtung von 20, und der Cluster mit dem höchsten erhält eine Gewichtung von 0. Andere Cluster erhalten proportionale Gewichtungen, die mithilfe der Berechnungsformel für Gewichtungen berechnet werden.
ClusterResourcePlacement-Beispiel
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-demo
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: test-app
version: v1
policy:
placementType: PickN
numberOfClusters: 2
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 20
preference:
propertySorter:
name: kubernetes.azure.com/per-gb-memory-core-cost
sortOrder: Ascending
- weight: 20
preference:
propertySorter:
name: kubernetes.azure.com/per-cpu-core-cost
sortOrder: Ascending
ResourcePlacement-Beispiel
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ResourcePlacement
metadata:
name: rp-demo
namespace: test-app
spec:
resourceSelectors:
- group: "apps"
kind: Deployment
name: nginx-deployment
version: v1
policy:
placementType: PickN
numberOfClusters: 2
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 20
preference:
propertySorter:
name: kubernetes.azure.com/per-gb-memory-core-cost
sortOrder: Ascending
- weight: 20
preference:
propertySorter:
name: kubernetes.azure.com/per-cpu-core-cost
sortOrder: Ascending
Status der Platzierung ansehen
Sie können den Status einer Platzierung entweder über das Azure-Portal oder den Kubectl-Befehl anzeigen.
Details zur Anzeige des Platzierungsfortschritts:
- Für
ClusterResourcePlacementsiehe Verwendung der ClusterResourcePlacement-API zur Weitergabe von Ressourcen an Mitglieds-Cluster. - Weitere Informationen zu
ResourcePlacementfinden Sie unter Verwenden von ResourcePlacement zur Platzierung von Namespacebereich-Ressourcen.
Bereinigen von Ressourcen
So entfernen Sie eine Ressourcenplatzierung:
- Für
ClusterResourcePlacementsiehe Bereinigen von Ressourcen. - Für
ResourcePlacementsiehe Bereinigen von Ressourcen.
Nächste Schritte
- Clusterweite Ressourcenplatzierung mit ClusterResourcePlacement
- Namespacebezogene Ressourcenplatzierung mithilfe von ResourcePlacement
- Verwenden der Clusterressourcenplatzierung zum Bereitstellen von Workloads in mehreren Clustern
- Verwendung der namensraum-beschränkten Ressourcenplatzierung zur Bereitstellung von Workloads über mehrere Cluster hinweg
- Definieren einer Rolloutstrategie für eine Ressourcenzuordnung