Bin Pack Nodes with scheduler profiles on Azure Kubernetes Service (AKS) (preview)

في هذا المقال، ستتعلم كيفية تعبئة العقد في صندوق الصناديق لتحسين استخدام العقد لمجموعات Azure Kubernetes Service (AKS) باستخدام إضافة الجدولة داخل الشجرة. NodeResourcesFit يعمل جدولة AKS الافتراضية في NodeResourcesFit:LeastAllocated وضع يعطي الأولوية للعقد ذات الاستخدام الأقل مع كبسولات الجدولة. ملفات Scheduler القابلة للتكوين على AKS تتيح لك تغيير هذا السلوك الافتراضي وضبط التكوين لإعطاء الأولوية للعقد ذات الاستخدام الأعلى. تغطي هذه الوثائق ثلاثة ملفات تعريف مختلفة لجدولة العقد مع تسليط الضوء على أفضل الممارسات التوصية لتحسين الاستخدام وتقليل نقاط العقد الساخنة.

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

القيود

  • لا تدير AKS حاليا نشر المجدولات التابعة لجهات خارجية أو المكونات الإضافية للجدولة خارج الشجرة.
  • لا يدعم AKS المكونات الإضافية للجدولة داخل الشجرة التي تستهدف المجدول aks-system . هذا التقييد ساري المفعول للمساعدة في منع التغييرات غير المتوقعة على الوظائف الإضافية ل AKS الممكنة على نظام المجموعة الخاص بك. بالإضافة إلى ذلك، لا يمكنك تعريف ال profileaks-system.

المتطلبات المسبقه

تمكين تكوين ملف تعريف المجدول على نظام مجموعة AKS

يمكنك تمكين تكوين ملف تعريف الجدول الزمني على نظام مجموعة AKS جديد أو موجود.

  1. قم بإنشاء مجموعة AKS مع تمكين تكوين ملف تعريف المجدول باستخدام az aks create الأمر الذي يحتوي على العلامة --enable-upstream-kubescheduler-user-configuration .

    # Set environment variables
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<aks-cluster-name>
    
    # Create an AKS cluster with schedule profile configuration enabled
    az aks create \
    --resource-group $RESOURCE_GROUP \ 
    --name $CLUSTER_NAME \
    --enable-upstream-kubescheduler-user-configuration \
    --generate-ssh-keys
    
  2. بمجرد اكتمال عملية الإنشاء، اتصل بنظام المجموعة باستخدام الأمر az aks get-credentials .

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    

تحقق من تثبيت وحدة التحكم في المجدول

  • بعد تمكين الميزة على نظام مجموعة AKS، تحقق من تثبيت تعريف المورد المخصص (CRD) لوحدة تحكم المجدول بنجاح باستخدام kubectl get الأمر.

    kubectl get crd schedulerconfigurations.aks.azure.com
    

    ملحوظة

    لن ينجح هذا الأمر إذا لم يتم تمكين الميزة بنجاح في القسم السابق.

تكوين تعبئة حاوية العقد باستخدام إضافة RequestedtoCapacity

من بين الملفات الثلاثة، RequestedToCapacityRatio يوفر التحكم الدقيق للمستخدم لربط العقد باستخدام صريح. على سبيل المثال، تم تكوين ملف الجدولة هذا ليفضل العقد ضمن نطاق استخدام من 50-85%، ويتجنب العقد الفارغة، ويخفض الأولوية بشكل كبير للعقد شبه الكاملة عند 90% استخدام أو أكثر، مما يترك بعض المساحة الإضافية. وبالنظر إلى هذا المستوى من التفاصيل، RequestedtoCapacity فإن استراتيجية التسجيل الموصى بها لتعبئة صناديق العقد على AKS لمجموعات الإنتاج هي الاستراتيجية.

يجعل هذا التكوين استخدام وحدة المعالجة المركزية العامل السائد في اختيار العقد، حيث يملأ العقد مع تجنب التشبع الزائد في التطبيقات التي تعتمد على المعالج بشكل كبير. أخيرا، يجب تعطيل الإضافة PodTopologySpread لأنها يمكن أن تتجاوز الدرجة المرجحة إذا NodeResourcesFit تركت مفعلة بشكل افتراضي.

  • NodeResourcesFit يتحكم في كيفية تقييم المجدول إذا كانت العقدة تمتلك موارد كافية لتشغيل وحدة الوحدة.
  • scoringStrategy: RequestedToCapacityRatio يقيم العقد بناء على نسبة الموارد المطلوبة إلى إجمالي سعة العقد بعد وضع الوحدة افتراضيا.
  • Resources يحدد أن CPU و Memory هي الموارد الأساسية التي يتم النظر فيها للتقييم. مع وزن 8، يتم تسجيل العقد التي تستخدم المعالج أعلى ب8 مرات من الذاكرة خلال دورة جدولة الكبسة. هذا يزيد من احتمال اختيار العقد ذات الاستخدام العالي.
  • shape: يقوم بتعيين استخدام العقد إلى درجة المجدول. كل نقطة تمثل نسبة استخدام ودرجة مقابلة، مع وجود نقاط خطية بين النقاط.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
  name: upstream
spec:
  rawConfig: |
    apiVersion: kubescheduler.config.k8s.io/v1
    kind: KubeSchedulerConfiguration
    profiles:
      - schedulerName: cpu-binpack-scheduler-RtC
        plugins:
          multiPoint:
            enabled:
              - name: NodeResourcesFit
            disabled:
              - name: PodTopologySpread
        pluginConfig:
          - name: NodeResourcesFit
            args:
              apiVersion: kubescheduler.config.k8s.io/v1
              kind: NodeResourcesFitArgs
              scoringStrategy:
                type: RequestedToCapacityRatio
                resources:
                  - name: cpu
                    weight: 8
                  - name: memory
                    weight: 1
                requestedToCapacityRatio:
                  shape:
                    - utilization: 0
                      score: 0
                    - utilization: 30
                      score: 9
                    - utilization: 50
                      score: 10
                    - utilization: 85
                      score: 10
                    - utilization: 90
                      score: 5
                    - utilization: 100
                      score: 0

تكوين تعبئة صناديق العقد باستخدام إضافة MostAllocated

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

يجعل هذا التكوين استخدام وحدة المعالجة المركزية العامل الرئيسي في اختيار العقد. لضمان سلوك متسق، يجب تعطيل الإضافة PodTopologySpread لأنها قد تتجاوز الدرجة المرجحة إذا NodeResourcesFit تركت مفعلة بشكل افتراضي.

  • NodeResourcesFit يتحكم في كيفية تقييم المجدول إذا كانت العقدة تمتلك موارد كافية لتشغيل وحدة الوحدة.
  • scoringStrategy: MostAllocated الدرجات بناء على طلبات البود. MostAllocated يخبر المجدول بتفضيل العقد ذات الاستخدام العالي للموارد. تعزز هذه الاستراتيجية توزيع الكبسولات بكثافة وتساعد في تحقيق استخدام أفضل للعقد.
  • Resources يحدد أن CPU و Memory هي الموارد الأساسية التي يتم النظر فيها للتقييم. مع وزن 8، يتم تسجيل العقد التي تستخدم المعالج أعلى ب8 مرات من الذاكرة خلال دورة جدولة الكبسة. هذا يزيد من احتمال اختيار العقد ذات الاستخدام العالي.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
  name: upstream
spec:
  rawConfig: |
    apiVersion: kubescheduler.config.k8s.io/v1
    kind: KubeSchedulerConfiguration
    profiles:
      - schedulerName: cpu-binpack-scheduler-mA
        plugins:
          multiPoint:
            enabled:
              - name: NodeResourcesFit
            disabled:
              - name: PodTopologySpread
        pluginConfig:
          # NodeResourcesFit configuration
          - name: NodeResourcesFit
            args:
              apiVersion: kubescheduler.config.k8s.io/v1
              kind: NodeResourcesFitArgs
              scoringStrategy:
                type: MostAllocated
                resources:
                  - name: cpu
                    weight: 8
                  - name: memory
                    weight: 1

تكوين تعبئة حاويات العقد باستخدام إضافات MostAllocated و NodeResourcesBalancedAllocation

يسعى هذا التكوين إلى إضافة بعض الحواجز إلى الاستراتيجية MostAllocated البسيطة والفعالة من خلال تقييم العقد بناء على الاستخدام المتوازن للموارد المستهدفة. NodeResourcesBalancedAllocation يشجع على وضع الكبسولات على العقد ذات الاستخدام النسبي الذي يحدده المستخدم، مما يزيد من الكفاءة الإجمالية مع تجنب عنق الزجاجة الناتج عن ضغط الموارد غير المتماثل. على سبيل المثال، العقد المرتبطة بالمعالج وذات الذاكرة غير المستخدمة بكثرة ستحصل على درجات أقل لصالح العقد التي تتمتع بتوازن أفضل بين استخدام وحدة المعالجة المركزية والذاكرة.

  • NodeResourcesBalancedAllocation يقيم العقد بناء على توازن استخدام الموارد عبر عدة موارد. بدلا من تعظيم استخدام مورد واحد، تفضل هذه الإضافة العقد التي يكون استهلاك الموارد فيها متناسبا.
  • Resources يحدد الموارد التي يتم النظر فيها أثناء تقييم الرصيد. مع وزن وحدة المعالجة المركزية والذاكرة بالتساوي، تحصل العقد على درجات أعلى عندما يتم استهلاك كلا الموردين بمستويات متشابهة.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
  name: upstream
spec:
  rawConfig: |
    apiVersion: kubescheduler.config.k8s.io/v1
    kind: KubeSchedulerConfiguration
    profiles:
      - schedulerName: cpu-binpack-scheduler-mA-BalancedAllocation
        plugins:
          multiPoint:
            enabled:
              - name: NodeResourcesFit
              - name: NodeResourcesBalancedAllocation
            disabled:
              - name: PodTopologySpread
        pluginConfig:
          # NodeResourcesFit configuration
          - name: NodeResourcesFit
            args:
              apiVersion: kubescheduler.config.k8s.io/v1
              kind: NodeResourcesFitArgs
              scoringStrategy:
                type: MostAllocated
                resources:
                  - name: cpu
                    weight: 8
                  - name: memory
                    weight: 1
          - name: NodeResourcesBalancedAllocation
            args:
              apiVersion: kubescheduler.config.k8s.io/v1
              kind: NodeResourcesBalancedAllocationArgs
              resources:
                - name: cpu
                  weight: 1
                - name: memory
                  weight: 1

تعيين ملف تعريف مجدول لنظام مجموعة AKS بأكمله

  1. أنشئ ملفا باسم cpu-bin-packing-scheduler.yaml، مع تسمية CRD upstream

  2. قم بتطبيق بيان تكوين الجدولة باستخدام الأمر kubectl apply .

    kubectl apply -f cpu-bin-packing-scheduler.yaml
    
  3. لاستهداف آلية الجدولة هذه لأحمال عمل محددة، قم بتحديث عمليات توزيع الجراب الخاصة بك بما يلي schedulerName:

    ...
    ...
        spec:
          schedulerName: binpacking-scheduler
    ...
    ...
    

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

لمعرفة المزيد عن جدولة AKS، والتكوينات الأخرى وأفضل الممارسات، راجع الموارد التالية: