Compartir a través de


Uso de ResourcePlacement de Azure Kubernetes Fleet Manager para implementar recursos con ámbito de espacio de nombres en varios clústeres (versión preliminar)

En este artículo se describe cómo usar Fleet Manager ResourcePlacement de Azure Kubernetes para implementar recursos con ámbito de espacio de nombres en clústeres de una flota.

Importante

Las características en vista previa de Azure Kubernetes Fleet Manager están disponibles en autoservicio y de manera opcional. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y garantía limitada. Las versiones preliminares de Azure Kubernetes Fleet Manager reciben cobertura parcial del soporte al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción.

Prerrequisitos

Establecimiento del espacio de nombres entre clústeres de miembros

Para poder usar ResourcePlacement para implementar recursos con ámbito de nombres, el espacio de nombres de destino debe existir en los clústeres miembros. En este ejemplo se muestra cómo crear un espacio de nombres en el clúster de concentrador y propagarlo a clústeres miembro mediante ClusterResourcePlacement.

Nota:

En el ejemplo siguiente se usa la versión de la placement.kubernetes-fleet.io/v1beta1 API. El selectionScope: NamespaceOnly campo es una característica en versión preliminar disponible en v1beta1 y no está disponible en la API estable v1.

  1. Cree un espacio de nombres en el clúster principal.

    kubectl create namespace my-app
    
  2. Cree un ClusterResourcePlacement objeto para propagar el espacio de nombres a todos los clústeres miembro. Guarde el siguiente CÓDIGO YAML en un archivo denominado 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. Aplique el ClusterResourcePlacement al clúster del concentrador.

    kubectl apply -f namespace-crp.yaml
    
  4. Compruebe que el espacio de nombres se propagó correctamente:

    kubectl get clusterresourceplacement my-app-namespace
    

    La salida debería parecerse al siguiente ejemplo.

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

Uso de ResourcePlacement para ubicar recursos con ámbito de espacio de nombres

El objeto ResourcePlacement se crea en el espacio de nombres del clúster de concentradores y se utiliza para propagar recursos específicos con alcance de espacio de nombres a los clústeres miembros. En este ejemplo se muestra cómo propagar ConfigMaps a clústeres de miembros específicos mediante el ResourcePlacement objeto con una PickFixed directiva de selección de ubicación.

Para más información, consulte Ubicación de recursos con ámbito de espacio de nombres mediante ResourcePlacement de Azure Kubernetes Fleet Manager.

  1. Cree ConfigMaps en el espacio de nombres del clúster del concentrador. Estos ConfigMaps se propagarán a los clústeres de miembros seleccionados:

    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. Cree un objeto ResourcePlacement para propagar los ConfigMaps. Guarde el siguiente CÓDIGO YAML en un archivo denominado 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
    

    Nota:

    Reemplace membercluster1 y membercluster2 por los nombres reales de los clústeres de miembros. Puede enumerar los clústeres de miembros disponibles mediante kubectl get memberclusters.

  3. Aplique ResourcePlacement al clúster del concentrador:

    kubectl apply -f app-configs-rp.yaml
    
  4. Compruebe el progreso de la propagación de recursos:

    kubectl get resourceplacement app-configs -n my-app
    

    La salida debería parecerse al siguiente ejemplo.

    NAME          GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    app-configs   1     True        1               True        1               20s
    
  5. Vea los detalles del objeto de colocación:

    kubectl describe resourceplacement app-configs -n my-app
    

    La salida debería parecerse al siguiente ejemplo.

    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
    

Comprobación de recursos en clústeres de miembros

Puede comprobar que los ConfigMaps se propagaron correctamente a los clústeres miembros.

  1. Obtenga las credenciales de uno de los clústeres de miembros:

    az aks get-credentials --resource-group <resource-group> --name membercluster1
    
  2. Verifique que el espacio de nombres exista:

    kubectl get namespace my-app
    
  3. Compruebe que configMaps existe en el espacio de nombres:

    kubectl get configmap -n my-app
    

    La salida debe mostrar ambos ConfigMaps:

    NAME             DATA   AGE
    app-config       2      2m
    feature-flags    2      2m
    
  4. Vea el contenido de ConfigMap.

    kubectl describe configmap app-config -n my-app
    

Limpieza de recursos

Si ya no desea usar los ResourcePlacement objetos, puede eliminarlos mediante el kubectl delete comando :

kubectl delete resourceplacement app-configs -n my-app

Para también quitar el espacio de nombres ClusterResourcePlacement:

kubectl delete clusterresourceplacement my-app-namespace

Para eliminar el espacio de nombres y todos los recursos que contiene del clúster del hub:

kubectl delete namespace my-app

Para más información sobre la asignación de ubicaciones de recursos dentro del ámbito del espacio de nombres, consulte los siguientes recursos: