Nastavení vyrovnávání zatížení vrstvy 4 s více clustery napříč členskými clustery Azure Kubernetes Fleet Manageru (Preview)

U aplikací nasazených v několika clusterech chtějí správci často směrovat příchozí provoz do nich napříč clustery.

Podle tohoto dokumentu můžete nastavit vyrovnávání zatížení vrstvy 4 pro takové aplikace s více clustery.

Důležité

Funkce Azure Kubernetes Fleet Manageru ve verzi Preview jsou dostupné na samoobslužné bázi s výslovným souhlasem. Verze Preview jsou poskytovány "tak, jak jsou" a "dostupné", a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Verze Preview Azure Kubernetes Fleet Manageru jsou částečně pokryty zákaznickou podporou na základě maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití.

Požadavky

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.

Nasazení úlohy napříč členskými clustery prostředku Fleet

Poznámka:

  • Kroky v tomto návodu odkazují pouze na ukázkovou aplikaci pro demonstrační účely. Tuto úlohu můžete nahradit libovolnými vlastními existujícími objekty nasazení a služby.

  • Tyto kroky nasadí ukázkovou úlohu z clusteru Fleet do členských clusterů pomocí šíření konfigurace Kubernetes. Alternativně se můžete rozhodnout nasadit tyto konfigurace Kubernetes do jednotlivých členských clusterů zvlášť po jednom.

  1. Vytvořte obor názvů v clusteru flotily:

    KUBECONFIG=fleet kubectl create namespace kuard-demo
    

    Výstup vypadá podobně jako v následujícím příkladu:

    namespace/kuard-demo created
    
  2. Použijte objekty Deployment, Service, ServiceExport:

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

    Specifikace ServiceExport ve výše uvedeném souboru umožňuje exportovat službu z členských clusterů do prostředku Fleet. Po úspěšném exportu se služba a všechny její koncové body synchronizují do clusteru vozového parku a pak se dají použít k nastavení vyrovnávání zatížení s více clustery napříč těmito koncovými body. Výstup vypadá podobně jako v následujícím příkladu:

    deployment.apps/kuard created
    service/kuard created
    serviceexport.networking.fleet.azure.com/kuard created
    
  3. V souboru s názvem crp-2.yamlvytvořte následující ClusterResourcePlacement kód. Všimněte si, že v oblasti vybíráme clustery eastus :

    apiVersion: placement.kubernetes-fleet.io/v1beta1
    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. Použijte:ClusterResourcePlacement

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

    Pokud je výstup úspěšný, vypadá podobně jako v následujícím příkladu:

    clusterresourceplacement.placement.kubernetes-fleet.io/kuard-demo created
    
  5. Zkontrolujte stav :ClusterResourcePlacement

    KUBECONFIG=fleet kubectl get clusterresourceplacements
    

    Pokud je výstup úspěšný, vypadá podobně jako v následujícím příkladu:

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

Vytvoření služby MultiClusterService pro vyrovnávání zatížení mezi koncovými body služby v několika členských clusterech

  1. Zkontrolujte, jestli je služba úspěšně exportována pro členské clustery v eastus oblasti:

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

    Výstup vypadá podobně jako v následujícím příkladu:

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

    Výstup vypadá podobně jako v následujícím příkladu:

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

    Měli byste vidět, že služba je platná pro export (IS-VALID pole) truea nemá žádné konflikty s jinými exporty (IS-CONFLICT je false).

    Poznámka:

    Rozšíření serviceExportu může trvat minutu nebo dvě.

  2. Vytvořte MultiClusterService na jednom členu, který bude vyrovnávat zatížení mezi koncovými body služby v těchto clusterech:

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

    Poznámka:

    Pokud chcete službu zveřejnit prostřednictvím interní IP adresy místo veřejné, přidejte poznámku do 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"
      ...
    

    Výstup vypadá podobně jako v následujícím příkladu:

    multiclusterservice.networking.fleet.azure.com/kuard created
    
  3. Spuštěním následujícího příkazu ověřte platnost služby MultiClusterService:

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

    Výstup by měl vypadat zhruba jako v tomto příkladu:

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

    Pole IS-VALID by mělo být true ve výstupu. Ve výstupu se podívejte na IP adresu externího nástroje pro vyrovnávání zatížení .EXTERNAL-IP Než se import plně zpracuje a IP adresa bude k dispozici, může to chvíli trvat.

  4. Pomocí IP adresy externího nástroje pro vyrovnávání zatížení spusťte několikrát následující příkaz:

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

    Všimněte si, že IP adresy podů obsluhujících žádost se mění a že tyto pody pocházejí z členských clusterů aks-member-1 a aks-member-2 z eastus oblasti. IP adresy podů můžete ověřit spuštěním následujících příkazů v clusterech z eastus oblasti:

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