Konfigurowanie równoważenia obciążenia w warstwie 4 wielu klastrów w klastrach członkowskich usługi Azure Kubernetes Fleet Manager (wersja zapoznawcza)

W przypadku aplikacji wdrożonych w wielu klastrach administratorzy często chcą kierować ruch przychodzący do nich między klastrami.

W tym dokumencie można skonfigurować równoważenie obciążenia warstwy 4 dla takich aplikacji wieloklasowych.

Ważne

Funkcje usługi Azure Kubernetes Fleet Manager w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi Azure Kubernetes Fleet Manager są częściowo objęte pomocą techniczną w oparciu o najlepsze nakłady pracy. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego.

Wymagania wstępne

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

  • Zapoznaj się z koncepcyjnym omówieniem tej funkcji, która zawiera wyjaśnienie i MultiClusterServiceServiceExport obiekty, do których odwołuje się ten dokument.

  • Musisz mieć zasób Fleet z klastrem centrum i klastrami składowymi. Jeśli nie masz tego zasobu, postępuj zgodnie z przewodnikiem Szybki start: tworzenie zasobu floty i dołączanie do klastrów członkowskich.

  • Docelowe klastry usługi Azure Kubernetes Service (AKS), w których wdrażane obciążenia muszą być obecne w tej samej sieci wirtualnej lub w równorzędnych sieciach wirtualnych.

  • Aby uzyskać dostęp do interfejsu API platformy Kubernetes klastra koncentratora, wykonaj kroki opisane w temacie Uzyskiwanie dostępu do interfejsu API Kubernetes zasobu Fleet.

  • Ustaw następujące zmienne środowiskowe i uzyskaj konfiguracje kubeconfig dla floty i wszystkich klastrów członkowskich:

    export GROUP=<resource-group>
    export FLEET=<fleet-name>
    export MEMBER_CLUSTER_1=aks-member-1
    
    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
    

Wdrażanie obciążenia w klastrach członkowskich zasobu Fleet

Uwaga

  • Kroki opisane w tym przewodniku z instrukcjami dotyczą tylko przykładowej aplikacji do celów demonstracyjnych. To obciążenie można zastąpić dowolnym z istniejących obiektów wdrożenia i usługi.

  • Te kroki umożliwiają wdrożenie przykładowego obciążenia z klastra Fleet do klastrów członkowskich przy użyciu propagacji konfiguracji platformy Kubernetes. Alternatywnie możesz wdrożyć te konfiguracje platformy Kubernetes w każdym klastrze członkowskim oddzielnie, pojedynczo.

  1. Utwórz przestrzeń nazw w klastrze floty:

    KUBECONFIG=fleet kubectl create namespace kuard-demo
    

    Dane wyjściowe wyglądają podobnie do następującego przykładu:

    namespace/kuard-demo created
    
  2. Zastosuj obiekty Deployment, Service, ServiceExport:

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

    Specyfikacja ServiceExport w powyższym pliku umożliwia eksportowanie usługi z klastrów członkowskich do zasobu Fleet. Po pomyślnym wyeksportowaniu usługa i wszystkie jej punkty końcowe są synchronizowane z klastrem floty, a następnie mogą służyć do konfigurowania równoważenia obciążenia wielu klastrów w tych punktach końcowych. Dane wyjściowe wyglądają podobnie do następującego przykładu:

    deployment.apps/kuard created
    service/kuard created
    serviceexport.networking.fleet.azure.com/kuard created
    
  3. Utwórz następujący kod ClusterResourcePlacement w pliku o nazwie crp-2.yaml. Zwróć uwagę, że wybieramy klastry w eastus regionie:

    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. Zastosuj element ClusterResourcePlacement:

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

    W przypadku powodzenia dane wyjściowe wyglądają podobnie do następującego przykładu:

    clusterresourceplacement.placement.kubernetes-fleet.io/kuard-demo created
    
  5. Sprawdź stan elementu ClusterResourcePlacement:

    KUBECONFIG=fleet kubectl get clusterresourceplacements
    

    W przypadku powodzenia dane wyjściowe wyglądają podobnie do następującego przykładu:

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

Tworzenie usługi MultiClusterService w celu równoważenia obciążenia między punktami końcowymi usługi w wielu klastrach członkowskich

  1. Sprawdź, czy usługa została pomyślnie wyeksportowana dla klastrów członkowskich w eastus regionie:

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

    Dane wyjściowe wyglądają podobnie do następującego przykładu:

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

    Dane wyjściowe wyglądają podobnie do następującego przykładu:

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

    Powinna być widoczna, że usługa jest prawidłowa dla eksportu (IS-VALID pole to true) i nie ma konfliktów z innymi eksportami (IS-CONFLICT to false).

    Uwaga

    Propagacja elementu ServiceExport może potrwać minutę lub dwie.

  2. Utwórz MultiClusterService na jednym elemencie członkowskim, aby równoważyć obciążenie między punktami końcowymi usługi w tych klastrach:

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

    Uwaga

    Aby uwidocznić usługę za pośrednictwem wewnętrznego adresu IP zamiast publicznego, dodaj adnotację do funkcji 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"
      ...
    

    Dane wyjściowe wyglądają podobnie do następującego przykładu:

    multiclusterservice.networking.fleet.azure.com/kuard created
    
  3. Sprawdź, czy funkcja MultiClusterService jest prawidłowa, uruchamiając następujące polecenie:

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

    Dane wyjściowe powinny wyglądać mniej więcej tak jak w tym przykładzie:

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

    Pole IS-VALID powinno znajdować się true w danych wyjściowych. Sprawdź zewnętrzny adres IP modułu równoważenia obciążenia (EXTERNAL-IP) w danych wyjściowych. Zanim import zostanie w pełni przetworzony, może upłynąć trochę czasu, a adres IP stanie się dostępny.

  4. Uruchom następujące polecenie wiele razy przy użyciu zewnętrznego adresu IP modułu równoważenia obciążenia:

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

    Zwróć uwagę, że adresy IP zasobników obsługujących żądanie zmieniają się i że te zasobniki pochodzą z klastrów aks-member-1 członkowskich i aks-member-2 z eastus regionu. Adresy IP zasobników można zweryfikować, uruchamiając następujące polecenia w klastrach z eastus regionu:

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