Azure Kubernetes Fleet Manager ResourcePlacement gebruiken om resources met naamruimtebereik te implementeren in meerdere clusters (preview)

In dit artikel wordt beschreven hoe u Azure Kubernetes Fleet Manager ResourcePlacement gebruikt om resources met naamruimtebereik te implementeren in clusters in een vloot.

Belangrijk

Preview-functies van Azure Kubernetes Fleet Manager zijn beschikbaar op basis van selfservice, opt-in. Previews worden geleverd 'zoals het is' en 'voor zover beschikbaar' en zijn uitgesloten van de serviceovereenkomsten en beperkte garantie. Previews van Azure Kubernetes Fleet Manager worden gedeeltelijk gedekt door klantondersteuning op basis van best effort. Zodoende zijn deze functies niet bedoeld voor productiegebruik.

Vereiste voorwaarden

De naamruimte tussen lidclusters tot stand brengen

Voordat u ResourcePlacement kunt gebruiken om naamruimte-georiënteerde resources te implementeren, moet de doelnaamruimte bestaan op de lidclusters. In dit voorbeeld ziet u hoe u een naamruimte in het hubcluster maakt en deze doorgeeft aan lidclusters met behulp van ClusterResourcePlacement.

Opmerking

In het volgende voorbeeld wordt de placement.kubernetes-fleet.io/v1beta1 API-versie gebruikt. Het selectionScope: NamespaceOnly veld is een preview-functie die beschikbaar is in v1beta1 en is niet beschikbaar in de stabiele v1-API.

  1. Maak een naamruimte in het hubcluster:

    kubectl create namespace my-app
    
  2. Maak een ClusterResourcePlacement object om de naamruimte door te geven aan alle lidclusters. Sla de volgende YAML op in een bestand met de naam 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. Pas het volgende ClusterResourcePlacement toe op het hubcluster:

    kubectl apply -f namespace-crp.yaml
    
  4. Controleer of de naamruimte succesvol is doorgegeven.

    kubectl get clusterresourceplacement my-app-namespace
    

    Uw uitvoer moet er ongeveer uitzien als de uitvoer in het volgende voorbeeld:

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

ResourcePlacement gebruiken om resources met naamruimtebereik te plaatsen

Het ResourcePlacement object wordt gemaakt in een naamruimte op het hubcluster en wordt gebruikt om specifieke resources met naamruimtebereik door te geven aan lidclusters. In dit voorbeeld ziet u hoe u ConfigMaps doorgeeft aan specifieke lidclusters met behulp van het ResourcePlacement object met een PickFixed plaatsingsbeleid.

Zie voor meer informatie de plaatsing van resources binnen het naamruimtebereik met behulp van Azure Kubernetes Fleet Manager ResourcePlacement.

  1. Maak ConfigMaps in de naamruimte op het hubcluster. Deze ConfigMaps worden doorgegeven aan de geselecteerde lidclusters:

    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. Maak een ResourcePlacement object om de ConfigMaps door te geven. Sla de volgende YAML op in een bestand met de naam 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
    

    Opmerking

    Vervang membercluster1 en membercluster2 door de werkelijke namen van uw lidclusters. U kunt beschikbare lidclusters weergeven met behulp van kubectl get memberclusters.

  3. Pas het volgende ResourcePlacement toe op het hubcluster:

    kubectl apply -f app-configs-rp.yaml
    
  4. Controleer de voortgang van de resourcedoorgifte:

    kubectl get resourceplacement app-configs -n my-app
    

    Uw uitvoer moet er ongeveer uitzien als de uitvoer in het volgende voorbeeld:

    NAME          GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    app-configs   1     True        1               True        1               20s
    
  5. Bekijk de details van het plaatsingsobject:

    kubectl describe resourceplacement app-configs -n my-app
    

    Uw uitvoer moet er ongeveer uitzien als de uitvoer in het volgende voorbeeld:

    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
    

Resources op ledenclusters verifiëren

U kunt controleren of de ConfigMaps zijn doorgegeven aan de lidclusters.

  1. Haal de referenties voor een van uw lidclusters op:

    az aks get-credentials --resource-group <resource-group> --name membercluster1
    
  2. Controleer of de naamruimte bestaat:

    kubectl get namespace my-app
    
  3. Controleer of de ConfigMaps aanwezig zijn in de naamruimte:

    kubectl get configmap -n my-app
    

    In de uitvoer moeten beide ConfigMaps worden weergegeven:

    NAME             DATA   AGE
    app-config       2      2m
    feature-flags    2      2m
    
  4. De inhoud van een ConfigMap weergeven:

    kubectl describe configmap app-config -n my-app
    

De hulpbronnen opschonen

Als u de ResourcePlacement objecten niet meer wilt gebruiken, kunt u ze verwijderen met behulp van de kubectl delete opdracht:

kubectl delete resourceplacement app-configs -n my-app

Als u ook de naamruimte ClusterResourcePlacementwilt verwijderen:

kubectl delete clusterresourceplacement my-app-namespace

De naamruimte en alle resources erin verwijderen uit het hubcluster:

kubectl delete namespace my-app

Zie de volgende informatiebronnen voor meer informatie over de plaatsing van bronnen met de reikwijdte van een naamruimte: