Verwenden sie Azure Kubernetes Fleet Manager-Ressourcenplatzierung, um clusterweite Ressourcen in mehreren Clustern bereitzustellen.

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

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.

  1. 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>
    
  2. Legen Sie das standardmäßige Azure-Abonnement mithilfe des Befehls [az account set][az-account-set] fest:

    az account set \
        --subscription ${SUBSCRIPTION_ID}
    
  3. 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/config
    

    Hinweis

    Wenn Sie einen Fehler vom Typ InvalidHubOperation mit der Meldung erhalten, dass die Flotte hublos ist, fügen Sie einen Hubcluster hinzu. Weitere Informationen finden Sie unter Hub-Clustertyp aktualisieren.

  4. Erstellen Sie einen Namespace im Hubcluster.

    kubectl create namespace test-app
    
  5. Speichern 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: LoadBalancer
    
  6. Stellen Sie die Testarbeitslast mithilfe von kubectl im Fleet Manager-Hubcluster bereit.

    kubectl apply -f test-workload.yaml
    
  7. Speichern 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: PickAll
    
  8. Wenden Sie das Platzierungsmanifest auf den Fleet Manager-Hubcluster an.

    kubectl apply -f crp-distribute-workload.yaml
    

    Hinweis

    Die Bereitstellung der Ressource beginnt sofort, sobald das Manifest angewendet wird. Es wird eine implizite RollingUpdate Strategie verwendet. Informationen dazu, wie Sie zusätzliche Kontrolle über das Rollout haben, finden Sie unter Definieren einer Rolloutstrategie für die Ressourcenplatzierung.

  9. Ü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
  1. 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
  1. Wechseln Sie im Azure-Portal zu Ihrem Flottenmanager.

  2. 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.

  3. Wählen Sie im Menü "Namespace" aus, geben Sie einen Namen ein, und wählen Sie dann "Erstellen" aus.

    Screenshot des Azure Portals mit einem Namespace namens

    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.

  4. 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: 80
    
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
      namespace: test-app
    spec:
      selector:
        app: nginx
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
      type: LoadBalancer
    

    Kopieren Sie die Beispiele und fügen Sie sie ein, und wenden Sie sie einzeln an, wie in der folgenden Abbildung gezeigt.

    Screenshot des Azure-Portals, der das Dialogfeld „Mit YAML anwenden“ zeigt, das mit einer Bereitstellung ausgefüllt ist, die bereit ist, auf den Fleet Manager-Hubcluster angewendet zu werden.

    Der Namespace und seine Workloads sind nun zur Verteilung auf Mitgliedscluster bereit. Die Bereitstellung und der Dienst werden nicht im Fleet Manager-Hubcluster geplant.

  5. Wählen Sie im Menü "Dienst" unter "Flottenressourcen" die Option >+ Erstellen" aus.

  6. 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-app
      
    • Wählen Sie in Mitgliedsclusterauswahl für PlatzierungstypAlle Cluster aus.

    • Lassen Sie für Rollout die Strategie Rolling update ausgewählt.

    Screenshot des Azure Portals mit der vollständigen Registerkarte

  7. Wählen Sie "Weiter" aus, um das resultierende ClusterResourcePlacement Manifest 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.

    Screenshot des Azure Portals mit der Registerkarte

  8. Wählen Sie "Erstellen" aus, um die Verteilung des Namespace sofort zu starten.

    Screenshot des Azure Portals mit der Registerkarte

    Hinweis

    Das Ressourcenrollout beginnt sofort, wenn Sie die Ressourcenplatzierung mithilfe der ausgewählten RollingUpdate Strategie 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.

  9. 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.

    Screenshot des Azure Portals mit der Ressourcenplatzierungsliste mit einer einzelnen Ressourcenplatzierung namens distribute-test-app.

  10. 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.

    Screenshot des Azure Portals mit detaillierten Rolloutinformationen einer Ressourcenplatzierung namens distribute-test-app.

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
  1. Wählen Sie im Dienstmenü unter Fleet ResourcesRessourcenplatzierungen aus.

  2. Wählen Sie in der Liste "Ressourcenplatzierung" die Platzierung aus, und wählen Sie "Löschen" aus.

  3. Ü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.

    Screenshot des Azure Portals mit einer Ressourcenplatzierung namens

  4. Die Seite wird aktualisiert, und die Platzierung wird nicht mehr in der Liste angezeigt. Die Ressourcen werden aus Mitgliedsclustern entfernt.

Weitere Informationen zur Ressourcenplatzierung finden Sie in den folgenden Ressourcen: