إضافة تجمع عقد Azure Spot إلى مجموعة Azure Kubernetes Service (AKS)

في هذه المقالة، يُمكنك إضافة تجمع عقدة نقطية ثانوي إلى مجموعة Azure Kubernetes Service (AKS) الموجودة.

تجمع عقدة Spot هو تجمع عقدة مدعوم بمجموعة مقياس Azure Spot Virtual Machine. باستخدام Spot VMs في نظام مجموعة AKS، يمكنك الاستفادة من سعة Azure غير المستغلة مع توفير كبير في التكاليف. يختلف مقدار السعة غير المستغلة المتوفرة استنادا إلى العديد من العوامل، مثل حجم العقدة والمنطقة والوقت من اليوم.

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

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

قبل البدء

  • تفترض هذه المقالة فهماً أساسياً لمفاهيم Kubernetes وAzure Load Balancer. لمزيد من المعلومات، راجع مفاهيم Kubernetes الأساسية الخاصة بخدمة Azure Kubernetes Service (AKS).
  • في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.
  • عند إنشاء مجموعة لاستخدام تجمع عقدة Spot، يجب أن تستخدم المجموعة مجموعات مقياس الجهاز الظاهري لتجمعات العقد وموازن تحميل SKU القياسي . يجب عليك أيضا إضافة تجمع عقدة آخر بعد إنشاء نظام المجموعة الخاص بك، والذي يتم تغطيته في هذا البرنامج التعليمي.
  • تتطلب هذه المقالة تشغيل Azure CLI الإصدار 2.14 أو إصدار لاحق. قم بتشغيل az --version للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.

القيود

تنطبق القيود التالية عند إنشاء وإدارة مجموعات AKS باستخدام تجمع عقدة Spot:

  • لا يمكن أن يكون تجمع عقدة Spot تجمع عقدة افتراضي، يمكن استخدامه فقط كتجمع ثانوي.
  • لا يمكنك ترقية وحدة التحكم وتجمعات العقد في نفس الوقت. يجب ترقيتها بشكل منفصل أو إزالة تجمع عقدة Spot لترقية مستوى التحكم وتجمعات العقد المتبقية في نفس الوقت.
  • يجب أن يستخدم تجمع عقدة Spot مجموعات مقياس الجهاز الظاهري.
  • لا يمكنك تغيير ScaleSetPriority الإنشاء أو SpotMaxPrice بعده.
  • عند تعيين SpotMaxPrice، يجب أن تكون القيمة -1 أو قيمة موجبة مع ما يصل إلى خمسة منازل عشرية.
  • يحتوي تجمع عقدة Spot على التسمية kubernetes.azure.com/scalesetpriority:spot والصبغة kubernetes.azure.com/scalesetpriority=spot:NoSchedule وقرون النظام على عدم الترابط.
  • يجب إضافة تسامح مطابق لجدولة أحمال العمل على تجمع عقدة Spot.

إضافة تجمع عقدة Spot إلى نظام مجموعة AKS

عند إضافة تجمع عقدة Spot إلى مجموعة موجودة، يجب أن تكون مجموعة مع تمكين تجمعات عقد متعددة. عند إنشاء نظام مجموعة AKS مع تمكين تجمعات عقد متعددة، يمكنك إنشاء تجمع عقدة مع افتراضيا priorityRegular . لإضافة تجمع عقدة Spot، يجب تحديد Spot كقيمة ل priority. لمزيد مـن التفاصيل حول إنشاء مجموعة AKS مع تجمعات عقد متعددة، راجع استخدام تجمعات عقد متعددة.

  • إنشاء تجمع عقدة prioritySpot باستخدام az aks nodepool add الأمر .

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

في الأمر السابق، priority يجعل من Spot تجمع العقدة تجمع عقدة Spot. eviction-policy تم تعيين المعلمة إلى Delete، وهي القيمة الافتراضية. عند تعيين نهج الإخلاء إلى Delete، يتم حذف العقد في مجموعة المقياس الأساسية لتجمع العقدة عند إخلائها.

يمكنك أيضا تعيين نهج الإخلاء إلى Deallocate، ما يعني أنه تم تعيين العقد في مجموعة المقياس الأساسية إلى الحالة المتوقفة عن التخصيص عند الإخلاء. عدد العقد في الحالة المتوقفة عن التخصيص مقابل الحصة النسبية للحساب ويمكن أن تسبب مشكلات في تحجيم نظام المجموعة أو ترقيتها. priority يمكن تعيين القيم و eviction-policy فقط أثناء إنشاء تجمع العقدة. لا يمكن تحديث هذه القيم لاحقا.

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

هام

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

تحقق من تجمع عقدة Spot

  • تحقق من إضافة تجمع العقدة az aks nodepool show باستخدام الأمر وتأكد scaleSetPriority من أن هو Spot.

    az aks nodepool show --resource-group myResourceGroup --cluster-name myAKSCluster --name spotnodepool
    

جدولة جراب للتشغيل على عقدة Spot

لجدولة جراب للتشغيل على عقدة Spot، يمكنك إضافة تفاوت وتقارب عقدة يتوافق مع الصبغة المطبقة على عقدة Spot.

يوضح المثال التالي جزءا من ملف YAML الذي يحدد التسامح المطابق للصبغة kubernetes.azure.com/scalesetpriority=spot:NoSchedule وتقارب العقدة kubernetes.azure.com/scalesetpriority=spot المقابلة للتسمية المستخدمة في الخطوة السابقة مع requiredDuringSchedulingIgnoredDuringExecution قواعد ترابط العقدة و preferredDuringSchedulingIgnoredDuringExecution :

spec:
  containers:
  - name: spot-example
  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"
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: another-node-label-key
            operator: In
            values:
            - another-node-label-value

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

  • يجب أن تحتوي العقدة على تسمية بالمفتاح kubernetes.azure.com/scalesetpriority، ويجب أن تكون spotقيمة هذه التسمية .
  • يفضل أن تحتوي العقدة على تسمية بالمفتاح another-node-label-key، ويجب أن تكون another-node-label-valueقيمة هذه التسمية .

لمزيد من المعلومات، راجع تعيين pods إلى العقد.

ترقية تـجمع عقدة Spot

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

لمزيد من المعلومات حول الترقية، راجع ترقية نظام مجموعة AKS.

السِعر الأقصى لتجمع نقطة

أسعار مثيلات Spot متغيرة، بناءً على المنطقة وSKU. لمزيد من المعلومات، راجع معلومات التسعير لنظامي التشغيل Linux وWindows.

مع التسعير المتغير، لديك خيار تعيين الحد الأقصى للسعر بالدولار الأمريكي (USD) باستخدام ما يصل إلى خمسة منازل عشرية. على سبيل المثال، القيمة 0.98765 ستكون السعر الأقصى 0.98765 دولار أمريكي لكل ساعة. إذا قمت بتعيين الحد الأقصى للسعر على -1، فلن يتم إخلاء المثيل بناءً على السعر. طالما أن هناك سعة وحصة نسبية متاحة، فسيكون سعر المثيل هو السعر الأدنى إما للسعر الحالي لمثيل Spot أو لمثيل قياسي.

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

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