Freigeben über


Verwenden von Azure Kubernetes Fleet Manager ResourcePlacement zum Bereitstellen von namespacebezogenen Ressourcen in mehreren Clustern (Vorschau)

In diesem Artikel wird beschrieben, wie Sie Azure Kubernetes Fleet Manager ResourcePlacement verwenden, um Namespace-umfassende Ressourcen in Clustern innerhalb einer Flotte bereitzustellen.

Von Bedeutung

Azure Kubernetes Fleet Manager Preview-Features sind auf Self-Service-, Opt-In-Basis verfügbar. Vorschauversionen werden „im Istzustand“ und „wie verfügbar“ bereitgestellt und sind von den Service Level Agreements und der eingeschränkten Garantie ausgeschlossen. Azure Kubernetes Fleet Manager Previews werden teilweise vom Kundensupport auf Best-Effort-Basis abgedeckt. Daher sind diese Funktionen nicht für die Verwendung in der Produktion vorgesehen.

Voraussetzungen

Das Einrichten eines Namespaces über die Mitgliedscluster hinweg

Bevor Sie die Namespace-bezogenen Ressourcen mit ResourcePlacement bereitstellen können, muss der Zielnamespace in den Memberclustern vorhanden sein. In diesem Beispiel wird gezeigt, wie Sie einen Namespace auf dem Hubcluster erstellen und ihn mithilfe von ClusterResourcePlacement auf die Mitgliedscluster verteilen.

Hinweis

Im folgenden Beispiel wird die placement.kubernetes-fleet.io/v1beta1 API-Version verwendet. Das selectionScope: NamespaceOnly Feld ist ein Vorschaufeature, das in v1beta1 verfügbar ist und in der stabilen v1-API nicht verfügbar ist.

  1. Erstellen Sie einen Namespace im Hubcluster:

    kubectl create namespace my-app
    
  2. Erstellen Sie ein ClusterResourcePlacement Objekt, um den Namespace an alle Membercluster zu verteilen. Speichern Sie das folgende YAML in einer Datei mit dem Namen namespace-crp.yaml:

    apiVersion: placement.kubernetes-fleet.io/v1beta1
    kind: ClusterResourcePlacement
    metadata:
      name: my-app-namespace
    spec:
      resourceSelectors:
        - group: ""
          kind: Namespace
          name: my-app
          version: v1
          selectionScope: NamespaceOnly
      policy:
        placementType: PickAll
    
  3. Wenden Sie ClusterResourcePlacement auf den Hubcluster an:

    kubectl apply -f namespace-crp.yaml
    
  4. Überprüfen Sie, ob der Namespace erfolgreich weitergegeben wurde:

    kubectl get clusterresourceplacement my-app-namespace
    

    Ihre Ausgabe sollte etwa folgendem Beispiel entsprechen:

    NAME                GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    my-app-namespace    1     True        1               True        1               15s
    

Verwenden von ResourcePlacement zum Platzieren von Namespace-bezogenen Ressourcen

Das ResourcePlacement Objekt wird innerhalb eines Namespaces im Hub-Cluster erstellt und verwendet, um bestimmte Namespace-beschränkte Ressourcen an Membercluster zu verteilen. In diesem Beispiel wird veranschaulicht, wie ConfigMaps mithilfe des ResourcePlacement Objekts mit einer PickFixed Platzierungsrichtlinie an bestimmte Membercluster weitergegeben wird.

Weitere Informationen finden Sie unter Namespace-bezogene Ressourcenplatzierung mit dem Azure Kubernetes Fleet Manager ResourcePlacement.

  1. Erstellen Sie ConfigMaps im Namespace im Hub-Cluster. Diese ConfigMaps werden an die ausgewählten Mitglieder-Cluster weitergeleitet.

    kubectl create configmap app-config \
      --from-literal=environment=production \
      --from-literal=log-level=info \
      -n my-app
    
    kubectl create configmap feature-flags \
      --from-literal=new-ui=enabled \
      --from-literal=api-v2=disabled \
      -n my-app
    
  2. Erstellen Sie ein ResourcePlacement Objekt, um die ConfigMaps zu verteilen. Speichern Sie das folgende YAML in einer Datei mit dem Namen app-configs-rp.yaml:

    apiVersion: placement.kubernetes-fleet.io/v1beta1
    kind: ResourcePlacement
    metadata:
      name: app-configs
      namespace: my-app
    spec:
      resourceSelectors:
        - group: ""
          kind: ConfigMap
          version: v1
          name: app-config
        - group: ""
          kind: ConfigMap
          version: v1
          name: feature-flags
      policy:
        placementType: PickFixed
        clusterNames:
          - membercluster1
          - membercluster2
    

    Hinweis

    Ersetzen Sie membercluster1 und membercluster2 durch die tatsächlichen Namen Ihrer Cluster. Sie können verfügbare Membercluster mithilfe von kubectl get memberclusters.

  3. Wenden Sie ResourcePlacement auf den Hub-Cluster an:

    kubectl apply -f app-configs-rp.yaml
    
  4. Überprüfen Sie den Fortschritt der Ressourcenverteilung:

    kubectl get resourceplacement app-configs -n my-app
    

    Ihre Ausgabe sollte etwa folgendem Beispiel entsprechen:

    NAME          GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    app-configs   1     True        1               True        1               20s
    
  5. Zeigen Sie die Details des Platzierungsobjekts an:

    kubectl describe resourceplacement app-configs -n my-app
    

    Ihre Ausgabe sollte etwa folgendem Beispiel entsprechen:

    Name:         app-configs
    Namespace:    my-app
    Labels:       <none>
    Annotations:  <none>
    API Version:  placement.kubernetes-fleet.io/v1beta1
    Kind:         ResourcePlacement
    Metadata:
      Creation Timestamp:  2025-11-13T22:08:12Z
      Finalizers:
        kubernetes-fleet.io/crp-cleanup
        kubernetes-fleet.io/scheduler-cleanup
      Generation:        1
      Resource Version:  12345
      UID:               cec941f1-e48a-4045-b5dd-188bfc1a830f
    Spec:
      Policy:
        Cluster Names:
          membercluster1
          membercluster2
        Placement Type:  PickFixed
      Resource Selectors:
        Group:                 
        Kind:                  ConfigMap
        Name:                  app-config
        Version:               v1
        Group:                 
        Kind:                  ConfigMap
        Name:                  feature-flags
        Version:               v1
      Revision History Limit:  10
      Strategy:
        Type:  RollingUpdate
    Status:
      Conditions:
        Last Transition Time:   2025-11-13T22:08:12Z
        Message:                found all cluster needed as specified by the scheduling policy, found 2 cluster(s)
        Observed Generation:    1
        Reason:                 SchedulingPolicyFulfilled
        Status:                 True
        Type:                   ResourcePlacementScheduled
        Last Transition Time:   2025-11-13T22:08:12Z
        Message:                All 2 cluster(s) start rolling out the latest resource
        Observed Generation:    1
        Reason:                 RolloutStarted
        Status:                 True
        Type:                   ResourcePlacementRolloutStarted
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                No override rules are configured for the selected resources
        Observed Generation:    1
        Reason:                 NoOverrideSpecified
        Status:                 True
        Type:                   ResourcePlacementOverridden
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                Works(s) are succcesfully created or updated in 2 target cluster(s)' namespaces
        Observed Generation:    1
        Reason:                 WorkSynchronized
        Status:                 True
        Type:                   ResourcePlacementWorkSynchronized
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                The selected resources are successfully applied to 2 cluster(s)
        Observed Generation:    1
        Reason:                 ApplySucceeded
        Status:                 True
        Type:                   ResourcePlacementApplied
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                The selected resources in 2 cluster(s) are available now
        Observed Generation:    1
        Reason:                 ResourceAvailable
        Status:                 True
        Type:                   ResourcePlacementAvailable
      Observed Resource Index:  0
      Placement Statuses:
        Cluster Name:  membercluster1
        Conditions:
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Successfully scheduled resources for placement in "membercluster1": picked by scheduling policy
          Observed Generation:    1
          Reason:                 Scheduled
          Status:                 True
          Type:                   Scheduled
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Detected the new changes on the resources and started the rollout process
          Observed Generation:    1
          Reason:                 RolloutStarted
          Status:                 True
          Type:                   RolloutStarted
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                No override rules are configured for the selected resources
          Observed Generation:    1
          Reason:                 NoOverrideSpecified
          Status:                 True
          Type:                   Overridden
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All of the works are synchronized to the latest
          Observed Generation:    1
          Reason:                 AllWorkSynced
          Status:                 True
          Type:                   WorkSynchronized
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are applied
          Observed Generation:    1
          Reason:                 AllWorkHaveBeenApplied
          Status:                 True
          Type:                   Applied
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are available
          Observed Generation:    1
          Reason:                 AllWorkAreAvailable
          Status:                 True
          Type:                   Available
        Observed Resource Index:  0
        Cluster Name:             membercluster2
        Conditions:
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Successfully scheduled resources for placement in "membercluster2": picked by scheduling policy
          Observed Generation:    1
          Reason:                 Scheduled
          Status:                 True
          Type:                   Scheduled
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Detected the new changes on the resources and started the rollout process
          Observed Generation:    1
          Reason:                 RolloutStarted
          Status:                 True
          Type:                   RolloutStarted
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                No override rules are configured for the selected resources
          Observed Generation:    1
          Reason:                 NoOverrideSpecified
          Status:                 True
          Type:                   Overridden
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All of the works are synchronized to the latest
          Observed Generation:    1
          Reason:                 AllWorkSynced
          Status:                 True
          Type:                   WorkSynchronized
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are applied
          Observed Generation:    1
          Reason:                 AllWorkHaveBeenApplied
          Status:                 True
          Type:                   Applied
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are available
          Observed Generation:    1
          Reason:                 AllWorkAreAvailable
          Status:                 True
          Type:                   Available
        Observed Resource Index:  0
      Selected Resources:
        Kind:       ConfigMap
        Name:       app-config
        Namespace:  my-app
        Version:    v1
        Kind:       ConfigMap
        Name:       feature-flags
        Namespace:  my-app
        Version:    v1
    Events:
      Type    Reason                     Age   From                            Message
      ----    ------                     ----  ----                            -------
      Normal  PlacementRolloutStarted       37s   placement-controller  Started rolling out the latest resources
      Normal  PlacementOverriddenSucceeded  36s   placement-controller  Placement has been successfully overridden
      Normal  PlacementWorkSynchronized     36s   placement-controller  Work(s) have been created or updated successfully for the selected cluster(s)
      Normal  PlacementApplied              36s   placement-controller  Resources have been applied to the selected cluster(s)
      Normal  PlacementAvailable            36s   placement-controller  Resources are available on the selected cluster(s)
      Normal  PlacementRolloutCompleted     36s   placement-controller  Placement has finished the rollout process and reached the desired status
    

Überprüfen von Ressourcen in Mitglieder-Clustern

Sie können überprüfen, ob die ConfigMaps erfolgreich an die Membercluster weitergegeben wurden.

  1. Rufen Sie die Zugangsdaten für einen Ihrer Mitglieds-Cluster ab:

    az aks get-credentials --resource-group <resource-group> --name membercluster1
    
  2. Überprüfen Sie, ob der Namespace vorhanden ist:

    kubectl get namespace my-app
    
  3. Stellen Sie sicher, dass die ConfigMaps im Namespace vorhanden sind:

    kubectl get configmap -n my-app
    

    Ihre Ausgabe sollte beide ConfigMaps anzeigen:

    NAME             DATA   AGE
    app-config       2      2m
    feature-flags    2      2m
    
  4. Anzeigen des Inhalts einer ConfigMap:

    kubectl describe configmap app-config -n my-app
    

Bereinigen von Ressourcen

Wenn Sie die ResourcePlacement Objekte nicht mehr verwenden möchten, können Sie sie mit dem kubectl delete Befehl löschen:

kubectl delete resourceplacement app-configs -n my-app

Um auch den Namespace ClusterResourcePlacement zu entfernen:

kubectl delete clusterresourceplacement my-app-namespace

So entfernen Sie den Namespace und alle darin enthaltenen Ressourcen aus dem Hubcluster:

kubectl delete namespace my-app

Weitere Informationen zur Ressourcenplatzierung, die an Namespaces gebunden ist, finden Sie in den nachfolgenden Ressourcen.