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
Azure Kubernetes Fleet Manager-Ressourcenplatzierung ermöglicht es Ihnen, clusterweite Ressourcen – einschließlich Namespaces und ihrer untergeordneten Ressourcen – über mehrere Cluster in Ihrer Flotte hinweg zu verteilen und zu synchronisieren. Dieses Feature vereinfacht Multiclusterbereitstellungen, indem eine konsistente Ressourcenkonfiguration in Ihrer Infrastruktur sichergestellt wird, der manuelle Aufwand reduziert und Sie komplexe Workloads im Großen und Ganzen mit einer einzigen Wahrheitsquelle verwalten können. In diesem Artikel wird erläutert, wie ClusterResourcePlacement verwendet wird, um einen Namespace und seine Workloads auf Mitgliedscluster zu verteilen.
Informationen zum Verteilen einzelner Ressourcen innerhalb eines Namespace finden Sie in der Dokumentation zur Ressourcenplatzierung im Namespacebereich.
Sie können die Schritte in diesem Artikel entweder über das Azure Portal oder die Azure CLI ausführen.
Hinweis
Sie können die Ressourcenplatzierung von Fleet Manager für AKS und für Azure Arc aktivierte Kubernetes-Cluster verwenden.
Bevor Sie anfangen
- Wenn Sie nicht über ein Azure-Konto verfügen, erstellen Sie ein kostenloses Konto , bevor Sie beginnen.
- Lesen Sie die konzeptionelle Übersicht über die Ressourcenplatzierung , um die in diesem Artikel verwendeten Konzepte und Terminologie zu verstehen.
- Sie benötigen einen Flottenmanager mit einem Hubcluster und Mitgliedsclustern. Wenn Sie noch keine haben, lesen Sie bitte Erstellen einer Azure Kubernetes Fleet Manager-Ressource und Beitritt zu Mitgliedsclustern mithilfe der Azure CLI.
- Sie benötigen Zugriff auf die Kubernetes-API des Hubclusters. Wenn Sie keinen Zugriff haben, lesen Sie Zugriff auf die Kubernetes-API für einen Azure Kubernetes Fleet Manager-Hubcluster.
Verteilen Sie einen Namespace und seine Ressourcen auf die Mitgliedscluster
Verwenden Sie das einfache Szenario mit einem Deployment und Service für die Bereitstellung auf allen Clustern der Flotte. Erstellen Sie einen Namespace auf Ihrem Fleet Manager-Hubcluster, fügen Sie ihm die Workloads hinzu und verwenden Sie dann ClusterResourcePlacement, um den Namespace und seinen gesamten Inhalt mithilfe der PickAll-Platzierungsrichtlinie auf alle Member-Cluster zu verteilen.
Legen Sie die folgenden Umgebungsvariablen für Ihre Abonnement-ID, Ressourcengruppe und Kubernetes Fleet-Ressource fest:
export SUBSCRIPTION_ID=<subscription-id> export GROUP=<resource-group-name> export FLEET=<fleet-name>Legen Sie das standardmäßige Azure-Abonnement mithilfe des Befehls [
az account set][az-account-set] fest:az account set \ --subscription ${SUBSCRIPTION_ID}Rufen Sie die Kubeconfig-Datei des Kubernetes Fleet-Hubclusters mithilfe des Befehls [
az fleet get-credentials][az-fleet-get-credentials] ab:az fleet get-credentials \ --resource-group ${GROUP} \ --name ${FLEET}Die Ausgabe sollte etwa wie folgt aussehen.
Merged "hub" as current context in /home/fleet/.kube/configHinweis
Wenn Sie einen Fehler vom Typ
InvalidHubOperationmit der Meldung erhalten, dass die Flotte hublos ist, fügen Sie einen Hubcluster hinzu. Weitere Informationen finden Sie unter Hub-Clustertyp aktualisieren.Erstellen Sie einen Namespace im Hubcluster.
kubectl create namespace test-appSpeichern Sie das folgende YAML als
test-workload.yaml.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: mcr.microsoft.com/azurelinux/base/nginx:1.28@sha256:3352a36cbcab4708883a3e77b64f64159e11e1aab358c010e1c4e465dbfb4f57 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx-service namespace: test-app spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancerStellen Sie die Testarbeitslast mithilfe von
kubectlim Fleet Manager-Hubcluster bereit.kubectl apply -f test-workload.yamlSpeichern Sie das folgende YAML als
crp-distribute-workload.yaml.apiVersion: placement.kubernetes-fleet.io/v1 kind: ClusterResourcePlacement metadata: name: distribute-test-app spec: resourceSelectors: - group: "" kind: Namespace version: v1 name: test-app policy: placementType: PickAllWenden Sie das Platzierungsmanifest auf den Fleet Manager-Hubcluster an.
kubectl apply -f crp-distribute-workload.yamlHinweis
Die Bereitstellung der Ressource beginnt sofort, sobald das Manifest angewendet wird. Es wird eine implizite
RollingUpdateStrategie verwendet. Informationen dazu, wie Sie zusätzliche Kontrolle über das Rollout haben, finden Sie unter Definieren einer Rolloutstrategie für die Ressourcenplatzierung.Überprüfen Sie den Fortschritt der Ressourcenplatzierung.
kubectl get clusterresourceplacement distribute-test-app
Ihre Ausgabe sollte etwa folgendem Beispiel entsprechen:
NAME GEN SCHEDULED SCHEDULEDGEN APPLIED APPLIEDGEN AGE
distribute-test-app 2 True 2 True 2 10s
- Details der Platzierung anzeigen.
kubectl describe clusterresourceplacement distribute-test-app
Ihre Ausgabe sollte etwa folgendem Beispiel entsprechen:
Name: distribute-test-app
Namespace:
Labels: <none>
Annotations: <none>
API Version: placement.kubernetes-fleet.io/v1
Kind: ClusterResourcePlacement
Metadata:
Creation Timestamp: 2024-04-01T18:55:31Z
Finalizers:
kubernetes-fleet.io/crp-cleanup
kubernetes-fleet.io/scheduler-cleanup
Generation: 2
Resource Version: 6949
UID: 815b1d81-61ae-4fb1-a2b1-06794be3f986
Spec:
Policy:
Placement Type: PickAll
Resource Selectors:
Group:
Kind: Namespace
Name: test-app
Version: v1
Revision History Limit: 10
Strategy:
Type: RollingUpdate
Status:
Conditions:
Last Transition Time: 2024-04-01T18:55:31Z
Message: found all the clusters needed as specified by the scheduling policy
Observed Generation: 2
Reason: SchedulingPolicyFulfilled
Status: True
Type: ClusterResourcePlacementScheduled
Last Transition Time: 2024-04-01T18:55:36Z
Message: All 3 cluster(s) are synchronized to the latest resources on the hub cluster
Observed Generation: 2
Reason: SynchronizeSucceeded
Status: True
Type: ClusterResourcePlacementSynchronized
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully applied resources to 3 member clusters
Observed Generation: 2
Reason: ApplySucceeded
Status: True
Type: ClusterResourcePlacementApplied
Observed Resource Index: 0
Placement Statuses:
Cluster Name: membercluster1
Conditions:
Last Transition Time: 2024-04-01T18:55:31Z
Message: Successfully scheduled resources for placement in membercluster1 (affinity score: 0, topology spread score: 0): picked by scheduling policy
Observed Generation: 2
Reason: ScheduleSucceeded
Status: True
Type: ResourceScheduled
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully Synchronized work(s) for placement
Observed Generation: 2
Reason: WorkSynchronizeSucceeded
Status: True
Type: WorkSynchronized
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully applied resources
Observed Generation: 2
Reason: ApplySucceeded
Status: True
Type: ResourceApplied
Cluster Name: membercluster2
Conditions:
Last Transition Time: 2024-04-01T18:55:31Z
Message: Successfully scheduled resources for placement in membercluster2 (affinity score: 0, topology spread score: 0): picked by scheduling policy
Observed Generation: 2
Reason: ScheduleSucceeded
Status: True
Type: ResourceScheduled
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully Synchronized work(s) for placement
Observed Generation: 2
Reason: WorkSynchronizeSucceeded
Status: True
Type: WorkSynchronized
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully applied resources
Observed Generation: 2
Reason: ApplySucceeded
Status: True
Type: ResourceApplied
Cluster Name: membercluster3
Conditions:
Last Transition Time: 2024-04-01T18:55:31Z
Message: Successfully scheduled resources for placement in membercluster3 (affinity score: 0, topology spread score: 0): picked by scheduling policy
Observed Generation: 2
Reason: ScheduleSucceeded
Status: True
Type: ResourceScheduled
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully Synchronized work(s) for placement
Observed Generation: 2
Reason: WorkSynchronizeSucceeded
Status: True
Type: WorkSynchronized
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully applied resources
Observed Generation: 2
Reason: ApplySucceeded
Status: True
Type: ResourceApplied
Selected Resources:
Kind: Namespace
Name: my-namespace
Version: v1
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal PlacementScheduleSuccess 108s cluster-resource-placement-controller Successfully scheduled the placement
Normal PlacementSyncSuccess 103s cluster-resource-placement-controller Successfully synchronized the placement
Normal PlacementRolloutCompleted 103s cluster-resource-placement-controller Resources have been applied to the selected clusters
Wechseln Sie im Azure-Portal zu Ihrem Flottenmanager.
Wählen Sie im Dienstmenü unter "Flottenressourcen" die Option "Namespaces>+ Erstellen" aus.
Hinweis
Wenn Flottenressourcen nicht angezeigt werden, verfügt Ihr Flottenmanager nicht über einen Hubcluster. Weitere Informationen zum Hinzufügen eines solchen Typs finden Sie unter Hub-Cluster-Typ aktualisieren.
Wählen Sie im Menü "Namespace" aus, geben Sie einen Namen ein, und wählen Sie dann "Erstellen" aus.
Nach ein paar Momenten wird die Seite aktualisiert, und der Namespace wird in der Liste der Namespaces im Fleet Manager-Hubcluster angezeigt. Es ist jetzt bereit, alle Ressourcen zu hosten, die Sie über Mitgliedercluster verteilen möchten.
Wählen Sie oben in der Namespaceliste +Create>Apply a YAML aus, und verwenden Sie die folgenden Beispiele.
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: mcr.microsoft.com/azurelinux/base/nginx:1.28@sha256:3352a36cbcab4708883a3e77b64f64159e11e1aab358c010e1c4e465dbfb4f57 ports: - containerPort: 80apiVersion: v1 kind: Service metadata: name: nginx-service namespace: test-app spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancerKopieren Sie die Beispiele und fügen Sie sie ein, und wenden Sie sie einzeln an, wie in der folgenden Abbildung gezeigt.
Der Namespace und seine Workloads sind nun zur Verteilung auf Mitgliedscluster bereit. Die Bereitstellung und der Dienst werden nicht im Fleet Manager-Hubcluster geplant.
Wählen Sie im Menü "Dienst" unter "Flottenressourcen" die Option >+ Erstellen" aus.
Konfigurieren Sie auf der Registerkarte Grundlegende Einstellungen die folgenden Optionen:
Geben Sie unter "Platzierungsdetails" einen Namen für die Platzierung ein.
Lassen Sie unter Ressourcendetails den Geltungsbereich auf clusterweit, und geben Sie die Group Version Kind (GVK) und den Namen der zu verteilenden Ressource ein. Verwenden Sie in diesem Beispiel die folgenden Werte.
group: "" kind: Namespace version: v1 name: test-appWählen Sie in Mitgliedsclusterauswahl für PlatzierungstypAlle Cluster aus.
Lassen Sie für Rollout die Strategie Rolling update ausgewählt.
Wählen Sie "Weiter" aus, um das resultierende
ClusterResourcePlacementManifest zu überprüfen. Sie können das Manifest bei Bedarf ändern, überprüfen, indem Sie die Option " Überprüfen" (Trockenlauf) verwenden, oder " Überprüfen+ erstellen" auswählen, um mit der endgültigen Bestätigung fortzufahren.Wählen Sie "Erstellen" aus, um die Verteilung des Namespace sofort zu starten.
Hinweis
Das Ressourcenrollout beginnt sofort, wenn Sie die Ressourcenplatzierung mithilfe der ausgewählten
RollingUpdateStrategie anwenden. Wenn Sie erfahren möchten, wie Sie über zusätzliche Steuerelemente für das Rollout verfügen, lesen Sie die Definition einer Rolloutstrategie für die Ressourcenplatzierung.Die Seite wird aktualisiert, und die Liste " Ressourcenplatzierungen" zeigt die neu erstellte Platzierung an. Es zeigt die Anzahl der ausgewählten Cluster und ob der Flottenplaner die Platzierungsrichtlinie erfüllen kann.
Zeigen Sie den Status des Rollouts der Platzierung an, indem Sie in der Liste den Namen der Platzierung auswählen. Wählen Sie einzelne Cluster aus, um den Ressourcenrollout für diesen Cluster anzuzeigen.
Auf den ausgewählten Kubernetes-Clustern finden Sie den Namespace, die Bereitstellung und den Dienst bereitgestellt und betriebsbereit.
Löschen Sie die Platzierung, um Ressourcen zu entfernen
Wenn Sie die Ressourcenplatzierung im Fleet Manager-Hubcluster löschen, entfernen Sie die verteilten Ressourcen aus ausgewählten Mitgliedsclustern.
kubectl delete clusterresourceplacement distribute-test-app
Wählen Sie im Dienstmenü unter Fleet ResourcesRessourcenplatzierungen aus.
Wählen Sie in der Liste "Ressourcenplatzierung" die Platzierung aus, und wählen Sie "Löschen" aus.
Überprüfen Sie auf "Löschen", ob Sie die richtige Platzierung ausgewählt haben. Wenn Sie fertig sind, wählen Sie Löschen bestätigen>Löschen aus.
Die Seite wird aktualisiert, und die Platzierung wird nicht mehr in der Liste angezeigt. Die Ressourcen werden aus Mitgliedsclustern entfernt.
Verwandte Inhalte
Weitere Informationen zur Ressourcenplatzierung finden Sie in den folgenden Ressourcen:
- Bereitstellung namespace-spezifischer Ressourcen über mehrere Cluster hinweg
- Grundlegendes zur Ausgabe des Ressourcenplatzierungsstatus.
- Intelligente clusterübergreifende Kubernetes-Ressourcenplatzierung basierend auf den Eigenschaften von Memberclustern.
- Steuern der Vertreibung und Unterbrechung der Clusterressourcenplatzierung.
- Festlegung einer Rolloutstrategie für die Platzierung von Clusterressourcen.
- Häufig gestellte Fragen zur Platzierung von Clusterressourcen.
- Open-Source KubeFleet ClusterResourcePlacement-Dokumentation.