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
MultiClusterService
ServiceExport
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.
- Te klastry docelowe muszą zostać dodane jako klastry członkowskie do zasobu Fleet.
- Te klastry docelowe powinny używać sieci azure CNI (Container Networking Interface).
Aby uzyskać dostęp do interfejsu API kubernetes klastra koncentratora, wykonaj kroki opisane w temacie Access Fleet Hub cluster Kubernetes API (Interfejs API Kubernetes klastra usługi Kubernetes w usłudze Access Fleet Hub).
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 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
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
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.
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
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
Utwórz następujący kod
ClusterResourcePlacement
w pliku o nazwiecrp-2.yaml
. Zwróć uwagę, że wybieramy klastry weastus
regionie: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
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
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
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 totrue
) i nie ma konfliktów z innymi eksportami (IS-CONFLICT
tofalse
).Uwaga
Propagacja elementu ServiceExport może potrwać minutę lub dwie.
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
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.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 iaks-member-2
zeastus
regionu. Adresy IP zasobników można zweryfikować, uruchamiając następujące polecenia w klastrach zeastus
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
Azure Kubernetes Service