Utiliser le placement de ressources d’Azure Kubernetes Fleet Manager pour déployer des ressources de portée cluster sur plusieurs clusters

S’applique à : ✔️ Fleet Manager avec cluster hub

Le placement des ressources d’Azure Kubernetes Fleet Manager vous permet de distribuer et de synchroniser des ressources de portée cluster, y compris les espaces de noms et leurs ressources enfants, entre plusieurs clusters de votre flotte. Cette fonctionnalité simplifie les déploiements multicluster en garantissant une configuration cohérente des ressources dans votre infrastructure, en réduisant la surcharge manuelle et en vous permettant de gérer des charges de travail complexes à grande échelle avec une seule source de vérité. Cet article explique comment utiliser ClusterResourcePlacement pour distribuer un espace de noms et ses charges de travail aux clusters membres.

Pour distribuer des ressources individuelles à l’intérieur d’un espace de noms, consultez la documentation sur le placement des ressources délimitées à l’espace de noms.

Vous pouvez suivre les étapes décrites dans cet article à l’aide du portail Azure ou du Azure CLI.

Note

Vous pouvez utiliser l'emplacement des ressources de Fleet Manager avec AKS et les clusters Kubernetes compatibles avec Azure Arc.

Avant de commencer

Distribuer un espace de noms et ses ressources sur des clusters membres

Utilisez le scénario simple consistant à avoir un Deployment et un Service pour déployer sur tous les clusters de la flotte. Créez un espace de noms sur votre cluster Hub Fleet Manager, ajoutez-y les charges de travail, puis utilisez un ClusterResourcePlacement pour distribuer l’espace de noms et tout son contenu à tous les clusters membres à l’aide de la PickAll stratégie de placement.

  1. Définissez les variables d'environnement suivantes pour votre ID d'abonnement, votre groupe de ressources et votre ressource Kubernetes Fleet :

    export SUBSCRIPTION_ID=<subscription-id>
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    
  2. Définissez l’abonnement par défaut Azure à l’aide de la commande [az account set][az-account-set] :

    az account set \
        --subscription ${SUBSCRIPTION_ID}
    
  3. Obtenez le fichier kubeconfig du cluster Kubernetes Fleet Hub à l’aide de la commande [az fleet get-credentials][az-fleet-get-credentials] :

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

    Votre sortie doit ressembler à ce qui suit.

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

    Note

    Si vous recevez une erreur de type InvalidHubOperation avec le message indiquant que la flotte est sans hub, ajoutez un cluster hub. Pour plus d’informations, consultez mettre à niveau le type de cluster hub.

  4. Créez un espace de noms dans le cluster hub.

    kubectl create namespace test-app
    
  5. Enregistrez le yaML suivant sous 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. Déployez la charge de travail de test sur le cluster hub Fleet Manager en utilisant kubectl.

    kubectl apply -f test-workload.yaml
    
  7. Enregistrez le yaML suivant sous 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. Appliquez le manifeste de placement au cluster Hub Fleet Manager.

    kubectl apply -f crp-distribute-workload.yaml
    

    Note

    Le déploiement de la ressource commence immédiatement que le manifeste est appliqué. Une stratégie implicite RollingUpdate est utilisée. Pour savoir comment avoir un contrôle supplémentaire sur le déploiement, consultez la définition d’une stratégie de déploiement pour le placement des ressources.

  9. Vérifiez la progression de l’emplacement des ressources.

kubectl get clusterresourceplacement distribute-test-app

Vous devez obtenir un résultat semblable à l’exemple qui suit :

NAME                   GEN   SCHEDULED   SCHEDULEDGEN   APPLIED   APPLIEDGEN   AGE
distribute-test-app    2     True        2              True      2            10s
  1. Voir les détails du placement.
kubectl describe clusterresourceplacement distribute-test-app

Vous devez obtenir un résultat semblable à l’exemple qui suit :

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. Dans le portail Azure, accédez à votre Fleet Manager.

  2. Dans le menu du service, sous Ressources de flotte, sélectionnez Espaces de noms>+ Créer.

    Note

    Si vous ne voyez pas les ressources de flotte, votre Fleet Manager n’a pas de cluster hub. Pour plus d’informations sur la façon d’en ajouter un, consultez mettre à niveau le type de cluster hub.

  3. Dans le menu, sélectionnez Espace de noms, entrez un nom, puis sélectionnez Créer.

    Capture d’écran du portail Azure montrant un espace de noms appelé application de test en cours de création sur le cluster Hub Fleet Manager.

    Après quelques instants, la page s’actualise et l’espace de noms apparaît dans la liste des espaces de noms du cluster hub Fleet Manager. Il est maintenant prêt à héberger toutes les ressources que vous souhaitez distribuer entre les clusters membres.

  4. En haut de la liste d’espaces de noms, sélectionnez + Créer>un YAML et utilisez les exemples suivants.

    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
    

    Copiez et collez les exemples et appliquez-les un par un, comme illustré dans l’image suivante.

    Capture d’écran du portail Azure montrant la boîte de dialogue Appliquer avec YAML remplie avec un déploiement prêt à être appliqué au cluster Hub Fleet Manager.

    L’espace de noms et ses charges de travail sont désormais prêts à être distribués aux clusters membres. Le déploiement et le service ne sont pas planifiés sur le cluster Hub Fleet Manager.

  5. Dans le menu de service, sous Ressources de flotte, sélectionnez Placements des ressources>+ Créer.

  6. Sous l’onglet Informations de base, configurez les options suivantes :

    • Dans les détails de placement, entrez un nom pour le placement.

    • Sous Détails de la ressource, laissez Étendue sur Étendue du cluster et saisissez le Group Version Kind (GVK) ainsi que le nom de la ressource à distribuer. Dans cet exemple, utilisez les valeurs suivantes.

      group: ""
      kind: Namespace
      version: v1          
      name: test-app
      
    • Dans la sélection du cluster membre, pour le type de placement , choisissez Tous les clusters.

    • Pour le déploiement, laissez la stratégie de mise à jour propagée sélectionnée.

    Capture d’écran du portail Azure affichant l’onglet Informations de base terminé pour le placement de ressources à l’échelle du cluster pour un espace de noms nommé test-app.

  7. Sélectionnez Suivant pour passer en revue le manifeste obtenu ClusterResourcePlacement . Vous pouvez modifier le manifeste si nécessaire, valider à l’aide de l’option Valider (exécution sèche) ou sélectionner Vérifier + créer pour passer à la confirmation finale.

    Capture d’écran du portail Azure montrant l’onglet Révision YAML avec une validation de test à blanc réussie pour le placement des ressources dans l’étendue du cluster pour un espace de noms appelé test-app.

  8. Sélectionnez Créer pour démarrer la distribution de l’espace de noms immédiatement.

    Capture d’écran du portail Azure montrant l’onglet Révision et création d’un emplacement de ressource dans l’étendue du cluster pour un espace de noms appelé test-app.

    Note

    Le déploiement de la ressource commence immédiatement lorsque vous appliquez le placement des ressources à l’aide de la stratégie sélectionnée RollingUpdate . Pour savoir comment disposer de contrôles supplémentaires sur le déploiement, consultez la définition d’une stratégie de déploiement pour le placement des ressources.

  9. La page s’actualise et la liste Placements de ressources affiche le placement nouvellement créé. Il indique le nombre de clusters sélectionnés et indique si le planificateur de flotte peut respecter la stratégie de placement.

    Capture d’écran du portail Azure montrant la liste des placements de ressources avec un emplacement de ressource unique appelé distribution-test-app.

  10. Affichez l’état de déploiement de l’emplacement en sélectionnant le nom de placement dans la liste. Sélectionnez des clusters individuels pour afficher le déploiement des ressources sur ce cluster.

    Capture d’écran du portail Azure montrant les informations de déploiement détaillées d’un placement de ressources appelé distribution-test-app.

Sur les clusters Kubernetes sélectionnés, le namespace, le Deployment et le Service sont déployés et opérationnels.

Supprimez le placement pour retirer les ressources

Lorsque vous supprimez le placement des ressources sur le cluster Hub Fleet Manager, vous supprimez les ressources distribuées des clusters membres sélectionnés.

kubectl delete clusterresourceplacement distribute-test-app
  1. Dans le menu du service, sous Ressources Fleet, sélectionnez Placements de ressources.

  2. Dans la liste des placements de ressources, sélectionnez l’emplacement, puis sélectionnez Supprimer.

  3. Sur Supprimer, vérifiez que vous avez choisi l’emplacement approprié. Une fois que vous êtes prêt, sélectionnez Confirmer la suppression>Supprimer.

    Capture d’écran du portail Azure montrant un placement de ressources appelé distribution-test-app supprimé.

  4. La page s’actualise et le placement n’apparaît plus dans la liste. Les ressources sont supprimées des clusters membres.

Pour en savoir plus sur le placement des ressources, consultez les ressources suivantes :