Använd Azure Kubernetes Fleet Manager ResourcePlacement för att distribuera resurser med namnområdesomfång i flera kluster (förhandsversion)

Den här artikeln beskriver hur du använder Azure Kubernetes Fleet Manager ResourcePlacement för att distribuera namnområdesomfångsresurser mellan kluster i en flotta.

Viktigt!

Förhandsversionsfunktionerna i Azure Kubernetes Fleet Manager är tillgängliga via självbetjäning och opt-in. Förhandsversioner tillhandahålls "i befintligt skick" och "i mån av tillgång," och de är undantagna från servicenivåavtal och begränsad garanti. Förhandsversioner av Azure Kubernetes Fleet Manager omfattas delvis av kundsupport på bästa sätt. Därför är dessa funktioner inte avsedda för produktionsanvändning.

Förutsättningar

Upprätta namnområdet mellan medlemskluster

Innan du kan använda ResourcePlacement för att distribuera namnområdesomfångsresurser måste målnamnområdet finnas i medlemskluster. Det här exemplet visar hur du skapar ett namnområde i hubbklustret och sprider det till medlemskluster med hjälp av ClusterResourcePlacement.

Anmärkning

I följande exempel används API-versionen placement.kubernetes-fleet.io/v1beta1 . Fältet selectionScope: NamespaceOnly är en förhandsversionsfunktion som är tillgänglig i v1beta1 och är inte tillgänglig i det stabila v1-API:et.

  1. Skapa ett namnområde i hubbklustret:

    kubectl create namespace my-app
    
  2. Skapa ett ClusterResourcePlacement objekt för att sprida namnområdet till alla medlemskluster. Spara följande YAML i en fil med namnet 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. Applicera ClusterResourcePlacement på det hubbklustret.

    kubectl apply -f namespace-crp.yaml
    
  4. Kontrollera att namnområdet framgångsrikt har spridits:

    kubectl get clusterresourceplacement my-app-namespace
    

    Din utdata bör likna det följande exemplet:

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

Använd ResourcePlacement för att placera namnområdesomfångsbegränsade resurser

Objektet ResourcePlacement skapas i ett namnområde i hubbklustret och används för att sprida specifika namnområdesomfångsresurser till medlemskluster. Det här exemplet visar hur du sprider ConfigMaps till specifika medlemskluster med hjälp av ResourcePlacement objektet med en PickFixed placeringsprincip.

Mer information finns i namnområdesomfångsbaserad resursplacering med Hjälp av Azure Kubernetes Fleet Manager ResourcePlacement.

  1. Skapa ConfigMaps i namnområdet i hubbklustret. Dessa ConfigMaps sprids till de valda medlemskluster:

    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. Skapa ett ResourcePlacement objekt för att sprida ConfigMaps. Spara följande YAML i en fil med namnet 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
    

    Anmärkning

    Ersätt membercluster1 och membercluster2 med de faktiska namnen på dina medlemskluster. Du kan lista tillgängliga medlemskluster med hjälp av kubectl get memberclusters.

  3. Applicera ResourcePlacement på klusterhubben:

    kubectl apply -f app-configs-rp.yaml
    
  4. Kontrollera förloppet för resursspridningen:

    kubectl get resourceplacement app-configs -n my-app
    

    Din utdata bör likna det följande exemplet:

    NAME          GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    app-configs   1     True        1               True        1               20s
    
  5. Visa information om placeringsobjektet:

    kubectl describe resourceplacement app-configs -n my-app
    

    Din utdata bör likna det följande exemplet:

    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
    

Verifiera resurser i medlemskluster

Du kan kontrollera att ConfigMaps har spridits till medlemskluster.

  1. Hämta autentiseringsuppgifterna för ett av dina medlemskluster:

    az aks get-credentials --resource-group <resource-group> --name membercluster1
    
  2. Kontrollera att namnområdet finns:

    kubectl get namespace my-app
    
  3. Kontrollera att ConfigMaps finns i namnområdet:

    kubectl get configmap -n my-app
    

    Dina utdata bör visa båda ConfigMaps:

    NAME             DATA   AGE
    app-config       2      2m
    feature-flags    2      2m
    
  4. Visa innehållet i en ConfigMap:

    kubectl describe configmap app-config -n my-app
    

Rensa resurser

Om du inte längre vill använda objekten ResourcePlacement kan du ta bort dem med kommandot kubectl delete :

kubectl delete resourceplacement app-configs -n my-app

Ta även bort namnområdet ClusterResourcePlacement:

kubectl delete clusterresourceplacement my-app-namespace

Så här tar du bort namnområdet och alla resurser i det från hubbklustret:

kubectl delete namespace my-app

Mer information om resursplacering med namnområdesomfång finns i följande resurser: