Konfigurera 4-belastningsutjämning för flera kluster i Azure Kubernetes Fleet Manager-medlemskluster (förhandsversion)
För program som distribueras över flera kluster vill administratörer ofta dirigera inkommande trafik till dem mellan kluster.
Du kan följa det här dokumentet för att konfigurera lager 4-belastningsutjämning för sådana program med flera kluster.
Viktigt!
Förhandsversionsfunktionerna i Azure Kubernetes Fleet Manager är tillgängliga via självbetjäning och opt-in. Förhandsversioner tillhandahålls "som är" och "som tillgängliga", och de undantas från serviceavtalen och den begränsade garantin. Förhandsversioner av Azure Kubernetes Fleet Manager omfattas delvis av kundsupport på bästa sätt. Därför är dessa funktioner inte avsedda för produktionsanvändning.
Förutsättningar
Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
Läs den konceptuella översikten över den här funktionen, som innehåller en förklaring av
ServiceExport
ochMultiClusterService
objekt som refereras i det här dokumentet.Du måste ha en fleet-resurs med ett hubbkluster och medlemskluster. Om du inte har den här resursen följer du Snabbstart: Skapa en fleet-resurs och anslut medlemskluster.
Målkluster för Azure Kubernetes Service (AKS) som arbetsbelastningarna distribueras på måste finnas i antingen samma virtuella nätverk eller i peerkopplade virtuella nätverk.
- Dessa målkluster måste läggas till som medlemskluster i fleet-resursen.
- Dessa målkluster bör använda Azure CNI-nätverk (Container Networking Interface).
Du måste få åtkomst till Kubernetes-API:et för hubbklustret genom att följa stegen i Kubernetes-API:et för Access Fleet Hub-klustret.
Ange följande miljövariabler och hämta kubeconfigs för flottan och alla medlemskluster:
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
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
Distribuera en arbetsbelastning mellan medlemskluster i fleet-resursen
Kommentar
Stegen i den här guiden refererar endast till ett exempelprogram i demonstrationssyfte. Du kan ersätta den här arbetsbelastningen med något av dina egna befintliga distributions- och tjänstobjekt.
De här stegen distribuerar exempelarbetsbelastningen från Fleet-klustret till medlemskluster med kubernetes-konfigurationsspridning. Du kan också välja att distribuera dessa Kubernetes-konfigurationer till varje medlemskluster separat, en i taget.
Skapa ett namnområde i vagnparksklustret:
KUBECONFIG=fleet kubectl create namespace kuard-demo
Utdata ser ut ungefär som i följande exempel:
namespace/kuard-demo created
Använd objekten Deployment, Service, ServiceExport:
KUBECONFIG=fleet kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-export-service.yaml
Med
ServiceExport
specifikationen i filen ovan kan du exportera en tjänst från medlemskluster till Fleet-resursen. När den har exporterats synkroniseras tjänsten och alla dess slutpunkter till vagnparksklustret och kan sedan användas för att konfigurera belastningsutjämning för flera kluster mellan dessa slutpunkter. Utdata ser ut ungefär som i följande exempel:deployment.apps/kuard created service/kuard created serviceexport.networking.fleet.azure.com/kuard created
Skapa följande
ClusterResourcePlacement
i en fil med namnetcrp-2.yaml
. Observera att vi väljer kluster ieastus
regionen: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
ClusterResourcePlacement
Använd :KUBECONFIG=fleet kubectl apply -f crp-2.yaml
Om det lyckas ser utdata ut ungefär som i följande exempel:
clusterresourceplacement.placement.kubernetes-fleet.io/kuard-demo created
Kontrollera statusen för
ClusterResourcePlacement
:KUBECONFIG=fleet kubectl get clusterresourceplacements
Om det lyckas ser utdata ut ungefär som i följande exempel:
NAME GEN SCHEDULED SCHEDULEDGEN APPLIED APPLIEDGEN AGE kuard-demo 1 True 1 True 1 20s
Skapa MultiClusterService för belastningsutjämning över tjänstslutpunkterna i flera medlemskluster
Kontrollera om tjänsten har exporterats för medlemskluster i
eastus
regionen:KUBECONFIG=aks-member-1 kubectl get serviceexport kuard --namespace kuard-demo
Utdata ser ut ungefär som i följande exempel:
NAME IS-VALID IS-CONFLICTED AGE kuard True False 25s
KUBECONFIG=aks-member-2 kubectl get serviceexport kuard --namespace kuard-demo
Utdata ser ut ungefär som i följande exempel:
NAME IS-VALID IS-CONFLICTED AGE kuard True False 55s
Du bör se att tjänsten är giltig för export (
IS-VALID
fältet ärtrue
) och inte har några konflikter med andra exporter (IS-CONFLICT
ärfalse
).Kommentar
Det kan ta en minut eller två innan ServiceExport sprids.
Skapa
MultiClusterService
på en medlem för att belastningsutjämning över tjänstslutpunkterna i dessa kluster:KUBECONFIG=aks-member-1 kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-mcs.yaml
Kommentar
Om du vill exponera tjänsten via den interna IP-adressen i stället för en offentlig lägger du till kommentaren i 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" ...
Utdata ser ut ungefär som i följande exempel:
multiclusterservice.networking.fleet.azure.com/kuard created
Kontrollera att MultiClusterService är giltigt genom att köra följande kommando:
KUBECONFIG=aks-member-1 kubectl get multiclusterservice kuard --namespace kuard-demo
Utdata bör se ut ungefär som följande exempel:
NAME SERVICE-IMPORT EXTERNAL-IP IS-VALID AGE kuard kuard <a.b.c.d> True 40s
Fältet
IS-VALID
ska finnastrue
i utdata. Kolla in ip-adressen för den externa lastbalanseraren (EXTERNAL-IP
) i utdata. Det kan ta en stund innan importen bearbetas fullständigt och IP-adressen blir tillgänglig.Kör följande kommando flera gånger med ip-adressen för den externa lastbalanseraren:
curl <a.b.c.d>:8080 | grep addrs
Observera att IP-adresserna för poddarna som betjänar begäran ändras och att dessa poddar kommer från medlemskluster
aks-member-1
ochaks-member-2
fråneastus
regionen. Du kan verifiera podd-IP-adresserna genom att köra följande kommandon i klustren fråneastus
regionen: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