Use la colocación de recursos de Azure Kubernetes Fleet Manager para implementar recursos de ámbito de clúster en varios clústeres

Se aplica a: ✔️ Fleet Manager con clúster central

La colocación de recursos de Azure Kubernetes Fleet Manager le permite distribuir y sincronizar recursos de ámbito de clúster, incluidos los espacios de nombres y sus recursos secundarios, entre varios clústeres de la flota. Esta característica simplifica las implementaciones de varios clústeres al garantizar una configuración de recursos coherente en toda la infraestructura, lo que reduce la sobrecarga manual y le permite administrar cargas de trabajo complejas a gran escala con una única fuente de verdad. En este artículo se explica cómo usar ClusterResourcePlacement para distribuir un espacio de nombres y sus cargas de trabajo a clústeres miembro.

Para distribuir recursos individuales dentro de un espacio de nombres, consulte la documentación sobre la ubicación de recursos con ámbito de espacio de nombres.

Puede completar los pasos de este artículo mediante el portal de Azure o el CLI de Azure.

Note

Puede usar la ubicación de recursos de Fleet Manager con AKS y clústeres de Kubernetes habilitados para Azure Arc.

Antes de empezar

Distribuir un espacio de nombres y sus recursos en clústeres miembros

Use el escenario sencillo de tener un Deployment y Service para desplegar en todos los clústeres de la flota. Cree un espacio de nombres en el clúster de concentrador de Fleet Manager, agregue las cargas de trabajo a este y, a continuación, use un ClusterResourcePlacement para distribuir el espacio de nombres y todo su contenido a todos los clústeres miembros mediante la directiva de ubicación PickAll.

  1. Establezca las siguientes variables de entorno para el identificador de suscripción, el grupo de recursos y el recurso de Kubernetes Fleet:

    export SUBSCRIPTION_ID=<subscription-id>
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    
  2. Establezca la suscripción de Azure predeterminada mediante el comando [az account set][az-account-set]:

    az account set \
        --subscription ${SUBSCRIPTION_ID}
    
  3. Obtenga el archivo kubeconfig del clúster del centro de flota de Kubernetes mediante el comando [az fleet get-credentials][az-fleet-get-credentials]:

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

    La salida debe tener un aspecto similar a lo siguiente.

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

    Note

    Si recibe un error de tipo InvalidHubOperation con un mensaje que indica que la flota no tiene concentrador, añada un clúster de concentrador. Para más información, consulte tipo de clúster del hub de actualización.

  4. Cree un espacio de nombres en el clúster del concentrador.

    kubectl create namespace test-app
    
  5. Guarde el siguiente código YAML como test-workload.yaml.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: test-app
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 2
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: mcr.microsoft.com/azurelinux/base/nginx:1.28@sha256:3352a36cbcab4708883a3e77b64f64159e11e1aab358c010e1c4e465dbfb4f57
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
      namespace: test-app
    spec:
      selector:
        app: nginx
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
      type: LoadBalancer
    
  6. Prepare la carga de trabajo de prueba en el clúster hub de Fleet Manager usando kubectl.

    kubectl apply -f test-workload.yaml
    
  7. Guarde el siguiente código YAML como crp-distribute-workload.yaml.

    apiVersion: placement.kubernetes-fleet.io/v1
    kind: ClusterResourcePlacement
    metadata:
      name: distribute-test-app
    spec:
      resourceSelectors:
        - group: ""
          kind: Namespace
          version: v1          
          name: test-app
      policy:
        placementType: PickAll
    
  8. Aplique el manifiesto de ubicación al clúster central de Fleet Manager.

    kubectl apply -f crp-distribute-workload.yaml
    

    Note

    El despliegue de recursos comienza en cuanto se aplica el manifiesto. Se usa una estrategia implícita RollingUpdate . Para obtener información sobre cómo tener control adicional sobre el lanzamiento, consulte definición de una estrategia de implementación para la selección de ubicación de recursos.

  9. Compruebe el progreso de la asignación del recurso.

kubectl get clusterresourceplacement distribute-test-app

La salida debería similar al siguiente ejemplo:

NAME                   GEN   SCHEDULED   SCHEDULEDGEN   APPLIED   APPLIEDGEN   AGE
distribute-test-app    2     True        2              True      2            10s
  1. Ver los detalles del emplazamiento.
kubectl describe clusterresourceplacement distribute-test-app

La salida debería similar al siguiente ejemplo:

Name:         distribute-test-app
Namespace:    
Labels:       <none>
Annotations:  <none>
API Version:  placement.kubernetes-fleet.io/v1
Kind:         ClusterResourcePlacement
Metadata:
  Creation Timestamp:  2024-04-01T18:55:31Z
  Finalizers:
    kubernetes-fleet.io/crp-cleanup
    kubernetes-fleet.io/scheduler-cleanup
  Generation:        2
  Resource Version:  6949
  UID:               815b1d81-61ae-4fb1-a2b1-06794be3f986
Spec:
  Policy:
    Placement Type:  PickAll
  Resource Selectors:
    Group:                 
    Kind:                  Namespace
    Name:                  test-app
    Version:               v1
  Revision History Limit:  10
  Strategy:
    Type:  RollingUpdate
Status:
  Conditions:
    Last Transition Time:   2024-04-01T18:55:31Z
    Message:                found all the clusters needed as specified by the scheduling policy
    Observed Generation:    2
    Reason:                 SchedulingPolicyFulfilled
    Status:                 True
    Type:                   ClusterResourcePlacementScheduled
    Last Transition Time:   2024-04-01T18:55:36Z
    Message:                All 3 cluster(s) are synchronized to the latest resources on the hub cluster
    Observed Generation:    2
    Reason:                 SynchronizeSucceeded
    Status:                 True
    Type:                   ClusterResourcePlacementSynchronized
    Last Transition Time:   2024-04-01T18:55:36Z
    Message:                Successfully applied resources to 3 member clusters
    Observed Generation:    2
    Reason:                 ApplySucceeded
    Status:                 True
    Type:                   ClusterResourcePlacementApplied
  Observed Resource Index:  0
  Placement Statuses:
    Cluster Name:  membercluster1
    Conditions:
      Last Transition Time:  2024-04-01T18:55:31Z
      Message:               Successfully scheduled resources for placement in membercluster1 (affinity score: 0, topology spread score: 0): picked by scheduling policy
      Observed Generation:   2
      Reason:                ScheduleSucceeded
      Status:                True
      Type:                  ResourceScheduled
      Last Transition Time:  2024-04-01T18:55:36Z
      Message:               Successfully Synchronized work(s) for placement
      Observed Generation:   2
      Reason:                WorkSynchronizeSucceeded
      Status:                True
      Type:                  WorkSynchronized
      Last Transition Time:  2024-04-01T18:55:36Z
      Message:               Successfully applied resources
      Observed Generation:   2
      Reason:                ApplySucceeded
      Status:                True
      Type:                  ResourceApplied
    Cluster Name:            membercluster2
    Conditions:
      Last Transition Time:  2024-04-01T18:55:31Z
      Message:               Successfully scheduled resources for placement in membercluster2 (affinity score: 0, topology spread score: 0): picked by scheduling policy
      Observed Generation:   2
      Reason:                ScheduleSucceeded
      Status:                True
      Type:                  ResourceScheduled
      Last Transition Time:  2024-04-01T18:55:36Z
      Message:               Successfully Synchronized work(s) for placement
      Observed Generation:   2
      Reason:                WorkSynchronizeSucceeded
      Status:                True
      Type:                  WorkSynchronized
      Last Transition Time:  2024-04-01T18:55:36Z
      Message:               Successfully applied resources
      Observed Generation:   2
      Reason:                ApplySucceeded
      Status:                True
      Type:                  ResourceApplied
    Cluster Name:            membercluster3
    Conditions:
      Last Transition Time:  2024-04-01T18:55:31Z
      Message:               Successfully scheduled resources for placement in membercluster3 (affinity score: 0, topology spread score: 0): picked by scheduling policy
      Observed Generation:   2
      Reason:                ScheduleSucceeded
      Status:                True
      Type:                  ResourceScheduled
      Last Transition Time:  2024-04-01T18:55:36Z
      Message:               Successfully Synchronized work(s) for placement
      Observed Generation:   2
      Reason:                WorkSynchronizeSucceeded
      Status:                True
      Type:                  WorkSynchronized
      Last Transition Time:  2024-04-01T18:55:36Z
      Message:               Successfully applied resources
      Observed Generation:   2
      Reason:                ApplySucceeded
      Status:                True
      Type:                  ResourceApplied
  Selected Resources:
    Kind:     Namespace
    Name:     my-namespace
    Version:  v1
Events:
  Type    Reason                     Age   From                                   Message
  ----    ------                     ----  ----                                   -------
  Normal  PlacementScheduleSuccess   108s  cluster-resource-placement-controller  Successfully scheduled the placement
  Normal  PlacementSyncSuccess       103s  cluster-resource-placement-controller  Successfully synchronized the placement
  Normal  PlacementRolloutCompleted  103s  cluster-resource-placement-controller  Resources have been applied to the selected clusters
  1. En el portal de Azure, vaya a Fleet Manager.

  2. En el menú servicio, en Recursos de flota, seleccione Espacios de nombres>+ Crear.

    Note

    Si no ve Recursos de flota, su Fleet Manager no tiene un clúster central. Para obtener más información sobre cómo agregar una, consulte upgrade hub cluster type (Tipo de clúster del centro de actualización).

  3. En el menú, seleccione Espacio de nombres, escriba un nombre y, a continuación, seleccione Crear.

    Captura de pantalla del portal de Azure en la que se muestra un espacio de nombres denominado test-app que se crea en el clúster del centro de Fleet Manager.

    Después de unos instantes, la página se actualiza y el espacio de nombres aparece en la lista de espacios de nombres del clúster concentrador de Fleet Manager. Ahora está listo para hospedar los recursos que quiera distribuir entre clústeres de miembros.

  4. En la parte superior de la lista de espacios de nombres, seleccione + Crear>Aplicar un YAML y use los siguientes ejemplos.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: test-app
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 2
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: mcr.microsoft.com/azurelinux/base/nginx:1.28@sha256:3352a36cbcab4708883a3e77b64f64159e11e1aab358c010e1c4e465dbfb4f57
            ports:
            - containerPort: 80
    
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
      namespace: test-app
    spec:
      selector:
        app: nginx
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
      type: LoadBalancer
    

    Copie y pegue los ejemplos y aplíquelos uno a uno como se muestra en la siguiente imagen.

    Captura de pantalla del portal de Azure que muestra el cuadro de diálogo Aplicar con YAML rellenado con una implementación lista para aplicarse al clúster del centro de Fleet Manager.

    El espacio de nombres y sus cargas de trabajo ya están listos para distribuirse a los clústeres miembro. La implementación y el servicio no están programados en el clúster del centro de Fleet Manager.

  5. En el menú servicio, en Recursos de flota, seleccione Ubicación de recursos>+ Crear.

  6. En la pestaña Información básica, configure las siguientes opciones:

    • En Detalles de la ubicación, introduzca un nombre para la ubicación.

    • En Detalles del recurso, deje Ámbito como Ámbito de clúster y escriba el Tipo de versión de grupo (GVK) y el nombre del recurso que se va a distribuir. En este ejemplo, use los valores siguientes.

      group: ""
      kind: Namespace
      version: v1          
      name: test-app
      
    • En Selección de clúster miembro, en Tipo de selección de ubicación , elija Todos los clústeres.

    • En Lanzamiento, deje seleccionada la estrategia de actualización gradual .

    Captura de pantalla del portal de Azure que muestra la pestaña Aspectos básicos completada para la ubicación de recursos de ámbito de clúster de un espacio de nombres denominado test-app.

  7. Seleccione Siguiente para revisar el manifiesto resultante ClusterResourcePlacement . Puede modificar el manifiesto si es necesario, validar mediante la opción Validar (ejecución seca) o seleccionar Revisar y crear para continuar con la confirmación final.

    Captura de pantalla del portal de Azure que muestra la pestaña Revisar YAML con una validación de ejecución seca superada para la selección de ubicación de recursos con ámbito de clúster para un espacio de nombres denominado test-app.

  8. Seleccione Crear para iniciar la distribución del espacio de nombres inmediatamente.

    Captura de pantalla del portal de Azure que muestra la pestaña Revisar y crear para una ubicación de recursos con ámbito de clúster para un espacio de nombres denominado test-app.

    Note

    El lanzamiento de recursos comienza inmediatamente cuando se aplica la colocación de recursos mediante la estrategia seleccionada RollingUpdate . Para obtener información sobre cómo tener controles adicionales sobre el lanzamiento, consulte definición de una estrategia de implementación para la selección de ubicación de recursos.

  9. La página se actualiza y la lista Ubicaciones de recursos muestra la ubicación recién creada. Muestra el número de clústeres seleccionados y si el planificador de flotas puede cumplir la política de ubicación.

    Captura de pantalla del portal de Azure que muestra la lista de ubicaciones de recursos con una sola ubicación de recursos denominada distribute-test-app.

  10. Consulte el estado de implementación del emplazamiento seleccionando el nombre del emplazamiento en la lista. Seleccione clústeres individuales para ver la implementación de recursos en ese clúster.

    Captura de pantalla del portal de Azure que muestra la información detallada del lanzamiento de una ubicación de recursos denominada distribute-test-app.

En los clústeres de Kubernetes seleccionados, se encuentran el espacio de nombres, el Deployment y el Service desplegados y en funcionamiento.

Eliminación de la ubicación para quitar recursos

Al eliminar la ubicación del recurso en el clúster del centro de Fleet Manager, se quitan los recursos distribuidos de los clústeres de miembros seleccionados.

kubectl delete clusterresourceplacement distribute-test-app
  1. En el menú de servicio, en Recursos de Fleet, seleccione Ubicaciones de recursos.

  2. En la lista de ubicaciones de recursos, seleccione la ubicación y seleccione Eliminar.

  3. En Eliminar, compruebe que eligió la ubicación correcta. Después, seleccione Confirmar eliminación>Eliminar.

    Captura de pantalla del portal de Azure en la que se muestra una ubicación de recursos denominada distribute-test-app que se va a eliminar.

  4. La página se actualiza y la ubicación ya no aparece en la lista. Los recursos se eliminan de los clústeres de miembros.

Para más información sobre la selección de ubicación de recursos, consulte los siguientes recursos: