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 is' en 'als beschikbaar' en ze worden uitgesloten van de serviceovereenkomsten en beperkte garantie. Previews van Azure Kubernetes Fleet Manager worden gedeeltelijk gedekt door klantondersteuning op basis van best effort. Daarom zijn deze functies niet bedoeld voor productiegebruik.

Vereisten

Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

  • Lees het conceptuele overzicht van deze functie, met een uitleg van ServiceExport en MultiClusterService objecten waarnaar in dit document wordt verwezen.

  • U moet een Fleet-resource hebben met een hubcluster en lidclusters. Als u deze resource niet hebt, volgt u de quickstart : Een Fleet-resource maken en lidclusters koppelen.

  • De AKS-doelclusters (Azure Kubernetes Service) waarop de workloads worden geïmplementeerd, moeten aanwezig zijn in hetzelfde virtuele netwerk of in gekoppelde virtuele netwerken.

  • U moet toegang krijgen tot de Kubernetes-API van het hubcluster door de stappen in de Kubernetes-API van het Access Fleet-hubcluster te volgen.

  • Stel de volgende omgevingsvariabelen in en haal de kubeconfigs op voor de vloot en alle lidclusters:

    export GROUP=<resource-group>
    export FLEET=<fleet-name>
    export MEMBER_CLUSTER_1=aks-member-1
    export MEMBER_CLUSTER_2=aks-member-2
    
    az fleet get-credentials --resource-group ${GROUP} --name ${FLEET} --file fleet
    
    az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_1} --file aks-member-1
    
    az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_2} --file aks-member-2
    

Een workload implementeren in lidclusters van de Fleet-resource

Notitie

  • 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 de objecten Deployment, Service, ServiceExport toe:

    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 ClusterResourcePlacementvolgende:

    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
    

    Uitvoer ziet er ongeveer uit als in 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).

    Notitie

    Het kan een paar minuten duren voordat De ServiceExport is doorgegeven.

  2. Maak MultiClusterService op één lid een taakverdeling voor 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
    

    Notitie

    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 uit als in 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