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
enMultiClusterService
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.
- Deze doelclusters moeten worden toegevoegd als lidclusters aan de Fleet-resource.
- Deze doelclusters moeten gebruikmaken van Azure CNI-netwerken (Container Networking Interface).
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
Gebruik de Bash-omgeving in Azure Cloud Shell. Zie quickstart voor Bash in Azure Cloud Shell voor meer informatie.
Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren. Als u in Windows of macOS werkt, kunt u Azure CLI uitvoeren in een Docker-container. Zie De Azure CLI uitvoeren in een Docker-container voor meer informatie.
Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht az login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij Azure CLI voor aanvullende aanmeldingsopties.
Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.
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.
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
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
Maak het volgende
ClusterResourcePlacement
in een bestand met de naamcrp-2.yaml
. U ziet dat we clusters in deeastus
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
Pas het
ClusterResourcePlacement
volgende 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
Controleer de status van het
ClusterResourcePlacement
volgende: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
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 istrue
) en geen conflicten heeft met andere exports (IS-CONFLICT
isfalse
).Notitie
Het kan een paar minuten duren voordat De ServiceExport is doorgegeven.
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
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 staantrue
. 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.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
enaks-member-2
van deeastus
regio. U kunt de IP-adressen van pods controleren door de volgende opdrachten uit te voeren op de clusters vanuiteastus
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
Azure Kubernetes Service