تكوين تجمعات عقدة متعددة باستخدام تجمعات العقد الموضعية في AKS مع تكلس نظام المجموعة التلقائي

مكتمل

يوفر Azure مثيلات Azure Virtual Machine التي توفر قابلية التوسع مع تقليل التكاليف، وهي مثالية لأحمال العمل التي يمكن مقاطعتها. ومع ذلك، فإن هذه الأجهزة الظاهرية (VMs) تصل إلى سعة حوسبة Azure غير المستخدمة بأسعار منخفضة ولكنها لا تزال تدعم سيناريوهات الحوسبة عالية الأداء.

يتم نشر حل تتبع الطائرات الآلية لشركتك على خدمة Azure Kubernetes (AKS) مثل العديد من التطبيقات والخدمات المخزنة. إحدى هذه الخدمات هي خدمة معالجة الدفعات التي تحدد مسارات رحلات الطائرات الآلية. مع النمو المفاجئ في قاعدة عملائك، تغمر خدمة معالجة الدُفعات بالطلبات وتتراكم عمليات التسليم. يتسبب هذا الموقف في حدوث تأخيرات وإحباط العملاء.

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

  • استخدام مثيلات عقدة أقل تكلفة.
  • التحجيم التلقائي لعدد العقد في تجمع العقدة الذي تم تكوينه لمعالجة دفعة من الملفات.

دعونا نلقِ نظرة على البنية التحتية التي يقوم عليها هذا الحل الموفر للتكلفة في AKS.

ما الجهاز الظاهري الموضعي (Spot VM) في Azure؟

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

  • سيناريوهات الحوسبة عالية الأداء أو تطبيقات المعالجة المجمعة أو العرض المرئي.

  • طلبات واسعة النطاق وعديمة الحالة.

  • بيئات المطورين / الاختبار، بما في ذلك التكامل المستمر (CI) وأحمال العمل للتسليم المستمر (CD).

توفر الجهاز الظاهري الموضعي

يعتمد توافر الجهاز الظاهري الموضعي على عوامل، مثل السعة والحجم والمنطقة والوقت من اليوم. يخصص Azure أجهزة ظاهرية فقط في حالة توفر السعة. ونتيجة لذلك، لا توجد اتفاقية على مستوى الخدمة (SLA) لهذه الأنواع من الأجهزة الظاهرية، ولا تقدم ضمانات عالية التوفر.

نهج إخلاء الأجهزة الظاهرية الموضعية

نهج الإخلاء الافتراضي للأجهزة الظاهرية الموضعية هو «Deallocate». يقوم Azure بإخلاء الأجهزة الظاهرية الموضعية مع 30 ثانية من الإشعار عندما تصبح السعة في منطقة محدودة. ينتقل الجهاز الظاهري الذي تم تعيينه باستخدام نهج Deallocate إلى حالة إيقاف التخصيص عند الإخلاء. يمكنك إعادة نشر جهاز ظاهري تم إخلاؤه عندما تصبح السعة الموضعية متاحة مرة أخرى. لا يزال الجهاز الظاهري الذي تم إلغاء تخصيصه محسوبًا في الحصة النسبية لوحدة المعالجة المركزية الافتراضية (vCPU)، ولا تزال رسوم الأقراص المخصصة الأساسية سارية.

ما هي مجموعة تحجيم الجهاز الظاهري الموضعي؟

مجموعة تحجيم الجهاز الظاهري الموضعي هي مجموعة تحجيم أجهزة ظاهرية تدعم الأجهزة الظاهرية الموضعية في Azure. تتصرف أجهزة VM هذه بنفس الطريقة التي تعمل بها الأجهزة الظاهرية الموضعية العادية، ولكن مع اختلاف واحد: عند استخدام دعم مجموعة مقياس الجهاز الظاهري لأجهزة VM الموضعية في Azure، يمكنك الاختيار بين نهجي إخلاء هما:

  • «Deallocate»: يعمل نهج «Deallocate» تمامًا كما هو موضح سابقًا.

  • Delete: تتيح لك سياسة “Delete” تجنب تكلفة الأقراص وتجاوز مساحة القرص المتوفرة. باستخدام سياسة «Delete» الإخلاء، يتم حذف الأجهزة الظاهرية التي تم إخلاؤها مع الأقراص الأساسية بها. يمكن الآن لميزة التحجيم التلقائي لمجموعة المقياس محاولة التعويض عن إخلاء الجهاز الظاهري تلقائيا عن طريق إنشاء أجهزة ظاهرية جديدة. على الرغم من أن إنشاء أجهزة ظاهرية غير مضمونة، فإن الأجهزة الظاهرية التي تم إخلاؤها لا تحتسب ضمن حصة وحدة المعالجة المركزية الافتراضية أو تفرض تكاليف على الأقراص الأساسية.

    من أفضل الممارسات استخدام ميزة التحجيم التلقائي فقط عند تعيين نهج الإخلاء على Delete في مجموعة القياس.

ما هو تجمع العقدة الموضعية في خدمة Azure Kubernetes (AKS)؟

تجمع العقدة الموضعية عبارة عن تجمع عقدة مستخدم يستخدم مجموعة مقياس جهاز ظاهري موضعي. تدعم AKS أجهزة VM الموضعية عند:

  • الحاجة إلى إنشاء تجمعات عقد المستخدم.
  • تريد مزايا التكلفة التي يوفرها دعم مجموعة أداة تحجيم الجهاز الظاهري للأجهزة الظاهرية الموضعية في Azure.

استخدام تجمعات عقدة التركيز من أجل:

  • الاستفادة من السعة غير المستخدمة في Azure.
  • استخدام ميزات مجموعة التحجيم مع نهج «Delete» للإخلاء.
  • تحديد الحد الأقصى للسعر الذي تريد دفعه لكل ساعة.
  • تمكين التحجيم التلقائي لنظام المجموعة AKS Kubernetes الموصى به عند استخدام تجمعات العقد الموضعية.

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

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

قيود تجمع العقدة الموضعية

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

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

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

هام

في بعض الاشتراكات، مثل اشتراكات الرعاة، تكون القدرة على إنشاء أجهزة ظاهرية موضعية وتجمعات العقد الموضعية محدودة. قد لا تتمكن من إنشاء تجمع عقدة موضعية للمجموعة.

أضف تجمع عقدة موضعية إلى مجموعة AKS

لا يمكن أن يكون تجمع العقدة الموضعية مجموعة عقدة نظام لمجموعة AKS. أولا، تحتاج إلى إنشاء نظام المجموعة الخاص بك ثم استخدام az aks nodepool add الأمر لإضافة تجمع عقدة مستخدم جديد.

يمكنك تعيين العديد من المعلمات لمجموعة عقدة جديد لتكوينها كمجموعة عقدة موضعية.

الأولوية

يتم تعيين المعلمة --priority افتراضيًا على Regular لمجموعة عقدة جديدة. قم بتعيين القيمة على Spot للإشارة إلى أن المجموعة الجديدة التي تقوم بإنشائها هي مجموعة عقدة موضعية. لا يمكن تغيير هذه القيمة بعد الإنشاء.

نهج الإخلاء

يجب أن تستخدم مجموعة العقدة الموضعية مجموعة مقياس آلة ظاهرية. تذكر من وقت سابق أن تجمع العقدة الموضعية يستخدم مجموعة مقياس موضعي. قم بتعيين --eviction-policy إلى Delete للسماح لمجموعة المقياس بإزالة كل من العقدة والقرص المخصص الأساسي الذي تستخدمه العقدة. لا يمكنك تغيير هذه القيمة بعد الإنشاء.

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

الحد الأقصى لسعر العقدة الموضعية

تعمل تجمعات العقد الموضعية على تحسين التكاليف عن طريق الحد الأقصى للمبلغ الذي ترغب في دفعه لكل عقدة موضعية في الساعة. لتعيين المبلغ المُدار، استخدم المعلمة --spot-max-price. يتم إخلاء العقد الموضعية التي تم إنشاؤها حديثًا عند الوصول إلى هذه القيمة.

يمكنك تعيين هذه القيمة إلى أي مبلغ موجب يصل إلى خمسة منازل عشرية، أو تعيينها إلى -1. --spot-max-price تعيين القيمة إلى -1 يؤثر على تجمع العقدة بالطرق التالية:

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

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

قم بتمكين أداة التحجيم التلقائي لنظام المجموعة

نوصي بتمكين مقياس نظام المجموعة التلقائي باستخدام المعلمة --enable-cluster-autoscaler. إذا كنت لا تستخدم مقياس نظام المجموعة التلقائي، فإنك تخاطر بانخفاض عدد العقد إلى الصفر في مجموعة العقد حيث يتم إخلاء العقد بسبب قيود سعة Azure.

الحد الأدنى لعدد العقدة

قم بتعيين الحد الأدنى لعدد العقدة إلى قيمة بين 1 و100 باستخدام المعلمة --min-count. الحد الأدنى لعدد العقد مطلوب عند تمكين مقياس نظام المجموعة التلقائي.

الحد الأقصى لعدد العقدة

قم بتعيين الحد الأقصى لعدد العقدة إلى قيمة بين 1 و100 باستخدام المعلمة --max-count. يلزم وجود حد أقصى لعدد العقد عند تمكين أداة التحجيم التلقائي لنظام المجموعة.

نموذج التكوين

فيما يلي مثال az aks nodepool add على الأمر الذي يضيف تجمع عقدة موضعية مع الحد الأقصى لعدد 3 والحد الأدنى من 1. لاحظ استخدام --enable-cluster-autoscaler لتمكين ميزات العقدة الموضعية.

az aks nodepool add \
    --resource-group resourceGroup \
    --cluster-name aksCluster \
    --name spotpool01 \
    --enable-cluster-autoscaler \
    --max-count 3 \
    --min-count 1 \
    --priority Spot \
    --eviction-policy Delete \
    --spot-max-price -1 \
    --no-wait

نشر القرون إلى تجمعات العقد الموضعية

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

ما المقصود بالبقعة؟

يتم تطبيق بقعة على عقدة للإشارة إلى أنه يمكن جدولة القرون المحددة فقط على ذلك. يتم تكوين العقد الموضعية مع تسمية معينة على kubernetes.azure.com/scalesetpriority:spot.

ما هو التفاوت؟

الاختلاف هو مواصفة تطبق على وحدة، ولكنها غير ضرورية، للسماح بجدولة وحدة على عقدة بها مشكلة إدخال مقابلة. يتم تكوين العقد الموضعية مع تعيين بقعة العقدة على kubernetes.azure.com/scalesetpriority=spot:NoSchedule.

إشعار

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

ما هو ترابط العقدة؟

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

تعريف التفاوت في ملف بيان تطبيق القرن

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

الخاصية ‏‏الوصف
key يعرّف زوج قيمة مفتاح بقعة العقدة المحدد على العقدة. على سبيل المثال، في تجمع العقدة الموضعية، يكون زوج قيم المفاتيح هو kubernetes.azure.com/scalesetpriority:spot. المفتاح هو kubernetes.azure.com/scalesetpriority.
operator يسمح التفاوت لمطابقة معالجة العيوب. عامل التشغيل الافتراضي هو Equal. يمكنك أيضًا تحديد Exists ليطابق التفاوت. ومع ذلك، عند استخدامك Exists، فإنك لا تحدد الخاصية التالية (value).
value يمثل جزء القيمة من زوج قيمة المفتاح الذي تم تحديده على العقدة. على سبيل المثال، في تجمع عقدة موضعية بزوج قيم المفاتيح kubernetes.azure.com/scalesetpriority:spot، تكون القيمة هي spot.
effect يشير إلى كيفية معالجة جدولة القرن في النظام. تتوفر ثلاثة خيارات: NoSchedule، وPreferNoSchedule، وNoExecute. NoSchedule يضمن أن النظام لا يمكنه جدولة الجراب. يسمح PreferNoSchedule لنظام بمحاولة عدم جدولة القرن يقوم NoExecute إما بإخلاء القرون التي تعمل بالفعل على العقدة ذات البقعة أو لا يقوم بجدولة القرن على الإطلاق.

تعريف تقارب العقدة في ملف بيان الوحدة

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

الخاصية ‏‏الوصف
nodeAffinity توضح هذه المقالة قواعد جدولة تقارب العقدة الخاصة بالوحدة.
requiredDuringSchedulingIgnoredDuringExecution إذا لم يتم استيفاء متطلبات الترابط المحددة بواسطة هذا الحقل في وقت الجدولة، فلا يمكن جدولة الجراب على العقدة. إذا توقفت متطلبات الترابط المحددة في هذا الحقل عن الوفاء بها في مرحلة ما أثناء تنفيذ الجراب (على سبيل المثال، بسبب تحديث)، يمكن للنظام اختيار محاولة إخلاء الجراب من العقدة الخاصة به.
nodeSelectorTerms قائمة بمصطلحات محدِّد العقدة. تتطابق المصطلحات التي تم إرجاعها مع أي من عوامل التصفية، بدلا من جميع عوامل التصفية.
matchExpressions قائمة بمتطلبات محدد العقدة حسب تسميات العقدة.
key مفتاح التسمية الذي ينطبق عليه المحدد. المفتاح هو kubernetes.azure.com/scalesetpriority
operator يمثل علاقة المفتاح بمجموعة من القيم. عوامل التشغيل الصالحة هي In وNotIn وExists وDoesNotExist وGt وLt
values يمثل جزء القيمة الخاص بزوج قيم المفاتيح لتسمية العقدة والذي تم تحديده في العقدة. في مجموعة عقدة موضعية لها زوج قيم المفاتيح الخاص بـ kubernetes.azure.com/scalesetpriority:spot، تكون القيمة هي spot.

فيما يلي مثال على حمل العمل الذي تمت إضافة الاختلاف والتقارب به لمجموعات العقد الموضعية.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  tolerations:
  - key: "kubernetes.azure.com/scalesetpriority"
    operator: "Equal"
    value: "spot"
    effect: "NoSchedule"
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: "kubernetes.azure.com/scalesetpriority"
            operator: In
            values:
            - "spot"

‏‫اختبر معلوماتك

1.

لنفترض أن لديك خدمة عديمة الحالة تعالج الطلبات عبر الإنترنت وتعمل باستخدام مجموعة Azure Kubernetes Service (AKS). قررت استخدام تجمعات العقدة الموضعية في مجموعة AKS لتحسين حساب التكاليف على نظام المجموعة. كيف يمكنك إضافة تجمعات العقد الموضعية إلى مجموعة AKS؟

2.

بالنسبة إلى الخدمة الموصوفة في السؤال السابق، ما نهج الإخلاء الأكثر فعالية من حيث التكلفة لتكوين تجمع العقدة الموضعية؟

3.

بالنسبة إلى الخدمة الموضحة في الأسئلة السابقة، كيف تتأكد من جدولة أحمال العمل على العقد الخاصة بمجمع عقدة المستخدم الموضعي؟