Usare ResourcePlacement di Azure Kubernetes Fleet Manager per distribuire risorse a livello di namespace tra più cluster

Si applica a: ✔️ Fleet Manager con cluster di hub

Azure Kubernetes Fleet Manager ResourcePlacement consente di distribuire e sincronizzare singole risorse con ambito spazio dei nomi, ad esempio ConfigMaps, Distribuzioni e Servizi, in cluster specifici della flotta senza propagare un intero spazio dei nomi. Questo approccio offre un controllo granulare sugli elementi distribuiti, semplificando la gestione della configurazione multi-cluster e riducendo il sovraccarico manuale. Questo articolo spiega come usare ResourcePlacement per distribuire le risorse con ambito namespace ai cluster membri.

Per distribuire risorse con ambito di cluster o un namespace e tutte le risorse figlio contenute al suo interno, vedere Usare il posizionamento delle risorse di Azure Kubernetes Fleet Manager per distribuire risorse con ambito di cluster in più cluster.

È possibile completare i passaggi descritti in questo articolo usando il portale di Azure o il interfaccia della riga di comando di Azure.

Annotazioni

È possibile usare la funzionalità di posizionamento delle risorse di Fleet Manager con AKS e i cluster Kubernetes abilitati per Azure Arc.

Prima di iniziare

Stabilire lo spazio dei nomi tra cluster membri

Prima di poter usare ResourcePlacement per distribuire le risorse con ambito spazio dei nomi, lo spazio dei nomi di destinazione deve esistere nei cluster membri.

Verrà ora illustrato come creare uno spazio dei nomi nel cluster hub di Fleet Manager e distribuirlo ai cluster membri usando un oggetto ClusterResourcePlacement. Si assicura che venga distribuito solo lo spazio dei nomi aggiungendo selectionScope: NamespaceOnly al resourceSelector.

  1. Impostare le variabili di ambiente seguenti per l'ID sottoscrizione, il gruppo di risorse e la risorsa Flotta Kubernetes:

    export SUBSCRIPTION_ID=<subscription-id>
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    
  2. Impostare la sottoscrizione Azure predefinita usando il comando az account set:

    az account set \
        --subscription ${SUBSCRIPTION_ID}
    
  3. Ottenere il file kubeconfig del cluster hub di Flotta Kubernetes usando il comando az fleet get-credentials:

    az fleet get-credentials \
        --resource-group ${GROUP} \
        --name ${FLEET}
    

    Il risultato dovrebbe essere simile al seguente esempio.

    Merged "hub" as current context in /home/fleet/.kube/config
    

    Annotazioni

    Se si riceve un errore di tipo InvalidHubOperation con un messaggio che indica che la flotta è priva di hub, aggiungi un cluster di hub. Per altre informazioni, vedere Aggiornare il tipo di cluster hub.

  4. Creare un namespace nel cluster hub:

    kubectl create namespace test-app
    
  5. Salvare il codice YAML seguente come crp-distribute-namespace-only.yaml.

    apiVersion: placement.kubernetes-fleet.io/v1
    kind: ClusterResourcePlacement
    metadata:
      name: distribute-test-app-namespace
    spec:
      resourceSelectors:
        - group: ""
          kind: Namespace
          name: test-app
          version: v1
          selectionScope: NamespaceOnly
      policy:
        placementType: PickAll
    
  6. Applica il manifest di posizionamento al cluster hub di Fleet Manager.

    kubectl apply -f crp-distribute-namespace-only.yaml
    

    Annotazioni

    La distribuzione del namespace inizia immediatamente quando si applica il posizionamento delle risorse tramite una strategia implicita RollingUpdate. Per informazioni su come avere controlli aggiuntivi sull'implementazione, vedere Definizione di una strategia di implementazione per il posizionamento delle risorse.

  7. Verifica che lo spazio dei nomi sia stato distribuito correttamente:

    kubectl get clusterresourceplacement distribute-test-app-namespace
    

    L'output dovrebbe essere simile all'esempio seguente:

    NAME                            GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    distribute-test-app-namespace   1     True        1               True        1               2m45s
    
  1. Nel portale di Azure passare a Fleet Manager.

  2. Nel menu del servizio, in Risorse della flotta, selezionare Namespace>+ Crea.

    Annotazioni

    Se le risorse della flotta non sono visualizzate, Fleet Manager non ha un cluster hub. Per altre informazioni su come aggiungerne una, vedere Aggiornare il tipo di cluster hub.

  3. Nel menu selezionare Spazio dei nomi, immettere un nome e quindi selezionare Crea.

    Screenshot del portale di Azure che mostra uno spazio dei nomi denominato test-app creato nel cluster hub di Fleet Manager.

    Dopo alcuni istanti, la pagina viene aggiornata e lo spazio dei nomi viene visualizzato nell'elenco degli spazi dei nomi nel cluster hub di Fleet Manager. È ora pronto per ospitare tutte le risorse da distribuire tra cluster membri.

  4. Nel menu Servizio, in Risorse flotta, selezionare Posizionamenti risorse>+ Crea.

  5. Nella scheda Informazioni di base configurare le opzioni seguenti:

    • In Dettagli del posizionamento, immettere un nome per il posizionamento.

    • In Dettagli risorsa immettere il tipo di versione del gruppo (GVK) e il nome della risorsa da distribuire. In questo esempio usare i valori seguenti.

      group: ""
      kind: Namespace
      version: v1          
      name: test-app
      selectionScope: NamespaceOnly
      
    • In Selezione del cluster membro, scegli Tutti i cluster.

    • Per Rollout, lascia selezionata la strategia Aggiornamento progressivo.

    Screenshot del portale di Azure che mostra la scheda Informazioni di base completa per il posizionamento delle risorse con ambito cluster per uno spazio dei nomi denominato test-app.

  6. Selezionare Avanti per esaminare il manifesto risultante ClusterResourcePlacement . È possibile modificare il manifesto, se necessario, convalidarlo usando l'opzione Convalida (esecuzione secca) oppure selezionare Rivedi e crea per procedere alla conferma finale.

    Screenshot del portale di Azure che mostra la scheda Rivedi YAML con una convalida di esecuzione asciutta superata per il posizionamento delle risorse con ambito cluster per uno spazio dei nomi denominato test-app.

  7. Selezionare Crea per avviare immediatamente la distribuzione dello spazio dei nomi.

    Schermata del portale di Azure che mostra la scheda

    Annotazioni

    La distribuzione della risorsa namespace inizia non appena si applica il posizionamento delle risorse utilizzando la strategia RollingUpdate selezionata. Per altre informazioni su come controllare l'implementazione, vedere Definizione di una strategia di implementazione per il posizionamento delle risorse.

  8. La pagina viene aggiornata e l'elenco Posizionamento risorse visualizza il posizionamento appena creato. Mostra il numero di cluster selezionati e se lo scheduler della flotta può soddisfare i criteri di posizionamento.

    Screenshot del portale di Azure che mostra l'elenco di posizionamento delle risorse con una singola posizione delle risorse denominata distribute-test-app.

  9. Visualizzare lo stato di implementazione del posizionamento selezionando il nome del posizionamento nell'elenco. Selezionare singoli cluster per visualizzare l'implementazione della risorsa in tale cluster.

    Screenshot del portale di Azure che mostra le informazioni dettagliate sull'implementazione di un posizionamento delle risorse denominato distribute-test-app.

Nei cluster Kubernetes selezionati si trova lo spazio dei nomi distribuito.

Distribuire le risorse con ambito del namespace ai cluster membri

Usare lo scenario semplice di distribuzione di due ConfigMap risorse tra i cluster selezionati nella flotta. È necessario creare l'oggetto ResourcePlacement nello spazio dei nomi come risorse da distribuire.

  1. Crea due risorse ConfigMap nel namespace del cluster hub.

    kubectl create configmap app-config \
      --from-literal=environment=production \
      --from-literal=log-level=info \
      -n test-app
    
    kubectl create configmap feature-flags \
      --from-literal=new-ui=enabled \
      --from-literal=api-v2=disabled \
      -n test-app
    
  2. Creare un ResourcePlacement oggetto per propagare ConfigMaps. Salvare il codice YAML seguente in un file denominato app-configs-rp.yaml:

    apiVersion: placement.kubernetes-fleet.io/v1beta1
    kind: ResourcePlacement
    metadata:
      name: distribute-app-configs
      namespace: test-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
    

    Annotazioni

    Sostituire membercluster1 e membercluster2 con i nomi effettivi dei cluster membri. Usare kubectl get memberclusters per elencare i cluster membri disponibili.

  3. Applicare l'oggetto ResourcePlacement al cluster hub:

    kubectl apply -f app-configs-rp.yaml
    
  4. Controllare lo stato di avanzamento della propagazione delle risorse:

    kubectl get resourceplacement distribute-app-configs -n test-app
    

    Il risultato dovrebbe essere simile al seguente esempio.

    NAME                     GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    distribute-app-configs   1     True        1               True        1               3m14s
    
  5. Visualizzare i dettagli del posizionamento.

    kubectl describe resourceplacement distribute-app-configs -n test-app
    

    Il risultato dovrebbe essere simile al seguente esempio.

    Name:         distribute-app-configs
    Namespace:    test-app
    Labels:       <none>
    Annotations:  <none>
    API Version:  placement.kubernetes-fleet.io/v1
    Kind:         ResourcePlacement
    Metadata:
      Creation Timestamp:  2026-07-24T05:18:56Z
      Finalizers:
        kubernetes-fleet.io/crp-cleanup
        kubernetes-fleet.io/scheduler-cleanup
      Generation:        1
      Resource Version:  1306099
      UID:               3a7b7f54-9ef0-4a2d-b8a6-62258ed63f78
    Spec:
      Policy:
        Cluster Names:
          aks-place-member-01-fm
          aks-place-member-02-fm
        Placement Type:  PickFixed
      Resource Selectors:
        Group:
        Kind:                  ConfigMap
        Name:                  app-config
        Selection Scope:       NamespaceWithResources
        Version:               v1
        Group:
        Kind:                  ConfigMap
        Name:                  feature-flags
        Selection Scope:       NamespaceWithResources
        Version:               v1
      Revision History Limit:  10
      Status Reporting Scope:  ClusterScopeOnly
      Strategy:
        Type:  RollingUpdate
    Status:
      Conditions:
        Last Transition Time:   2026-07-24T05:18:56Z
        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:   2026-07-24T05:18:56Z
        Message:                All 2 cluster(s) start rolling out the latest resource
        Observed Generation:    1
        Reason:                 RolloutStarted
        Status:                 True
        Type:                   ResourcePlacementRolloutStarted
        Last Transition Time:   2026-07-24T05:18:56Z
        Message:                No override rules are configured for the selected resources
        Observed Generation:    1
        Reason:                 NoOverrideSpecified
        Status:                 True
        Type:                   ResourcePlacementOverridden
        Last Transition Time:   2026-07-24T05:18:56Z
        Message:                Works(s) are successfully created or updated in 2 target cluster(s)' namespaces
        Observed Generation:    1
        Reason:                 WorkSynchronized
        Status:                 True
        Type:                   ResourcePlacementWorkSynchronized
        Last Transition Time:   2026-07-24T05:18:56Z
        Message:                The selected resources are successfully applied to 2 cluster(s)
        Observed Generation:    1
        Reason:                 ApplySucceeded
        Status:                 True
        Type:                   ResourcePlacementApplied
        Last Transition Time:   2026-07-24T05:18:56Z
        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:  aks-place-member-01-fm
        Conditions:
          Last Transition Time:   2026-07-24T05:18:56Z
          Message:                Successfully scheduled resources for placement in "aks-place-member-01-fm": picked by scheduling policy
          Observed Generation:    1
          Reason:                 Scheduled
          Status:                 True
          Type:                   Scheduled
          Last Transition Time:   2026-07-24T05:18:56Z
          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:   2026-07-24T05:18:56Z
          Message:                No override rules are configured for the selected resources
          Observed Generation:    1
          Reason:                 NoOverrideSpecified
          Status:                 True
          Type:                   Overridden
          Last Transition Time:   2026-07-24T05:18:56Z
          Message:                All of the works are synchronized to the latest
          Observed Generation:    1
          Reason:                 AllWorkSynced
          Status:                 True
          Type:                   WorkSynchronized
          Last Transition Time:   2026-07-24T05:18:56Z
          Message:                All corresponding work objects are applied
          Observed Generation:    1
          Reason:                 AllWorkHaveBeenApplied
          Status:                 True
          Type:                   Applied
          Last Transition Time:   2026-07-24T05:18:56Z
          Message:                All corresponding work objects are available
          Observed Generation:    1
          Reason:                 AllWorkAreAvailable
          Status:                 True
          Type:                   Available
        Observed Resource Index:  0
        Cluster Name:             aks-place-member-02-fm
        Conditions:
          Last Transition Time:   2026-07-24T05:18:56Z
          Message:                Successfully scheduled resources for placement in "aks-place-member-02-fm": picked by scheduling policy
          Observed Generation:    1
          Reason:                 Scheduled
          Status:                 True
          Type:                   Scheduled
          Last Transition Time:   2026-07-24T05:18:56Z
          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:   2026-07-24T05:18:56Z
          Message:                No override rules are configured for the selected resources
          Observed Generation:    1
          Reason:                 NoOverrideSpecified
          Status:                 True
          Type:                   Overridden
          Last Transition Time:   2026-07-24T05:18:56Z
          Message:                All of the works are synchronized to the latest
          Observed Generation:    1
          Reason:                 AllWorkSynced
          Status:                 True
          Type:                   WorkSynchronized
          Last Transition Time:   2026-07-24T05:18:56Z
          Message:                All corresponding work objects are applied
          Observed Generation:    1
          Reason:                 AllWorkHaveBeenApplied
          Status:                 True
          Type:                   Applied
          Last Transition Time:   2026-07-24T05:18:56Z
          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:  test-app
        Version:    v1
        Kind:       ConfigMap
        Name:       feature-flags
        Namespace:  test-app
        Version:    v1
    Events:
      Type    Reason                        Age   From                  Message
      ----    ------                        ----  ----                  -------
      Normal  PlacementRolloutStarted       4m3s  placement-controller  Started rolling out the latest resources
      Normal  PlacementOverriddenSucceeded  4m3s  placement-controller  Placement has been successfully overridden
      Normal  PlacementWorkSynchronized     4m3s  placement-controller  Work(s) have been created or updated successfully for the selected cluster(s)
      Normal  PlacementApplied              4m3s  placement-controller  Resources have been applied to the selected cluster(s)
      Normal  PlacementAvailable            4m3s  placement-controller  Resources are available on the selected cluster(s)
      Normal  PlacementRolloutCompleted     4m3s  placement-controller  Placement has finished the rollout process and reached the desired status
    
  1. Nel portale di Azure passare a Fleet Manager.

  2. Nel menu Servizi, sotto Risorse della flotta, selezionare Namespace.

    Annotazioni

    Se le risorse della flotta non sono visualizzate, Fleet Manager non ha un cluster hub. Per altre informazioni su come aggiungerne una, vedere Aggiornare il tipo di cluster hub.

  3. Nella parte superiore dell'elenco degli spazi dei nomi selezionare + Crea>applica un YAML e usare gli esempi seguenti.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: app-config
      namespace: test-app
    data:
      environment: production
      log-level: info
    
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: feature-flags
      namespace: test-app
    data:
      new-ui: enabled
      api-v2: disabled
    

    Copiare e incollare gli esempi e applicarli uno alla volta, come illustrato nell'immagine seguente.

    Screenshot del portale di Azure che mostra la finestra di dialogo Applica con YAML popolata con un oggetto ConfigMap pronto per essere applicato al cluster hub di Fleet Manager.

    Le due risorse ConfigMap sono ora pronte per la distribuzione ai cluster membri usando un oggetto ResourcePlacement.

  4. Nel menu del servizio, in Risorse flotta, seleziona Posizionamenti delle risorse>+ Crea.

  5. Nella scheda Informazioni di base configurare le opzioni seguenti:

    • In i dettagli di posizionamento, immetti un nome per il posizionamento.

    • Nei dettagli della risorsa:

      • Impostare Ambito come spazio dei nomi con ambito.

      • Per Spazio dei nomi, selezionare il namespace test-app.

      • Immettere il tipo di versione del gruppo (GVK) e il nome della risorsa da distribuire. In questo esempio usare i valori seguenti.

        group: ""
        kind: ConfigMap
        version: v1
        name: app-config
        
    • In Selezione cluster membro, per Tipo di posizionamento, seleziona Seleziona i cluster specifici.

    • Seleziona Seleziona i cluster membri, scegli i cluster membri che ricevono le risorse, quindi seleziona Seleziona.

    Schermata del portale di Azure che mostra la finestra di dialogo per la selezione dei cluster membri per un posizionamento PickFixed.

    • Per Rollout, lascia selezionata la strategia Aggiornamento progressivo.

    Schermata del portale di Azure che mostra la scheda Nozioni di base completata per il posizionamento delle risorse con ambito namespace per due risorse ConfigMap.

  6. Selezionare Avanti per esaminare il manifesto risultante ResourcePlacement .

  7. Aggiungere il secondo ConfigMap da distribuire alla resourceSelectors sezione nella finestra di dialogo YAML.

    group: ""
    kind: ConfigMap
    version: v1
    name: feature-flags
    
  8. Prima di procedere, convalidare il file YAML modificato usando l'opzione Convalida (esecuzione secca). Selezionare Rivedi e crea per passare alla conferma finale.

    Screenshot del portale di Azure che mostra la scheda Rivedi YAML con una convalida di esecuzione asciutta superata per il posizionamento delle risorse con ambito spazio dei nomi per due risorse configmap.

  9. Selezionare Crea per avviare immediatamente la distribuzione dello spazio dei nomi.

    Schermata del portale di Azure che mostra la scheda Rivedi e crea per il posizionamento di risorse con ambito namespace per due risorse ConfigMap.

    Annotazioni

    La distribuzione della risorsa inizia immediatamente non appena si applica il posizionamento della risorsa tramite la strategia selezionata RollingUpdate. Per informazioni su come avere controlli aggiuntivi sull'implementazione, vedere Definizione di una strategia di implementazione per il posizionamento delle risorse.

  10. La pagina viene aggiornata e l'elenco Posizionamento risorse visualizza il posizionamento appena creato. Indica il numero di cluster selezionati e se il pianificatore della flotta può rispettare i criteri di posizionamento.

    Schermata del portale di Azure che mostra l'elenco dei posizionamenti delle risorse con due posizionamenti delle risorse. Il nostro posizionamento con ambito namespace è presente nell'elenco e si chiama distribute-app-configs.

  11. Visualizzare lo stato di implementazione del posizionamento selezionando il nome del posizionamento nell'elenco. Selezionare singoli cluster per visualizzare l'implementazione della risorsa in tale cluster.

    Screenshot del portale di Azure che mostra le informazioni dettagliate sull'implementazione di un posizionamento delle risorse con ambito spazio dei nomi denominato distribute-app-configs.

È possibile verificare che le risorse distribuite siano presenti nei cluster membri connettendosi direttamente ai cluster membri e controllando lo test-app spazio dei nomi per visualizzare le due ConfigMap risorse.

Eliminare il posizionamento per rimuovere le risorse

Quando si elimina il posizionamento delle risorse sul cluster hub di Fleet Manager, si rimuovono le risorse distribuite dai cluster membri selezionati.

  1. Per rimuovere le risorse ConfigMap, eliminare ResourcePlacement sul cluster hub di Fleet Manager.

    kubectl delete resourceplacement distribute-app-configs
    
  2. Per rimuovere il namespace dai cluster membri, eliminare ClusterResourcePlacement.

    kubectl delete clusterresourceplacement distribute-test-app-namespace
    
  1. Nel menu del servizio, in Risorse flotta, selezionare Posizionamento risorse.

  2. Nell'elenco di posizionamento delle risorse selezionare il posizionamento e selezionare Elimina.

  3. In Elimina verificare di aver scelto il posizionamento corretto. Quando si è pronti, selezionare Conferma eliminazione>Elimina.

    Schermata del portale di Azure che mostra un posizionamento di risorse denominato distribute-test-app in fase di eliminazione.

  4. La pagina viene aggiornata e il posizionamento non viene più visualizzato nell'elenco. Le risorse vengono rimosse dai cluster membri.

  5. Ripeti questo processo per rimuovere il namespace che hai aggiunto nel primo passaggio.

Per altre informazioni sul posizionamento delle risorse, vedere le risorse seguenti: