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.
Přečtěte si koncepční přehled této funkce, která poskytuje vysvětlení
ServiceExport
aMultiClusterService
objekty odkazované v tomto dokumentu.Musíte mít prostředek Fleet s clusterem rozbočovače a členskými clustery. Pokud tento prostředek nemáte, postupujte podle rychlého startu: Vytvořte prostředek flotily a připojte se k členským clusterům.
Cílové clustery Azure Kubernetes Service (AKS), na kterých se úlohy nasazují, musí být přítomné ve stejné virtuální síti nebo v partnerských virtuálních sítích.
- Tyto cílové clustery musí být přidány jako členské clustery do prostředku Fleet.
- Tyto cílové clustery by měly používat sítě Azure CNI (Container Networking Interface).
Přístup k rozhraní KUBERNEtes API centrálního clusteru musíte získat pomocí kroků v rozhraní Kubernetes API clusteru Centra flotily Accessu.
Nastavte následující proměnné prostředí a získejte kubeconfig pro flotilu a všechny členské clustery:
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
Použijte prostředí Bash v Azure Cloud Shellu. Další informace najdete v tématu Rychlý start pro Bash v Azure Cloud Shellu.
Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.
Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení najdete v tématu Přihlášení pomocí Azure CLI.
Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
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.
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
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
V souboru s názvem
crp-2.yaml
vytvořte následujícíClusterResourcePlacement
kód. Všimněte si, že v oblasti vybíráme clusteryeastus
: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
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
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
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)true
a nemá žádné konflikty s jinými exporty (IS-CONFLICT
jefalse
).Poznámka:
Rozšíření serviceExportu může trvat minutu nebo dvě.
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
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ýttrue
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.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
aaks-member-2
zeastus
oblasti. IP adresy podů můžete ověřit spuštěním následujících příkazů v clusterech zeastus
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
Azure Kubernetes Service