Best practices for advanced scheduler features in Azure Kubernetes Service (AKS)

أثناء إدارة المجموعات في Azure Kubernetes Service (AKS)، غالبًا ما تحتاج إلى عزل الفرق وأحمال العمل. تتيح لك الميزات المتقدمة التي يوفرها برنامج جدولة Kubernetes التحكم في:

  • أي البودات يمكن جدولتها على عقد معينة.
  • كيف يمكن توزيع التطبيقات متعددة البودات بشكل مناسب عبر الكتلة.

تركز مقالة أفضل الممارسات هذه على ميزات جدولة Kubernetes المتقدمة لمشغلي المجموعة. في هذه المقالة، ستتعرف على كيفية:

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

توفير عقد مخصصة باستخدام العيوب والتفاوتات

إرشادات أفضل الممارسات:

تقييد الوصول للتطبيقات كثيفة الاستخدام للموارد، مثل وحدات التحكم في الدخول، إلى عقد محددة. احتفظ بموارد العقد متاحة لأحمال العمل التي تتطلبها، ولا تسمح بجدولة أعباء العمل الأخرى على العقد.

عند إنشاء مجموعة AKS الخاصة بك، يمكنك نشر العقد بدعم GPU أو عدد كبير من وحدات المعالجة المركزية CPUs القوية. لمزيد من المعلومات، راجع استخدام وحدات معالجة الرسومات على AKS. يمكنك استخدام هذه العقد لأحمال عمل معالجة البيانات الكبيرة مثل التعلم الآلي (ML) أو الذكاء الاصطناعي (AI).

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

يتم توفير هذا الدعم للعقد المختلفة باستخدام تجمعات متعددة للعقد. يدعم نظام مجموعة AKS تجمع عقدة واحد أو أكثر.

يستخدم برنامج جدولة Kubernetes التشوهات والتسامح لتقييد أحمال العمل التي يمكن تشغيلها على العقد.

  • تطبيق تلوث على عقدة للإشارة إلى أنه يمكن جدولة pods معينة فقط عليها.
  • ثم قم بتطبيق التسامح على جراب، ما يسمح لهم بالتسامح مع تلوث العقدة.

عند نشر حجرة في مجموعة AKS، فإن Kubernetes يقوم فقط بجدولة الكبسولات على العقد التي يتماشى لونها مع التسامح. تعمل العيوب والتفاوتات معا لضمان عدم جدولة القرون على العقد غير المناسبة. يتم تطبيق لون واحد أو أكثر على عقدة، مع وضع علامة على العقدة بحيث لا تقبل أي جرابات لا تتسامح مع العيوب.

على سبيل المثال، لنفترض أنك أضفت مجموعة عقدة في مجموعة AKS الخاصة بك للعقد مع دعم GPU. يمكنك تعريف الاسم، مثل gpu، ثم قيمة للجدولة. يؤدي تعيين هذه القيمة إلى NoSchedule إلى تقييد مجدول Kubernetes من جدولة الحجيرات ذات التسامح غير المحدد على العقدة.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name taintnp \
    --node-taints sku=gpu:NoSchedule \
    --no-wait

مع تطبيق صبغة على العقد في تجمع العقدة، يمكنك تحديد التسامح في مواصفات pod التي تسمح بالجدولة على العقد. يحدد sku: gpu المثال التالي و effect: NoSchedule للتسامح مع الصبغة المطبقة على تجمع العقدة في الخطوة السابقة:

kind: Pod
apiVersion: v1
metadata:
  name: tf-mnist
spec:
  containers:
  - name: tf-mnist
    image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
    resources:
      requests:
        cpu: 0.5
        memory: 2Gi
      limits:
        cpu: 4.0
        memory: 16Gi
  tolerations:
  - key: "sku"
    operator: "Equal"
    value: "gpu"
    effect: "NoSchedule"

عند نشر هذا الجراب باستخدام kubectl apply -f gpu-toleration.yaml، يمكن ل Kubernetes جدولة الجراب بنجاح على العقد مع تطبيق الصبغة. تتيح لك هذه العزلة المنطقية التحكم في الوصول إلى الموارد داخل الكتلة.

عندما تقوم بتطبيق التلويث، اعمل مع مطوري التطبيقات ومالكيها للسماح لهم بتحديد التفاوتات المطلوبة في عمليات النشر الخاصة بهم.

لمزيد من المعلومات حول كيفية استخدام تجمعات عقد متعددة في AKS، راجع إنشاء تجمعات عقد متعددة لمجموعة في AKS.

سلوك العيوب والتسامح في AKS

عندما تقوم بترقية تجمع عقدة في AKS، فإن العيوب والتفاوتات تتبع نمطًا محددًا حيث يتم تطبيقها على العقد الجديدة:

المجموعات الافتراضية التي تستخدم مجموعات مقياس الجهاز الظاهري Azure

يمكنك صبغ تجمع عقدة من واجهة برمجة تطبيقات AKS للحصول على العقد التي تم توسيع نطاقها حديثا لتلقي تلوثات عقدة محددة لواجهة برمجة التطبيقات.

لنفرض:

  1. تبدأ بمجموعة مكونة من عقدتين: node1 وnode2.
  2. تقوم بترقية تجمع العقدة.
  3. يتم إنشاء عقدتين آخرين: node3 وnode4.
  4. تنتقل العيوب على التوالي.
  5. يتم حذف العقدة 1 الأصلية والعقدة 2.

أنظمة المجموعات التي لا تدعم مجموعات مقياس الجهاز الظاهري

مرة أخرى، لنفترض:

  1. لديك نظام مجموعة مكون من عقدتين: node1 وnode2.
  2. تقوم بترقية تجمع العقدة.
  3. يتم إنشاء عقدة إضافية: node3.
  4. يتم تطبيق الملامح من node1 على node3.
  5. يتم حذف node1 .
  6. يتم إنشاء عقدة جديدة1 لاستبدال العقدة الأصلية1.
  7. يتم تطبيق تلوث العقدة 2 على العقدة الجديدة 1.
  8. يتم حذف node2 .

في جوهرها، تصبح node1 node3، وتصبح node2 العقدة الجديدة1.

عند قياس تجمع عقدة في AKS، لا يتم ترحيل العيوب والتفاوتات حسب التصميم.

تحكم في جدولة البود باستخدام محددات العقدة والتقارب

إرشادات أفضل الممارسات

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

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

بدلاً من ذلك، يمكنك استخدام محددات العقد. على سبيل المثال، تقوم بتسمية العقد للإشارة إلى تخزين SSD المرفق محليًا أو مقدار كبير من الذاكرة، ثم تحديد محدد العقدة في مواصفات البود. يقوم Kubernetes بجدولة تلك البودات على عقدة مطابقة.

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

لنلقِ نظرة على مثال للعقد ذات قدر كبير من الذاكرة. تعطي هذه العقد الأولوية للقرون التي تتطلب قدرًا كبيرًا من الذاكرة. لضمان عدم بقاء الموارد في وضع الخمول، فإنها تسمح أيضًا بتشغيل البودات الأخرى. يضيف الأمر المثال التالي تجمع عقدة مع جهاز التسمية =highmem إلى myAKSCluster في myResourceGroup. تحتوي جميع العقد في تجمع العقدة هذا على هذه التسمية.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name labelnp \
    --node-count 1 \
    --labels hardware=highmem \
    --no-wait

ثم تضيف مواصفات الجراب الخاصية nodeSelector لتعريف محدد عقدة يطابق التسمية التي تم تعيينها على عقدة:

kind: Pod
apiVersion: v1
metadata:
  name: tf-mnist
spec:
  containers:
  - name: tf-mnist
    image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
    resources:
      requests:
        cpu: 0.5
        memory: 2Gi
      limits:
        cpu: 4.0
        memory: 16Gi
  nodeSelector:
      hardware: highmem

عند استخدام خيارات الجدولة هذه، اعمل مع مطوري التطبيقات ومالكيها للسماح لهم بتحديد مواصفات الكبسولة بشكل صحيح.

لمزيد من المعلومات حول استخدام محددات العقد، راجع تعيين Pods إلى Nodes.

تقارب العقدة

محدد العقدة هو حل أساسي لتعيين القرون إلى عقدة معينة. يوفر ترابط العقدة مزيدا من المرونة، ما يسمح لك بتحديد ما يحدث إذا تعذرت مطابقة الحاوية مع عقدة. بإمكانك:

  • اطلب من مجدول Kubernetes مطابقة جراب مع مضيف مسمى. او
  • تفضل المطابقة ولكن اسمح بجدولة الجراب على مضيف مختلف إذا لم يكن هناك تطابق متوفر.

يعين المثال التالي ترابط العقدة إلى requiredDuringSchedulingIgnoredDuringExecution. يتطلب هذا التقارب جدول Kubernetes لاستخدام عقدة ذات تسمية مطابقة. في حالة عدم توفر أي عقدة، يتعين على الكبسولة انتظار الجدولة للمتابعة. للسماح بجدولة البود على عُقدة مختلفة، يمكنك بدلاً من ذلك تعيين القيمة إلى المفضلDuringSchedulingIgnoreDuringExecution:

kind: Pod
apiVersion: v1
metadata:
  name: tf-mnist
spec:
  containers:
  - name: tf-mnist
    image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
    resources:
      requests:
        cpu: 0.5
        memory: 2Gi
      limits:
        cpu: 4.0
        memory: 16Gi
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: hardware
            operator: In
            values:
            - highmem

يشير جزء IgnoredDuringExecution من الإعداد إلى أنه لا يجب إخلاء الجراب من العقدة إذا تغيرت تسميات العقدة. لا يستخدم برنامج جدولة Kubernetes سوى تسميات العقد المحدثة للقرون الجديدة التي تتم جدولتها، وليس البودات المجدولة بالفعل على العقد.

لمزيد من المعلومات، راجع الترابط وعدم الترابط.

انجذاب بين الجراب ومضاد للانجذاب

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

على سبيل المثال، لديك تطبيق ويب يستخدم أيضًا Azure Cache لـ Redis.

  • يمكنك استخدام قواعد عدم تقارب pod لطلب أن يوزع برنامج جدولة Kubernetes النسخ المتماثلة عبر العقد.
  • يمكنك استخدام قواعد التقارب لضمان جدولة كل مكون من مكونات تطبيق الويب على نفس المضيف كذاكرة تخزين مؤقت مقابلة.

يبدو توزيع البودات عبر العقد مشابهًا للمثال التالي:

العقدة 1 العقدة 2 العقدة 3
webapp-1 webapp-2 webapp-3
cache-1 cache-2 cache-3

يوفر التقارب بين البودات وعدم التقارب نشرًا أكثر تعقيدًا من محددات العقدة أو تقارب العقدة. من خلال النشر، يمكنك عزل الموارد بشكل منطقي والتحكم في كيفية قيام Kubernetes بجدولة الكبسولات على العقد.

للحصول على مثال كامل لتطبيق الويب هذا باستخدام Azure Cache ل Redis، راجع تحديد موقع الجرابات على نفس العقدة.

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

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