Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Azure Kubernetes Service (AKS) obvykle zřizuje jeden Standard Load Balancer (SLB) pro všechny LoadBalancer služby v clusteru. Vzhledem k tomu, že každá síťová karta uzlu je omezená na 300 pravidel vyrovnávání zatížení a 8 služeb privátních propojení, můžou velké clustery nebo úlohy náročné na porty tyto limity rychle vyčerpat.
Ukázka s více SLB odstraňuje toto úzké místo tím, že vám umožní vytvořit několik SLB ve stejném clusteru a rozdělit uzly a služby napříč nimi. Definujete konfigurace load balanceru, z nichž každá je spojena s primárním fondem agentů a volitelným jmenným prostorem, štítkem nebo selektory uzlů – a AKS automaticky umístí uzly a služby do příslušného SLB. Chování odchozího SNAT je beze změny, pokud outboundType je loadBalancer. Odchozí provoz stále prochází přes první SLB.
Pomocí této funkce můžete:
- Škálování nad rámec 300 příchozích pravidel bez přidání clusterů
- Izolujte provoz tenanta nebo úlohy tím, že přiřadíte dedikovaný SLB jeho vlastnímu poolu agentů.
- Při přístupu k limitu pro jednotlivé služby SLB distribuujte služby privátního propojení napříč několika smlouvami SLA.
Požadavky
-
aks-previewrozšíření 18.0.0b1 nebo novější. - Příznak funkce předplatného
Microsoft.ContainerService/MultipleStandardLoadBalancersPreviewbyl registrován. - Kubernetes verze 1.28 nebo novější
- Cluster vytvořený pomocí
--load-balancer-backend-pool-type nodeIPnebo aktualizovaný existující cluster pomocíaz aks update.
Instalace rozšíření Azure CLI aks-Preview
Důležité
Funkce AKS ve verzi Preview jsou k dispozici na bázi samoobsluhy a dobrovolného přihlášení. Ukázky jsou poskytovány "jak jsou" a "podle aktuální dostupnosti" a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Předběžné verze AKS jsou částečně pokryty zákaznickou podporou podle možností. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:
Nainstalujte rozšíření aks-preview pomocí
az extension addpříkazu.az extension add --name aks-previewAktualizujte na nejnovější verzi rozšíření pomocí příkazu
az extension update.az extension update --name aks-preview
Zaregistruj příznak funkce MultipleStandardLoadBalancersPreview
Příznak funkce
MultipleStandardLoadBalancersPreviewzaregistrujte pomocí příkazuaz feature register.az feature register --namespace "Microsoft.ContainerService" --name "MultipleStandardLoadBalancersPreview"Zobrazení stavu Zaregistrované trvá několik minut.
Pomocí příkazu ověřte stav
az feature showregistrace:az feature show --namespace "Microsoft.ContainerService" --name "MultipleStandardLoadBalancersPreview"Jakmile se stav projeví jako zaregistrovaný, aktualizujte registraci poskytovatele prostředků Microsoft.ContainerService pomocí
az provider registerpříkazu.az provider register --namespace Microsoft.ContainerService
Jak AKS zvolí nástroj pro vyrovnávání zatížení (umístění uzlu a služby)
AKS používá více vstupů k určení umístění uzlů a zveřejnění služeb LoadBalancer Services. Tyto vstupy jsou definovány v každé konfiguraci nástroje pro vyrovnávání zatížení a ovlivňují, který nástroj pro vyrovnávání zatížení je vybrán pro každý prostředek.
| Typ vstupu | Vztahuje se na | Popis |
|---|---|---|
Primární fond agentů--primary-agent-pool-name |
Nodes | Povinné. Všechny uzly v tomto fondu se vždy přidají do back-endového fondu SLB. Zajišťuje, že každý SLB má alespoň jeden uzel, který je v pořádku. |
Selektor uzlu--node-selector |
Nodes | Volitelný. Přidá do softwarového nástroje pro vyrovnávání zatížení (SLB), kromě primárního fondu, jakýkoli uzel s odpovídajícími štítky. |
Selektor oboru názvů služby--service-namespace-selector |
Služby | Volitelný. Pro SLB se považují pouze služby ve jmenných prostorech s odpovídajícími štítky. |
Selektor popisků služeb--service-label-selector |
Služby | Volitelný. Pro tento SLB jsou způsobilé pouze služby s odpovídajícími štítky. |
Poznámka ke služběservice.beta.kubernetes.io/azure-load-balancer-configurations |
Služby | Volitelný. Omezuje přiřazení na jednu nebo více konkrétně pojmenovaných konfigurací SLB. Bez něj je vhodná jakákoli odpovídající konfigurace. |
Poznámka:
Selektory definují způsobilost. Anotace (pokud se používá) omezuje kontroler na konkrétní podmnožinu SLB.
Jak AKS používá tyto vstupy
Řídicí rovina AKS průběžně synchronizuje uzly a stav služby pomocí výše uvedených pravidel:
Umístění uzlu
Když se uzel přidá nebo aktualizuje, AKS zkontroluje, pro které sady SLA se kvalifikuje na základě primárního fondu a selektoru uzlů.
- Pokud se shoduje více jednotek SLB, řadič vybere tu s nejmenším počtem aktuálních uzlů.
- Uzel je přidán do fondu backendu SLB.
Umístění služby
Při vytvoření nebo aktualizaci služby LoadBalancer:
- AKS najde SLB, jejichž jmenný prostor a selektory štítků odpovídají službě.
- Pokud je přítomna anotace služby, zvažují se pouze tyto pojmenované SLB.
- Smlouvy SLA, které mají allowServicePlacement=false nebo které by překročily limity Azure (300 pravidel nebo 8 služeb private-link) jsou vyloučené.
- Mezi platnými možnostmi je zvolen Server Load Balancer s nejmenším počtem pravidel.
externalTrafficPolicy (ETP) – chování
AKS zpracovává služby odlišně v závislosti na hodnotě externalTrafficPolicy.
| Režim | Jak funguje výběr nástroje pro vyrovnávání zatížení | Jak se sestavuje členství v backendovém poolu | Poznámky |
|---|---|---|---|
| Cluster (výchozí) | Kontroler se řídí standardními pravidly umístění popsanými výše. Jedno pravidlo vyrovnávání zatížení cílí na sdílený fond backendů Kubernetes ve zvoleném nástroji SLB (Server Load Balancer) pro vyrovnávání zatížení. | Všechny uzly ve fondu SLB kubernetes jsou zdravé cíle. Uzly bez odpovídajících podů jsou automaticky odstraněny zdravotními kontrolami. |
Stejné chování jako dnes v clusterech s jedním SLB. |
| Místní | Kontroler stále používá selektorový algoritmus k výběru SLB, ale místo použití sdíleného poolu vytvoří vyhrazený back-endový pool pro každou službu. | Členství se synchronizuje z objektů služby EndpointSlice , takže se přidají jenom uzly, které skutečně hostují připravené pody. Sondy stavu se nadále používají healthCheckNodePort k vyřazení uzlů, které nejsou v pořádku. |
Zaručuje zachování IP adres klienta a vyhne se směrování přes uzly, které nemají pody, i když jsou uzly horizontálně dělené napříč několika smlouvami SLA. |
Proč vyhrazený bazén pro ETP Local?
V režimu multi-SLB se uzly, které hostí pody pro danou službu, mohou nacházet na různých SLB, které se liší od klientsky orientované VIP. Sdílený back-endový fond by často mohl neobsahovat žádné oprávněné uzly, což naruší provoz. Přidělením fondu specifického pro službu a jeho synchronizací zeEndpointSlicezajistí AKS, že SLB služby vždy směřuje ke správným uzlům.
Dopad na kvóty
- Každá místní služba ETP přidá do svého SLB jeden back-endový fond a jedno pravidlo rozložení zátěže.
- Tyto hodnoty se započítávají do limitu 300 pravidel, takže sledujte využití pravidel, pokud máte mnoho místních služeb ETP.
Žádná změna odchozího provozu
Odchozí SNAT stále prochází prvním nástrojem SLB aksOutboundBackendPool , když outboundType je loadBalancer, nezávisle na nastavení protokolu ETP.
Volitelné: Vyrovnávání
Distribuci uzlů můžete později ručně znovu vyvážit pomocí az aks loadbalancer rebalance.
Tento návrh umožňuje definovat flexibilní směrování řízené nálepkami pro infrastrukturu i úlohy, zatímco AKS automaticky zpracovává umístění pro zachování rovnováhy a zabránění problémům s kvótami.
Přidání první konfigurace nástroje pro vyrovnávání zatížení
Přidejte konfiguraci s názvem kubernetes a vytvořte vazbu s primárním fondem agentů, který má vždy alespoň jeden uzel. Odebrání každé konfigurace přepne cluster zpět do režimu s jedním serverovým load balancerem (SLB).
Důležité
Pokud chcete povolit režim multiple-SLB, musíte přidat konfiguraci nástroje pro vyrovnávání zatížení s názvem kubernetes a připojit ji k primárnímu fondu agentů, který má vždy alespoň jeden připravený uzel.
Přítomnost této konfigurace přepíná podporu více SLB; ve výběru služby nemá žádnou zvláštní prioritu a považuje se za jakoukoli jinou konfiguraci nástroje pro vyrovnávání zatížení.
Pokud odstraníte každou konfiguraci vyrovnávače zatížení, cluster se automaticky vrátí do režimu s jedním SLB, což může krátce narušit směrování služeb nebo toky SNAT.
Nastavte proměnné prostředí pro použití během tohoto tutoriálu. Všechny zástupné hodnoty můžete nahradit vlastními hodnotami s výjimkou
DEFAULT_LB_NAME, které musí zůstat jakokubernetes.RESOURCE_GROUP="rg-aks-multislb" CLUSTER_NAME="aks-multi-slb" LOCATION="westus" DEFAULT_LB_NAME="kubernetes" PRIMARY_POOL="nodepool1"Pomocí příkazu
az group createvytvořte skupinu prostředků.az group create --name $RESOURCE_GROUP --location $LOCATIONVytvořte cluster AKS pomocí
az aks createpříkazu.\az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME \ --load-balancer-backend-pool-type nodeIP \ --node-count 3Přidejte výchozí vyrovnávač zatížení pomocí příkazu
az aks loadbalancer add.az aks loadbalancer add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME \ --name $DEFAULT_LB_NAME \ --primary-agent-pool-name $PRIMARY_POOL \ --allow-service-placement true
Přidání dalších nástrojů pro vyrovnávání zatížení
Vytvořte konfigurace specifické pro tenanta zadáním jiného primárního poolu a volitelných oborů názvů, štítků nebo selektorů uzlů.
Tým 1 bude spouštět vlastní úlohy v samostatném fondu uzlů. Přiřaďte
tenant=team1popisek, aby bylo možné úlohy naplánovat pomocí selektorů:TEAM1_POOL="team1pool" TEAM1_LB_NAME="team1-lb"Pomocí příkazu
az aks nodepool addvytvořte druhý fond uzlů pro tým 1.az aks nodepool add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME \ --name $TEAM1_POOL \ --labels tenant=team1 \ --node-count 2Pomocí příkazu vytvořte nástroj pro vyrovnávání zatížení pro tým 1
az aks loadbalancer add.az aks loadbalancer add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME \ --name $TEAM1_LB_NAME \ --primary-agent-pool-name $TEAM1_POOL \ --service-namespace-selector "tenant=team1" \ --node-selector "tenant=team1"Pomocí příkazu
team1-appsoznačte cílový obor názvů (např.az aks command invoke) tak, aby odpovídal selektoru.az aks command invoke \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --command " kubectl create namespace team1-apps --dry-run=client -o yaml | kubectl apply -f - kubectl label namespace team1-apps tenant=team1 --overwrite "Pomocí příkazu teď můžete zobrazit seznam nástrojů pro vyrovnávání zatížení v clusteru
az aks loadbalancer list, abyste viděli více konfigurací.az aks loadbalancer list --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --output tablePříklad výstupu:
AllowServicePlacement ETag Name PrimaryAgentPoolName ProvisioningState ResourceGroup ----------------------- ------- ---------- ---------------------- ------------------- --------------- True <ETAG> kubernetes nodepool1 Succeeded rg-aks-multislb True <ETAG> team1-lb team1pool Succeeded rg-aks-multislb
Nasazení služby do konkrétního nástroje pro vyrovnávání zatížení
Přidejte poznámku service.beta.kubernetes.io/azure-load-balancer-configurations se seznamem názvů konfigurací oddělených čárkami. Pokud je anotace vynechána, ovladač se vybere automaticky.
az aks command invoke \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--command "
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
name: lb-svc-1
namespace: team1-apps
labels:
app: nginx-test
annotations:
service.beta.kubernetes.io/azure-load-balancer-configurations: \"team1-lb\"
# service.beta.kubernetes.io/azure-load-balancer-internal: "true" # If you want to create an internal load balancer.
spec:
selector:
app: nginx-test
ports:
- name: port1
port: 80
targetPort: 80
protocol: TCP
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-test
namespace: team1-apps
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx-test
template:
metadata:
labels:
app: nginx-test
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
cpu: \"150m\"
memory: \"300Mi\"
EOF
"
Změna rovnováhy uzlů (volitelné)
Po škálování spusťte operaci vyrovnávání, pokud se počet pravidel stane nevyváženým pomocí az aks loadbalancer rebalance příkazu. Tento příkaz naruší aktivní toky, takže ho naplánujte během časového období údržby.
az aks loadbalancer rebalance --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME
Monitorování a řešení potíží
- Sledujte události kontroléru (
kubectl get events …) a ověřte, že jsou služby synchronizovány. - Pokud je externí připojení zablokované, otevřete shell uzlu a spusťte příkaz curl pro virtuální IP adresu služby k ověření směrování kube-proxy.
Omezení a známé problémy
| Omezení | Podrobnosti |
|---|---|
| Odchozí SNAT | Vždy používá první SLB; odchozí datové toky se nerozdělují. |
| Typ back-endových poolů | Vytvořte nebo aktualizujte existující cluster pro použití nodeIP back-endových poolů. |
| Nuly automatického škálování | Primární fond agentů se nemůže škálovat na 0 uzlů. |
Růst pravidla ETP local |
Každá služba ETP local používá vlastní pravidlo a backendový fond, takže počet pravidel může růst rychleji než při použití módu cluster. |
| Rebalancování přerušení | Odebrání uzlu z back-endového fondu ukončí aktivní připojení. Plánování časových období údržby |
| Časování opětovného načítání konfigurace | Po spuštění az aks loadbalancerse změny nemusí projevit okamžitě. Operace AKS se dokončí rychle, ale cloud-controller-manager může při instalaci aktualizací trvat déle. Počkejte, až událost EnsuredLoadBalancer potvrdí, že jsou změny aktivní. |
Vyčistěte zdroje
Jakmile dokončíte, odstraňte skupinu prostředků pomocí příkazu az group delete, abyste odebrali cluster a vyrovnávače zatížení.
az group delete --name $RESOURCE_GROUP --yes --no-wait
Další kroky
Funkce více SLB pomáhá škálovat a izolovat úlohy na síťové vrstvě a přitom udržovat jednoduchost prostřednictvím konfigurace spravované Azure. Další informace najdete v následujících zdrojích informací: