استخدم موازنات تحميل متعددة في Azure Kubernetes Service (معاينة)

توفر خدمة Azure Kubernetes (AKS) عادة موازن تحميل قياسي واحد (SLB) لجميع LoadBalancer الخدمات في نظام مجموعة. نظرا لأن كل عقدة NIC تقتصر على 300 قاعدة موازنة تحميل واردةو8 خدمات ارتباط خاص، يمكن أن تستنفد المجموعات الكبيرة أو أحمال العمل الثقيلة المنفذ هذه الحدود بسرعة.

تزيل معاينة SLB المتعددة هذا الازدحام عن طريق السماح لك بإنشاء عدة SLBs داخل نفس المجموعة وعقد الأجزاء والخدمات عبرها. تقوم بتعريف تكوينات موازن الأحمال، كل منها مرتبط بمجموعة وكلاء أساسية وخيارات لاختيار مساحة الأسماء أو التسمية أو محددات العقد—ويقوم AKS تلقائيا بوضع العقد والخدمات على SLB المناسب. سلوك SNAT الصادر دون تغيير إذا كان outboundType .loadBalancer لا تزال نسبة استخدام الشبكة الصادرة تتدفق عبر أول SLB.

استخدم هذه الميزة من أجل:

  • توسيع نطاق أكثر من 300 قاعدة واردة دون إضافة مجموعات.
  • اعزل حركة مرور المستأجر أو حمل العمل عن طريق ربط SLB مخصص بتجمع الوكلاء الخاص به.
  • توزيع خدمات الارتباط الخاص عبر SLBs متعددة عند الاقتراب من الحد لكل SLB.

Prerequisites

  • aks-preview الملحق 18.0.0b1 أو أحدث.
  • تم تسجيل علامة Microsoft.ContainerService/MultipleStandardLoadBalancersPreview ميزة الاشتراك.
  • Kubernetes الإصدار 1.28 أو أحدث.
  • نظام المجموعة الذي تم إنشاؤه باستخدام --load-balancer-backend-pool-type nodeIP أو تحديث نظام المجموعة الحالي باستخدام az aks update.

تثبيت ملحق aks-preview Azure CLI

Important

تتوفر ميزات معاينة AKS على أساس الخدمة الذاتية والاشتراك. يتم توفير المعاينات "كما هي" و"كما هي متوفرة"، ويتم استبعادها من اتفاقيات مستوى الخدمة والضمان المحدود. تتم تغطية معاينات AKS جزئيًا بواسطة دعم العملاء على أساس بذل أفضل الجهود. على هذا النحو، هذه الميزات ليست مخصصة للاستخدام الإنتاجي. لمزيد من المعلومات، يُرجي الاطلاع على مقالات الدعم الآتية:

  • تثبيت ملحق aks-preview باستخدام az extension add الأمر .

    az extension add --name aks-preview
    
  • التحديث إلى أحدث إصدار من الملحق الذي تم إصداره باستخدام az extension update الأمر .

    az extension update --name aks-preview
    

تسجيل MultipleStandardLoadBalancersPreview العلامات المميزة

  1. تسجيل علامة الميزة MultipleStandardLoadBalancersPreview باستخدام az feature register الأمر .

    az feature register --namespace "Microsoft.ContainerService" --name "MultipleStandardLoadBalancersPreview"
    

    يستغرق الأمر بضع دقائق حتى تظهر الحالة مُسجل.

  2. تحقق من حالة التسجيل باستخدام az feature show الأمر :

    az feature show --namespace "Microsoft.ContainerService" --name "MultipleStandardLoadBalancersPreview"
    
  3. عندما تعكس الحالة Registered، قم بتحديث تسجيل موفر موارد Microsoft.ContainerService باستخدام az provider register الأمر .

    az provider register --namespace Microsoft.ContainerService
    

كيف تختار AKS موازن تحميل (موضع العقدة والخدمة)

تستخدم AKS مدخلات متعددة لتحديد مكان وضع العقد وعرض خدمات LoadBalancer. يتم تعريف هذه المدخلات في كل تكوين موازن تحميل والتأثير على الذي يتم تحديد SLB لكل مورد.

نوع الإدخال ينطبق على Description
تجمع الوكلاء الأساسيين
--primary-agent-pool-name
Nodes Required. تتم دائما إضافة جميع العقد في هذا التجمع إلى تجمع الواجهة الخلفية ل SLB. يضمن أن لكل SLB عقدة صحية واحدة على الأقل.
محدد العقدة
--node-selector
Nodes Optional. إضافة أي عقدة مع تسميات مطابقة إلى SLB، بالإضافة إلى التجمع الأساسي.
محدد مساحة اسم الخدمة
--service-namespace-selector
Services Optional. يتم اعتبار الخدمات الموجودة في مساحات الأسماء ذات التسميات المطابقة فقط ل SLB هذا.
محدد تسمية الخدمة
--service-label-selector
Services Optional. الخدمات التي تحتوي على تسميات مطابقة فقط مؤهلة ل SLB هذا.
تعليق الخدمة
service.beta.kubernetes.io/azure-load-balancer-configurations
Services Optional. تقييد الموضع إلى تكوين واحد أو أكثر مسمى بشكل صريح SLB. بدونه، يكون أي تكوين مطابق مؤهلا.

Note

يحدد المحددون الأهلية. يقيد التعليق التوضيحي (إذا تم استخدامه) وحدة التحكم إلى مجموعة فرعية معينة من SLBs.

كيف تستخدم AKS هذه المدخلات

تسوية مستوى التحكم AKS باستمرار حالة العقدة والخدمة باستخدام القواعد المذكورة أعلاه:

وضع العقد

عند إضافة عقدة أو تحديثها، يتحقق AKS من SLBs التي يؤهلها استنادا إلى التجمع الأساسي ومحدد العقدة.

  • إذا تطابقت عدة SLBs، تختار وحدة التحكم العقدة التي بها أقل عقد حالية.
  • تتم إضافة العقدة إلى تجمع الواجهة الخلفية ل SLB.

توزيع الخدمة

عند إنشاء خدمة LoadBalancer أو تحديثها:

  1. تبحث AKS عن SLBs التي تتطابق محددات مساحة الاسم والتسمية مع الخدمة.
  2. إذا كان التعليق التوضيحي للخدمة موجودا، يتم اعتبار تلك المسماة SLBs فقط.
  3. يتم استبعاد SLBs التي تحتوي على allowServicePlacement=false أو التي قد تتجاوز حدود Azure (300 قاعدة أو 8 خدمات ارتباط خاص).
  4. من بين الخيارات الصالحة، يتم اختيار SLB مع أقل القواعد.

سلوك externalTrafficPolicy (ETP)

تتعامل AKS مع الخدمات بشكل مختلف اعتمادا على قيمة externalTrafficPolicy.

Mode كيفية عمل تحديد موازن التحميل كيفية إنشاء عضوية تجمع الخلفية Notes
العنقود (الافتراضي) تتبع وحدة التحكم قواعد الموضع القياسية الموضحة أعلاه. قاعدة توازن التحميل الواحدة تستهدف مجموعة كوبيرنيتس المشتركة في الخلفية على SLB المختار. جميع العقد في تجمع SLB kubernetes هي أهداف سليمة. تتم إزالة العقد التي لا تحتوي على وحدات Pod مطابقة تلقائيا بواسطة تحقيقات السلامة. نفس السلوك كما هو الحال اليوم في مجموعات SLB أحادية.
Local لا تزال وحدة التحكم تستخدم الخوارزمية المستندة إلى المحدد لاختيار SLB، ولكنها تنشئ تجمع خلفية مخصص لكل خدمة بدلا من استخدام التجمع المشترك. تتم مزامنة العضوية من كائنات الخدمة EndpointSlice ، لذلك تتم إضافة العقد التي تستضيف بالفعل وحدات الجراب الجاهزة فقط. تستمر تحقيقات السلامة في الاستخدام healthCheckNodePort لإسقاط العقد غير السليمة. يضمن الحفاظ على IP للعميل ويتجنب التوجيه من خلال العقد التي تفتقر إلى Pods، حتى عندما يتم تقسيم العقد عبر SLBs متعددة.

لماذا تجمع مخصص ل ETP المحلي؟
في وضع متعددة SLB، قد تتواجد العقد التي تستضيف Pods لخدمة معينة على SLBs مختلفة من VIP الذي يواجه العميل. غالبا ما يحتوي تجمع الواجهة الخلفية المشتركة على صفر عقد مؤهلة، مما يؤدي إلى كسر نسبة استخدام الشبكة. من خلال تخصيص تجمع لكل خدمة ومزامنته من EndpointSlice، يضمن AKS أن SLB للخدمة يشير دائما إلى العقد الصحيحة.

التأثير على الحصص النسبية

  • تضيف كل خدمة محلية ETP مجموعة خلفية واحدة وقاعدة موازنة تحميل واحدة إلى SLB الخاص بها.
  • يتم احتساب هذه نحو حد 300 قاعدة، لذا راقب استخدام القاعدة عندما يكون لديك العديد من خدمات ETP المحلية.

لا يوجد تغيير في نسبة استخدام الشبكة الصادرة

لا يزال SNAT الصادر يتدفق عبر أول SLB عندما aksOutboundBackendPooloutboundType يكون loadBalancer، بغض النظر عن إعدادات ETP.

اختياري: إعادة التوازن

يمكنك إعادة توازن توزيع العقدة يدويا لاحقا باستخدام az aks loadbalancer rebalance.

يتيح لك هذا التصميم تحديد التوجيه المرن المستند إلى التسمية لكل من البنية الأساسية وأحمال العمل، بينما تعالج AKS الموضع تلقائيا للحفاظ على التوازن وتجنب مشكلات الحصة النسبية.

إضافة تكوين موازن التحميل الأول

أضف تكوين باسم kubernetes وربطه بمجموعة وكلاء أساسية تحتوي دائما على عقدة واحدة على الأقل. تؤدي إزالة كل تكوين إلى تبديل نظام المجموعة مرة أخرى إلى وضع SLB الفردي.

Important

لتفعيل وضع متعدد SLB يجب إضافة تكوين موازن حمل مسمى kubernetes وتوصيله بمجموعة وكلاء أساسية تحتوي دائما على عقدة جاهزة واحدة على الأقل.
يؤدي وجود هذا التكوين إلى تبديل دعم SLB متعدد؛ في تحديد الخدمة، ليس لها أولوية خاصة ويتم التعامل معها مثل أي تكوين موازن تحميل آخر.
إذا قمت بحذف كل تكوين موازن تحميل، فإن نظام المجموعة يعود تلقائيا إلى وضع SLB الفردي، والذي يمكن أن يعطل توجيه الخدمة أو تدفقات SNAT لفترة وجيزة.

  1. تعيين متغيرات البيئة للاستخدام خلال هذا البرنامج التعليمي. يمكنك استبدال كافة قيم العنصر النائب بقيمك باستثناء DEFAULT_LB_NAME، والتي يجب أن تظل ك kubernetes.

    RESOURCE_GROUP="rg-aks-multislb"
    CLUSTER_NAME="aks-multi-slb"
    LOCATION="westus"
    DEFAULT_LB_NAME="kubernetes"
    PRIMARY_POOL="nodepool1"
    
  2. إنشاء مجموعة موارد باستخدام az group create الأمر .

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  3. إنشاء نظام مجموعة AKS باستخدام az aks create الأمر .\

    az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME \
      --load-balancer-backend-pool-type nodeIP \
      --node-count 3
    
  4. إضافة موازن تحميل افتراضي باستخدام 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
    

إضافة موازنات تحميل إضافية

إنشاء تكوينات خاصة المستأجر عن طريق تحديد تجمع أساسي مختلف بالإضافة إلى مساحة الاسم الاختيارية أو التسمية أو محددات العقدة.

  1. سيقوم الفريق 1 بتشغيل أحمال العمل الخاصة به في تجمع عقدة منفصل. تعيين تسمية tenant=team1 بحيث يمكن جدولة أحمال العمل باستخدام المحددات:

    TEAM1_POOL="team1pool"
    TEAM1_LB_NAME="team1-lb"
    
  2. إنشاء تجمع عقدة ثان للفريق 1 باستخدام az aks nodepool add الأمر .

    az aks nodepool add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME \
      --name $TEAM1_POOL \
      --labels tenant=team1 \
      --node-count 2
    
  3. إنشاء موازن تحميل للفريق 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"
    
  4. قم بتسمية مساحة الاسم الهدف (على سبيل المثال، team1-apps) لمطابقة المحدد باستخدام az 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
    "
    
  5. يمكنك الآن سرد موازنات التحميل في نظام المجموعة لمشاهدة التكوينات المتعددة باستخدام az aks loadbalancer list الأمر .

    az aks loadbalancer list --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --output table
    

    مثال على الإخراج:

    AllowServicePlacement    ETag     Name        PrimaryAgentPoolName    ProvisioningState    ResourceGroup
    -----------------------  -------  ----------  ----------------------  -------------------  ---------------
    True                     <ETAG>   kubernetes  nodepool1               Succeeded            rg-aks-multislb
    True                     <ETAG>   team1-lb    team1pool               Succeeded            rg-aks-multislb
    

نشر خدمة إلى موازن تحميل معين

أضف التعليق التوضيحي service.beta.kubernetes.io/azure-load-balancer-configurations بقائمة أسماء التكوين مفصولة بفواصل. إذا تم حذف التعليق التوضيحي، تختار وحدة التحكم تلقائيا.

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
"

إعادة توازن العقد (اختياري)

قم بتشغيل عملية إعادة التوازن بعد التحجيم إذا أصبحت أعداد القواعد غير متوازنة az aks loadbalancer rebalance باستخدام الأمر . يعطل هذا الأمر التدفقات النشطة، لذا قم بجدولتها أثناء نافذة الصيانة.

az aks loadbalancer rebalance --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME

المراقبة واستكشاف الأخطاء وإصلاحها

  • شاهد أحداث وحدة التحكم (kubectl get events …) للتأكد من تسوية الخدمات.
  • إذا تم حظر الاتصال الخارجي، افتح عقدة shell وقم بتجعيد Service VIP لتأكيد توجيه kube-proxy.

القيود والمشاكل المعروفة

Limitation Details
SNAT الصادر يستخدم دائما أول SLB؛ لا يتم تقسيم التدفقات الصادرة.
نوع تجمع الخلفية إنشاء أو تحديث نظام مجموعة موجود لاستخدام nodeIP تجمعات الواجهة الخلفية.
أصفار الأوتوسكلر لا يمكن توسيع نطاق تجمع العامل الأساسي إلى 0 عقد.
نمو قاعدة ETP local تستخدم كل خدمة ETP local قاعدتها الخاصة وتجمع الخلفية، لذلك يمكن أن تنمو أعداد القواعد بشكل أسرع من cluster الوضع.
اضطراب إعادة التوازن تؤدي إزالة عقدة من تجمع الواجهة الخلفية إلى إسقاط الاتصالات أثناء الطيران. خطط لنوافذ الصيانة.
توقيت إعادة تحميل التكوين بعد التشغيل az aks loadbalancer، قد لا تسري التغييرات على الفور. تنتهي عملية AKS بسرعة، ولكن قد يستغرق مدير وحدة التحكم في السحابة وقتا أطول لتطبيق التحديثات. انتظر حتى EnsuredLoadBalancer يؤكد الحدث أن التغييرات نشطة.

تنظيف الموارد

احذف مجموعة الموارد عند الانتهاء لإزالة نظام المجموعة وموازنات التحميل باستخدام az group delete الأمر .

az group delete --name $RESOURCE_GROUP --yes --no-wait

الخطوات التالية

تساعد ميزة SLB المتعددة على توسيع نطاق أحمال العمل وعزلها في طبقة الشبكات مع الحفاظ على البساطة من خلال التكوين المدار من Azure. لمزيد من المعلومات، راجع الموارد التالية: