Sdílet prostřednictvím


Použití ResourcePlacementu pro Azure Kubernetes Fleet Manager k nasazení prostředků s oborem názvů napříč několika clustery (Preview)

Tento článek popisuje, jak pomocí Azure Kubernetes Fleet Manageru ResourcePlacement nasadit prostředky s oborem názvů napříč clustery ve flotile.

Důležité

Funkce Azure Kubernetes Fleet Manageru ve verzi Preview jsou dostupné na samoobslužné bázi s výslovným souhlasem. Ukázky jsou poskytovány "jak jsou" a "podle aktuální dostupnosti" a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Verze Preview Azure Kubernetes Fleet Manageru jsou částečně pokryty zákaznickou podporou s vynaložením maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití.

Požadavky

Vytvořte obor názvů napříč členskými clustery

Než budete moci použít ResourcePlacement k nasazení prostředků s rozsahem jmenných prostorů, musí cílový jmenný prostor existovat v členských clusterech. Tento příklad ukazuje, jak vytvořit namespace v ústředním clusteru a rozšířit ho do členských clusterů pomocí ClusterResourcePlacement.

Poznámka:

Následující příklad používá placement.kubernetes-fleet.io/v1beta1 verzi rozhraní API. Toto selectionScope: NamespaceOnly pole je náhledová funkce dostupná ve verzi v1beta1 a není k dispozici ve stabilní verzi API v1.

  1. Vytvořte obor názvů v uzlovém clusteru.

    kubectl create namespace my-app
    
  2. Vytvořte objekt ClusterResourcePlacement, který rozšíří obor názvů do všech členských clusterů. Uložte následující YAML do souboru s názvem 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. Použijte ClusterResourcePlacement na hubový cluster:

    kubectl apply -f namespace-crp.yaml
    
  4. Ověřte, že se obor názvů úspěšně rozšířil:

    kubectl get clusterresourceplacement my-app-namespace
    

    Výstup by měl vypadat podobně jako v následujícím příkladu:

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

Použití ResourcePlacementu k umístění prostředků s oborem názvů

Objekt ResourcePlacement je vytvořen v rámci oboru názvů v hlavním klastru a slouží k distribuci specifických prostředků vymezených oborem názvů do členských klastrů. Tento příklad ukazuje, jak rozšířit objekty ConfigMap do konkrétních členských clusterů pomocí objektu ResourcePlacementPickFixed se zásadami umístění.

Další informace najdete v tématu Umístění prostředků s oborem názvů s využitím ResourcePlacement Azure Kubernetes Fleet Manageru.

  1. Vytvořte ConfigMaps v oboru názvů v hub clusteru. Tyto objekty ConfigMap se rozšíří do vybraných členských clusterů:

    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. Vytvořte ResourcePlacement objekt pro šíření objektů ConfigMaps. Uložte následující YAML do souboru s názvem 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
    

    Poznámka:

    Nahraďte membercluster1 a membercluster2 skutečnými názvy vašich členských clusterů. K výpisu dostupných členských clusterů můžete použít kubectl get memberclusters.

  3. Použijte ResourcePlacement na hub cluster.

    kubectl apply -f app-configs-rp.yaml
    
  4. Zkontrolujte průběh distribuce zdrojů.

    kubectl get resourceplacement app-configs -n my-app
    

    Výstup by měl vypadat podobně jako v následujícím příkladu:

    NAME          GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    app-configs   1     True        1               True        1               20s
    
  5. Zobrazení podrobností o objektu umístění:

    kubectl describe resourceplacement app-configs -n my-app
    

    Výstup by měl vypadat podobně jako v následujícím příkladu:

    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
    

Ověřit prostředky na členských clusterech

Můžete ověřit, že se objekty ConfigMap úspěšně rozšířily do členských clusterů.

  1. Získejte přihlašovací údaje pro jeden z vašich členských clusterů:

    az aks get-credentials --resource-group <resource-group> --name membercluster1
    
  2. Ověřte, že prostor jmen existuje:

    kubectl get namespace my-app
    
  3. Ověřte, zda ConfigMaps existují v jmenném prostoru.

    kubectl get configmap -n my-app
    

    Výstup by měl zobrazovat obě objekty ConfigMap:

    NAME             DATA   AGE
    app-config       2      2m
    feature-flags    2      2m
    
  4. Zobrazení obsahu objektu ConfigMap:

    kubectl describe configmap app-config -n my-app
    

Vyčistěte zdroje

Pokud už objekty nechcete používat ResourcePlacement , můžete je odstranit pomocí kubectl delete příkazu:

kubectl delete resourceplacement app-configs -n my-app

Odebrání oboru názvů ClusterResourcePlacement:

kubectl delete clusterresourceplacement my-app-namespace

Chcete-li odstranit obor názvů a všechny prostředky v něm ze sjednoceného clusteru:

kubectl delete namespace my-app

Další informace o umístění prostředků v oboru názvů najdete v následujících zdrojích informací: