Gebruik de plaatsing van Azure Kubernetes Fleet Manager-resources om resources met clusterbereik over meerdere clusters uit te rollen

Van toepassing op: ✔️ Fleet Manager met hubcluster

Met resourceplaatsing in Azure Kubernetes Fleet Manager kunt u resources op clusterniveau, waaronder naamruimten en de onderliggende resources daarvan, distribueren en synchroniseren over meerdere clusters in uw fleet. Deze functie vereenvoudigt implementaties met meerdere clusters door consistente resourceconfiguratie in uw infrastructuur te garanderen, handmatige overhead te verminderen en u in staat te stellen complexe workloads op schaal te beheren met één bron van waarheid. In dit artikel wordt uitgelegd hoe u ClusterResourcePlacement gebruikt om een naamruimte en de bijbehorende workloads naar lidclusters te distribueren.

Als u afzonderlijke resources in een naamruimte wilt distribueren, raadpleegt u de documentatie over resourceplaatsing binnen het naamruimtebereik.

U kunt de stappen in dit artikel uitvoeren met behulp van de Azure-portal of de Azure CLI.

Note

U kunt de plaatsing van resources van Fleet Manager gebruiken met AKS- en Azure Arc Kubernetes-clusters.

Voordat u begint

Een naamruimte en de bijbehorende resources distribueren naar lidclusters

Gebruik het eenvoudige scenario waarin u een Deployment en Service implementeert in alle clusters binnen het clusterpark. Maak een naamruimte op uw Fleet Manager-hubcluster, voeg er de workloads aan toe en gebruik vervolgens een ClusterResourcePlacement om de naamruimte en alle inhoud ervan naar alle lidclusters te distribueren met behulp van het PickAll-plaatsingsbeleid.

  1. Stel de volgende omgevingsvariabelen in voor uw abonnements-id, resourcegroep en Kubernetes Fleet-resource:

    export SUBSCRIPTION_ID=<subscription-id>
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    
  2. Stel het standaardabonnement Azure in met behulp van de opdracht [az account set][az-account-set]:

    az account set \
        --subscription ${SUBSCRIPTION_ID}
    
  3. Haal het kubeconfig-bestand van het Kubernetes Fleet-hubcluster op met behulp van de opdracht [az fleet get-credentials][az-fleet-get-credentials]:

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

    De uitvoer moet er ongeveer als volgt uitzien.

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

    Note

    Als er een foutbericht van het type InvalidHubOperation wordt weergegeven met het bericht dat de vloot hubloos is, voegt u een hubcluster toe. Zie clusterstype van de upgradehub voor meer informatie.

  4. Maak een naamruimte op het hubcluster.

    kubectl create namespace test-app
    
  5. Sla de volgende YAML op als 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. Faseer de testworkload naar het Fleet Manager-hubcluster met behulp van kubectl.

    kubectl apply -f test-workload.yaml
    
  7. Sla de volgende YAML op als 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. Pas het plaatsingsmanifest toe op het Fleet Manager-hubcluster.

    kubectl apply -f crp-distribute-workload.yaml
    

    Note

    De implementatie van de resource begint onmiddellijk met het toepassen van het manifest. Er wordt een impliciete RollingUpdate strategie gebruikt. Zie een uitrolstrategie definiëren voor de plaatsing van resources voor informatie over hoe u meer controle krijgt over de uitrol.

  9. Controleer de voortgang van de plaatsing van resources.

kubectl get clusterresourceplacement distribute-test-app

Uw uitvoer moet er ongeveer uitzien als de uitvoer in het volgende voorbeeld:

NAME                   GEN   SCHEDULED   SCHEDULEDGEN   APPLIED   APPLIEDGEN   AGE
distribute-test-app    2     True        2              True      2            10s
  1. Bekijk de details van de plaatsing.
kubectl describe clusterresourceplacement distribute-test-app

Uw uitvoer moet er ongeveer uitzien als de uitvoer in het volgende voorbeeld:

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. Ga in de Azure portal naar uw Fleet Manager.

  2. Selecteer in het servicemenu onder Fleet Resources de optie Naamruimten>+ Maken.

    Note

    Als u Fleet-resources niet ziet, heeft uw Fleet Manager geen hubcluster. Zie hubclustertype upgraden voor meer informatie over hoe u er een toevoegt.

  3. Selecteer in het menu Namespace, voer een Name in en selecteer vervolgens Create.

    Schermopname van de Azure-portal met een naamruimte met de naam test-app die wordt gemaakt op het Fleet Manager-hubcluster.

    Na enkele ogenblikken wordt de pagina vernieuwd en wordt de naamruimte weergegeven in de lijst met naamruimten op het Fleet Manager-hubcluster. Het is nu klaar om resources te hosten die u over de lidclusters wilt distribueren.

  4. Selecteer boven aan de lijst met naamruimten + Maken>Een YAML toepassen en gebruik de volgende voorbeelden.

    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
    

    Kopieer en plak de voorbeelden en pas ze één voor één toe, zoals wordt weergegeven in de volgende afbeelding.

    Schermopname van de Azure-portal met het dialoogvenster Toepassen met YAML ingevuld met een implementatie die klaar is om te worden toegepast op het Fleet Manager-hubcluster.

    De naamruimte en de bijbehorende workloads zijn nu klaar om te worden gedistribueerd naar lidclusters. De implementatie en service worden niet gepland op het Fleet Manager-hubcluster.

  5. Selecteer in het servicemenu onder Fleet Resourcesde optie Resourceplaatsingen>+ Maken.

  6. Configureer de volgende opties op het tabblad Basisbeginselen :

    • Voer in de plaatsingsgegevens een naam in voor de plaatsing.

    • Laat Scope onder Resourcedetails staan als clusterbereik en voer het type groep versie (GVK) en de naam van de resource in die u wilt distribueren. Gebruik in dit voorbeeld de volgende waarden.

      group: ""
      kind: Namespace
      version: v1          
      name: test-app
      
    • Kies bij Selectie van lidcluster voor plaatsingstypeAlle clusters.

    • Laat voor Rollout de strategie Rolling update geselecteerd staan.

    Schermopname van de Azure-portal met het voltooide tabblad Basisbeginselen voor plaatsing van clusterresources voor een naamruimte met de naam test-app.

  7. Selecteer Volgende om het resulterende ClusterResourcePlacement manifest te controleren. U kunt het manifest indien nodig wijzigen, valideren met behulp van de optie Valideren (drooguitvoering) of Beoordelen + maken selecteren om verder te gaan met de definitieve bevestiging.

    Schermopname van het Azure-portal met het tabblad YAML controleren, waarop een geslaagde dry-runvalidatie wordt weergegeven voor plaatsing van resources met clusterbereik voor een naamruimte met de naam test-app.

  8. Selecteer Maken om de distributie van de naamruimte onmiddellijk te starten.

    Schermopname van de Azure-portal waarop het tabblad Beoordelen en maken wordt weergegeven voor de plaatsing van een resource met clusterbereik voor een naamruimte met de naam test-app.

    Note

    De implementatie van de resource begint onmiddellijk wanneer u de plaatsing van de resource toepast met behulp van de geselecteerde RollingUpdate strategie. Zie een uitrolstrategie voor de plaatsing van resources definiëren voor meer informatie over hoe u meer controle kunt krijgen over de uitrol.

  9. De pagina wordt vernieuwd en de lijst Resourceplaatsingen geeft de zojuist gemaakte plaatsing weer. Het toont het aantal geselecteerde clusters en of de vlootplanner aan het plaatsingsbeleid kan voldoen.

    Schermopname van de Azure-portal met de lijst met resourceplaatsingen met één resourceplaatsing met de naam distribute-test-app.

  10. Bekijk de implementatiestatus van de plaatsing door de plaatsingsnaam in de lijst te selecteren. Selecteer afzonderlijke clusters om de uitrol van de resource op dat cluster te bekijken.

    Schermopname van de Azure-portal met de gedetailleerde implementatiegegevens van een resourceplaatsing met de naam distribute-test-app.

Op de geselecteerde Kubernetes-clusters treft u de namespace, Deployment en Service aan, die zijn uitgerold en operationeel zijn.

Verwijder de plaatsing om de bronnen te verwijderen

Wanneer u de plaatsing van resources in het Fleet Manager-hubcluster verwijdert, verwijdert u de gedistribueerde resources uit geselecteerde lidclusters.

kubectl delete clusterresourceplacement distribute-test-app
  1. Selecteer in het servicemenu onder VlootbronnenResourceplaatsingen.

  2. Selecteer de plaatsing in de lijst met resourceplaatsingen en selecteer Verwijderen.

  3. Controleer bij Verwijderen of u de juiste plaatsing hebt gekozen. Wanneer u klaar bent, selecteert u Verwijderen bevestigen>.

    Schermopname van de Azure-portal met een resourceplaatsing met de naam distribute-test-app die wordt verwijderd.

  4. De pagina wordt vernieuwd en de plaatsing wordt niet meer weergegeven in de lijst. De resources worden verwijderd uit lidclusters.

Zie de volgende resources voor meer informatie over de plaatsing van resources: