Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure Kubernetes Service (AKS), normalde bir kümedeki tüm LoadBalancer Hizmetler için bir Standart Yük Dengeleyici (SLB) sağlar. Her düğüm NIC'si 300 gelen yük dengeleme kuralı ve 8 özel bağlantı hizmetiyle sınırlı olduğundan, büyük kümeler veya bağlantı noktası ağır iş yükleri bu sınırları hızla tüketebilir.
Birden çok SLB önizlemesi, aynı küme içinde birkaç SLB oluşturmanıza ve düğümleri ve Hizmetleri bunlar arasında paylaşmanıza olanak sağlayarak bu tıkanıklığı ortadan kaldırır. Her biri birincil aracı havuzuna ve isteğe bağlı ad alanı, etiket veya düğüm seçicilerine bağlı yük dengeleyici yapılandırmaları tanımlarsınız ve AKS, düğümleri ve Hizmetleri otomatik olarak uygun SLB'ye yerleştirir. Eğer outboundTypeloadBalancer ise, giden SNAT davranışı değişmez. Giden trafik hala ilk SLB üzerinden akıyor.
Bu özelliği kullanarak:
- Küme eklemeden 300 gelen kuralın ötesine ölçeklendirin.
- Ayrılmış bir SLB'yi kendi aracı havuzuna bağlayarak kiracıyı veya iş yükü trafiğini yalıtın.
- SLB başına sınıra yaklaştığınızda özel bağlantı hizmetlerini birden çok SLB arasında dağıtın.
Önkoşullar
-
aks-previewuzantı 18.0.0b1 veya üzeri. - Abonelik özelliği bayrağı
Microsoft.ContainerService/MultipleStandardLoadBalancersPreviewkaydedildi. - Kubernetes sürüm 1.28 veya üzeri.
-
--load-balancer-backend-pool-type nodeIPile bir küme oluşturun veyaaz aks updatekullanarak mevcut bir kümeyi güncelleştirin.
aks-preview Azure CLI uzantısını yükleme
Önemli
AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "mevcut olduğu şekilde" sağlanmakta olup, hizmet seviyesi anlaşmalarına ve sınırlı garantilere dahil edilmemektedir. AKS önizlemeleri, müşteri desteği ekibi tarafından maksimum çaba gösterilerek kısmen ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:
komutunu kullanarak aks-preview uzantısını
az extension addyükleyin.az extension add --name aks-previewkomutunu kullanarak yayımlanan uzantının en son sürümüne güncelleştirin
az extension update.az extension update --name aks-preview
Özellik bayrağını MultipleStandardLoadBalancersPreview kaydetme
MultipleStandardLoadBalancersPreviewözellik bayrağınıaz feature registerkomutunu kullanarak kaydedin.az feature register --namespace "Microsoft.ContainerService" --name "MultipleStandardLoadBalancersPreview"Durumun Kayıtlı olarak gösterilmesi birkaç dakika sürer.
komutunu kullanarak
az feature showkayıt durumunu doğrulayın:az feature show --namespace "Microsoft.ContainerService" --name "MultipleStandardLoadBalancersPreview"Durum Kayıtlı olarak yansıtıldığında komutunu kullanarak
az provider registerkaynak sağlayıcısının kaydını yenileyin.az provider register --namespace Microsoft.ContainerService
AKS yük dengeleyiciyi nasıl seçer (düğüm ve Hizmet yerleşimi)
AKS, düğümlerin nereye yerleştirileceğini ve LoadBalancer Hizmetlerinin kullanıma sunulduğu yeri belirlemek için birden çok giriş kullanır. Bu girişler her yük dengeleyici yapılandırmasında tanımlanır ve her kaynak için hangi SLB'nin seçildiğini etkiler.
| Giriş türü | Şunlar için geçerlidir: | Açıklama |
|---|---|---|
Birincil etken havuzu--primary-agent-pool-name |
Nodes | Gerekli. Bu havuzdaki tüm düğümler hep SLB'nin arka uç havuzuna eklenir. Her SLB'nin en az bir sağlam düğüme sahip olduğundan emin olur. |
Düğüm seçici--node-selector |
Nodes | Opsiyonel. Birincil havuza ek olarak, eşleşen etiketlere sahip tüm düğümleri SLB'ye ekler. |
Hizmet ad alanı seçicisi--service-namespace-selector |
Hizmetler | Opsiyonel. Bu SLB için yalnızca eşleşen etiketlere sahip ad alanları içindeki hizmetler dikkate alınır. |
Hizmet etiketi seçicisi--service-label-selector |
Hizmetler | Opsiyonel. Yalnızca etiketleri eşleşen hizmetler bu SLB için uygundur. |
Hizmet ek açıklamasıservice.beta.kubernetes.io/azure-load-balancer-configurations |
Hizmetler | Opsiyonel. Yerleştirmeyi bir veya daha fazla açıkça adlandırılmış SLB yapılandırmasıyla sınırlar. Bu olmadan, eşleşen tüm yapılandırmalar uygun olur. |
Uyarı
Seçiciler uygunluğu tanımlar. Ek açıklama (kullanılıyorsa), denetleyiciyi belirli bir SLB alt kümesiyle kısıtlar.
AKS bu girişleri nasıl kullanır?
AKS denetim düzlemi, yukarıdaki kuralları kullanarak düğüm ve Hizmet durumunu sürekli olarak senkronize eder.
Düğüm yerleşimi
Bir düğüm eklendiğinde veya güncelleştirildiğinde AKS, birincil havuza ve düğüm seçiciye göre hangi SLA'lara uygun olduğunu denetler.
- Birden çok SLB eşleşirse, denetleyici en az geçerli düğüme sahip olanı seçer.
- Düğüm, bu SLB'nin arka uç havuzuna eklenir.
Hizmet yerleşimi
LoadBalancer Hizmeti oluşturulduğunda veya güncelleştirildiğinde:
- AKS, ad alanı ve etiket seçicileri Hizmetle eşleşen SLB'leri bulur.
- Servis ek açıklaması mevcutsa, adlandırılan SLB'ler yalnızca dikkate alınır.
- allowServicePlacement=false içeren veya Azure sınırlarını (300 kural veya 8 özel bağlantı hizmeti) aşacak SLB'ler hariç tutulur.
- Geçerli seçenekler arasında en az kurala sahip SLB seçilir.
externalTrafficPolicy (ETP) davranışı
AKS, externalTrafficPolicy değerine bağlı olarak Hizmetleri işler farklı şekilde.
| Modül | Yük dengeleyici seçimi nasıl çalışır? | Arka uç havuzu üyeliği nasıl oluşturulur? | Notes |
|---|---|---|---|
| Küme (varsayılan) | Denetleyici, yukarıda açıklanan standart yerleştirme kurallarına uyar. Tek bir yük dengeleme kuralı, seçilen SLB'de paylaşılan kubernetes arka uç havuzunu hedefler. | SLB'nin kubernetes havuzundaki tüm düğümler sağlıklı hedeflerdir. Eşleşen Pod'lara sahip olmayan düğümler sağlık denetimleri tarafından otomatik olarak kaldırılır. |
Tekli SLB kümelerinde bugünküyle aynı davranış. |
| Yerel | Denetleyici SLB seçmek için seçici tabanlı algoritmayı kullanmaya devam eder, ancak paylaşılan havuzu kullanmak yerine Hizmet başına ayrılmış bir arka uç havuzu oluşturur . | Üyelik, Hizmetin EndpointSlice nesnelerinden gelen bilgilerle eşitlenir, bu nedenle yalnızca hazır Pod'ları barındıran düğümler eklenir. Sağlık tarayıcıları, iyi durumda olmayan düğümleri bırakmak için healthCheckNodePort kullanmaya devam eder. |
İstemci IP'lerinin korunmasını garanti eder ve düğümler birden fazla SLB'ye dağıtıldığında dahi, pod içermeyen düğümler üzerinden yapılan yönlendirmeleri önler. |
NEDEN ETP Local için ayrılmış havuz?
Çoklu SLB modunda, belirli bir Hizmet için Pod'ları barındıran düğümler, istemciye yönelik VIP'den farklı SLB'lerde bulunabilir. Paylaşılan arka uç havuzu genellikle uygun düğüm içermediğinden trafiği kesiyor. Hizmet başına havuzu ayırıp içindenEndpointSliceeşitleyerek AKS, Hizmetin SLB'sinin her zaman doğru düğümleri işaret etmesini sağlar.
Kotalar üzerindeki etkisi
- Her ETP Yerel Hizmeti, SLB'sine bir arka uç havuzu ve bir yük dengeleme kuralı ekler.
- Bunlar 300 kural sınırına doğru sayılır, bu nedenle çok sayıda ETP Yerel Hizmetiniz olduğunda kural kullanımını izleyin.
Giden trafikte değişiklik yok
Giden SNAT, ETP ayarlarından bağımsız olarak, aksOutboundBackendPooloutboundType olduğunda ilk SLB'nin loadBalancer üzerinden akmaya devam eder.
İsteğe bağlı: Yeniden Dengeleme
Düğüm dağıtımını daha sonra az aks loadbalancer rebalance kullanarak manuel olarak yeniden dengeleyebilirsiniz.
Bu tasarım hem altyapı hem de iş yükleri için esnek, etiket temelli yönlendirme tanımlamanıza olanak tanırken AKS, dengeyi korumak ve kota sorunlarını önlemek için yerleştirmeyi otomatik olarak işler.
İlk yük dengeleyici yapılandırmasını ekleme
adlı kubernetes bir yapılandırma ekleyin ve her zaman en az bir düğümü olan bir birincil aracı havuzuna bağlayın. Her yapılandırmanın kaldırılması kümeyi tek SLB moduna geri geçirir.
Önemli
Birden çok SLB modunu etkinleştirmek için adlı bir yük dengeleyici yapılandırması eklemeniz ve bunu her zaman en az bir hazır düğümü olan kubernetes aracı havuzuna eklemeniz gerekir.
Bu yapılandırmanın varlığı çoklu SLB desteğini değiştirir; hizmet seçiminde özel önceliğe sahip değildir ve diğer yük dengeleyici yapılandırmaları gibi değerlendirilir.
Her yük dengeleyici yapılandırmasını silerseniz, küme otomatik olarak tek SLB moduna geri döner ve bu da hizmet yönlendirmesini veya SNAT akışlarını kısa bir süre kesintiye uğratabilir.
Bu öğretici boyunca kullanılacak ortam değişkenlerini ayarlayın.
DEFAULT_LB_NAMEolarak kalması gereken dışındakubernetestüm yer tutucu değerlerini kendi yer tutucunuzla değiştirebilirsiniz.RESOURCE_GROUP="rg-aks-multislb" CLUSTER_NAME="aks-multi-slb" LOCATION="westus" DEFAULT_LB_NAME="kubernetes" PRIMARY_POOL="nodepool1"komutunu kullanarak
az group createkaynak grubu oluşturun.az group create --name $RESOURCE_GROUP --location $LOCATIONkomutunu kullanarak
az aks createAKS kümesi oluşturun.\az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME \ --load-balancer-backend-pool-type nodeIP \ --node-count 3komutunu kullanarak
az aks loadbalancer addvarsayılan bir yük dengeleyici ekleyin.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
Ek yük dengeleyiciler ekleme
Farklı bir birincil havuzun yanı sıra isteğe bağlı ad alanı, etiket veya düğüm seçicileri belirterek kiracıya özgü yapılandırmalar oluşturun.
Takım 1 kendi iş yüklerini ayrı bir düğüm havuzunda çalıştırır. İş yüklerinin seçiciler kullanılarak zamanlanması için bir
tenant=team1etiket atayın:TEAM1_POOL="team1pool" TEAM1_LB_NAME="team1-lb"komutunu kullanarak
az aks nodepool addtakım 1 için ikinci bir düğüm havuzu oluşturun.az aks nodepool add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME \ --name $TEAM1_POOL \ --labels tenant=team1 \ --node-count 2komutunu kullanarak
az aks loadbalancer addtakım 1 için bir yük dengeleyici oluşturun.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"hedef ad alanını (örneğin,
team1-apps) komutunu kullanarak seçiciyle eşleşecek şekilde etiketleyinaz aks command invoke.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 "Artık komutunu kullanarak
az aks loadbalancer listbirden çok yapılandırmayı görmek için kümedeki yük dengeleyicileri listeleyebilirsiniz.az aks loadbalancer list --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --output tableÖrnek çıkış:
AllowServicePlacement ETag Name PrimaryAgentPoolName ProvisioningState ResourceGroup ----------------------- ------- ---------- ---------------------- ------------------- --------------- True <ETAG> kubernetes nodepool1 Succeeded rg-aks-multislb True <ETAG> team1-lb team1pool Succeeded rg-aks-multislb
Hizmeti belirli bir yük dengeleyiciye dağıtma
Ek açıklamayı service.beta.kubernetes.io/azure-load-balancer-configurations ekleyin ve yapılandırma adlarının virgülle ayrılmış bir listesini kullanın. Eğer annotasyon atlanırsa, denetleyici otomatik olarak seçer.
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
"
Düğümleri yeniden dengeleme (isteğe bağlı)
Komutunu kullanarak az aks loadbalancer rebalance kural sayıları dengesiz hale gelirse ölçeklendirmeden sonra yeniden dengeleme işlemi çalıştırın. Bu komut etkin akışları kesintiye uğratır, bu nedenle bir bakım penceresi sırasında zamanlayın.
az aks loadbalancer rebalance --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME
İzleme ve sorun giderme
- Hizmetlerin mutabık olduğunu onaylamak için denetleyici olaylarını (
kubectl get events …) izleyin. - Dış bağlantı engellenirse bir düğüm kabuğu açın ve kube-proxy yönlendirmesini onaylamak için Hizmet VIP'sini kıvırın.
Sınırlamalar ve bilinen sorunlar
| Sınırlama | Ayrıntılar |
|---|---|
| Giden SNAT | Her zaman ilk SLB'yi kullanır; giden trafikler parçalara ayrılmaz. |
| Arka plan havuz türü | Var olan bir kümeyi nodeIP arka uç havuzlarını kullanacak şekilde oluşturun veya güncelleyin. |
| Otomatik Ölçekleyici Sıfırlama | Birincil aracı havuzu 0 düğüme ölçeklendirilemez. |
ETP local Kural Büyümesi |
Her bir ETP local Hizmeti, kendi kuralını ve arka uç havuzunu kullanır, bu nedenle kural sayıları mode cluster moduna göre daha hızlı artabilir. |
| Yeniden dengeleme kesintisi | Bir düğümün arka uç havuzundan kaldırılması, aktif bağlantıları düşürür. Bakım pencerelerini planlayın. |
| Yapılandırma yeniden yükleme zamanlaması | çalıştırıldıktan az aks loadbalancersonra, değişiklikler hemen geçerli olmayabilir. AKS işlemi hızlı bir şekilde tamamlanabilir, ancak bulut denetleyicisi-yöneticisinin güncelleştirmeleri uygulaması daha uzun sürebilir. Değişikliklerin etkin olduğunu onaylamak için EnsuredLoadBalancer olayını bekleyin. |
Kaynakları temizle
komutunu kullanarak az group delete kümeyi ve yük dengeleyicileri kaldırmayı bitirdiğinizde kaynak grubunu silin.
az group delete --name $RESOURCE_GROUP --yes --no-wait
Sonraki Adımlar
Birden çok SLB özelliği, Azure tarafından yönetilen yapılandırma aracılığıyla basitliği korurken ağ katmanındaki iş yüklerinin ölçeklendirilmesine ve yalıtılmasına yardımcı olur. Daha fazla bilgi için aşağıdaki kaynaklara bakın: