Delen via


Taakverdeling met meerdere clusters op laag 4 instellen in Azure Kubernetes Fleet Manager-lidclusters (preview)

Voor toepassingen die in meerdere clusters zijn geïmplementeerd, willen beheerders vaak binnenkomend verkeer naar deze clusters routeren.

U kunt dit document volgen om laag 4-taakverdeling in te stellen voor dergelijke toepassingen met meerdere clusters.

Belangrijk

Preview-functies van Azure Kubernetes Fleet Manager zijn beschikbaar op basis van selfservice, opt-in. Previews worden geleverd 'zoals het is' en 'voor zover beschikbaar' en zijn uitgesloten van de serviceovereenkomsten en beperkte garantie. Previews van Azure Kubernetes Fleet Manager worden gedeeltelijk gedekt door klantondersteuning op basis van best effort. Zodoende zijn deze functies niet bedoeld voor productiegebruik.

Vereiste voorwaarden

Als u geen Azure-account hebt, maak dan een gratis account aan voordat u begint.

Een workload implementeren in lidclusters van de Fleet-resource

Opmerking

  • De stappen in deze handleiding verwijzen alleen naar een voorbeeldtoepassing voor demonstratiedoeleinden. U kunt deze workload vervangen door een van uw eigen bestaande implementatie- en serviceobjecten.

  • Met deze stappen implementeert u de voorbeeldworkload van het Fleet-cluster naar lidclusters met behulp van kubernetes-configuratiedoorgifte. U kunt er ook voor kiezen om deze Kubernetes-configuraties afzonderlijk te implementeren in elk lidcluster, één voor één.

  1. Maak een naamruimte in het vlootcluster:

    KUBECONFIG=fleet kubectl create namespace kuard-demo
    

    Uitvoer ziet er ongeveer uit als in het volgende voorbeeld:

    namespace/kuard-demo created
    
  2. Pas toe op de objecten Deployment, Service, ServiceExport:

    KUBECONFIG=fleet kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-export-service.yaml
    

    Met de ServiceExport specificatie in het bovenstaande bestand kunt u een service exporteren van lidclusters naar de Fleet-resource. Zodra het exporteren is voltooid, worden de service en alle eindpunten gesynchroniseerd met het vlootcluster en kunnen ze vervolgens worden gebruikt om taakverdeling voor meerdere clusters in te stellen voor deze eindpunten. De uitvoer ziet er ongeveer als volgt uit:

    deployment.apps/kuard created
    service/kuard created
    serviceexport.networking.fleet.azure.com/kuard created
    
  3. Maak het volgende ClusterResourcePlacement in een bestand met de naam crp-2.yaml. U ziet dat we clusters in de eastus regio selecteren:

    apiVersion: placement.kubernetes-fleet.io/v1
    kind: ClusterResourcePlacement
    metadata:
      name: kuard-demo
    spec:
      resourceSelectors:
        - group: ""
          version: v1
          kind: Namespace
          name: kuard-demo
      policy:
        affinity:
          clusterAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              clusterSelectorTerms:
                - labelSelector:
                    matchLabels:
                      fleet.azure.com/location: eastus
    
  4. Pas het ClusterResourcePlacementvolgende toe:

    KUBECONFIG=fleet kubectl apply -f crp-2.yaml
    

    Als dit lukt, ziet de uitvoer er ongeveer als volgt uit:

    clusterresourceplacement.placement.kubernetes-fleet.io/kuard-demo created
    
  5. Controleer de status van het ClusterResourcePlacement.

    KUBECONFIG=fleet kubectl get clusterresourceplacements
    

    Als dit lukt, ziet de uitvoer er ongeveer als volgt uit:

    NAME            GEN   SCHEDULED   SCHEDULEDGEN   APPLIED   APPLIEDGEN   AGE
    kuard-demo      1     True        1              True      1            20s
    

MultiClusterService maken om de taakverdeling te verdelen over de service-eindpunten in meerdere lidclusters

  1. Controleer of de service is geëxporteerd voor de lidclusters in eastus de regio:

    KUBECONFIG=aks-member-1 kubectl get serviceexport kuard --namespace kuard-demo
    

    Uitvoer ziet er ongeveer uit als in het volgende voorbeeld:

    NAME    IS-VALID   IS-CONFLICTED   AGE
    kuard   True       False           25s
    
    KUBECONFIG=aks-member-2 kubectl get serviceexport kuard --namespace kuard-demo
    

    De uitvoer ziet er ongeveer zo uit als het volgende voorbeeld:

    NAME    IS-VALID   IS-CONFLICTED   AGE
    kuard   True       False           55s
    

    U ziet dat de service geldig is voor export (IS-VALID veld is true) en geen conflicten heeft met andere exports (IS-CONFLICT is false).

    Opmerking

    Het kan een minuut of twee duren voordat de ServiceExport is doorgegeven.

  2. Maak MultiClusterService op één lid om het laden te verdelen over de service-eindpunten in deze clusters.

    KUBECONFIG=aks-member-1 kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-mcs.yaml
    

    Opmerking

    Als u de service beschikbaar wilt maken via het interne IP-adres in plaats van een openbare, voegt u de aantekening toe aan de MultiClusterService:

    apiVersion: networking.fleet.azure.com/v1alpha1
    kind: MultiClusterService
    metadata:
      name: kuard
      namespace: kuard-demo
      annotations:
         service.beta.kubernetes.io/azure-load-balancer-internal: "true"
      ...
    

    Uitvoer ziet er ongeveer zo uit als het volgende voorbeeld:

    multiclusterservice.networking.fleet.azure.com/kuard created
    
  3. Controleer of de MultiClusterService geldig is door de volgende opdracht uit te voeren:

    KUBECONFIG=aks-member-1 kubectl get multiclusterservice kuard --namespace kuard-demo
    

    De uitvoer moet er als in het volgende voorbeeld uitzien:

    NAME    SERVICE-IMPORT   EXTERNAL-IP     IS-VALID   AGE
    kuard   kuard            <a.b.c.d>       True       40s
    

    Het IS-VALID veld moet in de uitvoer staan true . Bekijk het IP-adres van de externe load balancer (EXTERNAL-IP) in de uitvoer. Het kan even duren voordat het importeren volledig wordt verwerkt en het IP-adres beschikbaar is.

  4. Voer de volgende opdracht meerdere keren uit met behulp van het IP-adres van de externe load balancer:

    curl <a.b.c.d>:8080 | grep addrs 
    

    U ziet dat de IP-adressen van de pods die de aanvraag verwerken, worden gewijzigd en dat deze pods afkomstig zijn van lidclusters aks-member-1 en aks-member-2 van de eastus regio. U kunt de IP-adressen van pods controleren door de volgende opdrachten uit te voeren op de clusters vanuit eastus de regio:

    KUBECONFIG=aks-member-1 kubectl get pods -n kuard-demo -o wide
    
    KUBECONFIG=aks-member-2 kubectl get pods -n kuard-demo -o wide