استخدام تشوهات العقدة في نظام مجموعة Azure Kubernetes Service (AKS)

توضح هذه المقالة كيفية استخدام تشوهات العقدة في نظام مجموعة Azure Kubernetes Service (AKS).

نظرة عامة

آلية جدولة AKS هي المسؤولة عن وضع القرون على العقد وتعتمد على مجدول Kubernetes المصدر، kube-scheduler. يمكنك تقييد pod للتشغيل على عقد معينة عن طريق إرفاق pods بمجموعة من العقد باستخدام ترابط العقدة أو عن طريق توجيه العقدة لصد مجموعة من القرون باستخدام تلوثات العقدة، والتي تتفاعل مع مجدول AKS.

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

الصبغات هي أزواج قيم المفاتيح مع تأثير. هناك ثلاث قيم لحقل التأثير عند استخدام صبغات العقدة: NoExecuteو NoScheduleو.PreferNoSchedule

  • NoExecute: يتم إخلاء الحجيرات التي تعمل بالفعل على العقدة على الفور إذا لم يكن لديها تفاوت مطابق. إذا كان للجراب تفاوت مطابق، فقد يتم إخلاؤها إذا tolerationSeconds تم تحديدها.
  • NoSchedule: يتم وضع الحجيرات التي لها تفاوت مطابق فقط على هذه العقدة. لا يتم إخلاء الجرابات الموجودة.
  • PreferNoSchedule: يتجنب المجدول وضع أي جرابات لا تحتوي على تفاوت مطابق.

خيارات تلوث العقدة

هناك نوعان من صبغات العقد التي يمكن تطبيقها على عقد AKS الخاصة بك: تلوث العقدة وملامح تهيئة العقدة.

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

إشعار

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

لا ينطبق هذا على صبغات تهيئة العقدة.

استخدام تشوهات العقدة

المتطلبات الأساسية

تفترض هذه المقالة أن لديك مجموعة AKS موجودة. إذا كنت بحاجة إلى نظام مجموعة AKS، يمكنك إنشاء مجموعة باستخدام Azure CLI أو Azure PowerShell أو مدخل Azure.

إنشاء تجمع عقدة مع تلوث عقدة

  1. إنشاء تجمع عقدة مع تلوث باستخدام az aks nodepool add الأمر واستخدام المعلمة --node-taints لتحديد sku=gpu:NoSchedule لصبغة.

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --name $NODE_POOL_NAME \
        --node-count 1 \
        --node-taints "sku=gpu:NoSchedule" \
        --no-wait
    
  2. تحقق من حالة تجمع العقدة.

  3. تحقق من تعيين الصبغة على العقدة.

تحديث تجمع عقدة لإضافة تلوث عقدة

  1. تحديث تجمع عقدة لإضافة لون عقدة az aks nodepool update باستخدام الأمر واستخدام المعلمة --node-taints لتحديد sku=gpu:NoSchedule للصبغة.

    az aks nodepool update \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --name $NODE_POOL_NAME \
        --node-taints "sku=gpu:NoSchedule" \
        --no-wait
    
  2. تحقق من حالة تجمع العقدة.

  3. تحقق من تعيين الصبغة على العقدة.

استخدام صبغات تهيئة العقدة (معاينة)

هام

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

المتطلبات الأساسية والقيود

  • تحتاج إلى إصدار 3.0.0b3 Azure CLI أو تثبيته وتكوينه لاحقا. قم بتشغيل az --version للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.
  • يمكنك فقط تطبيق تلوث التهيئة عبر إنشاء نظام المجموعة أو الترقية عند استخدام واجهة برمجة تطبيقات AKS. إذا كنت تستخدم قوالب ARM، يمكنك تحديد علامات تهيئة العقدة أثناء إنشاء تجمع العقدة وتحديثها.
  • لا يمكنك تطبيق صبغات التهيئة على تجمعات عقد Windows باستخدام Azure CLI.

الحصول على بيانات اعتماد لمجموعتك

  • احصل على بيانات الاعتماد لنظام مجموعة AKS باستخدام az aks get-credentials الأمر .

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

تثبيت aks-preview امتداد Azure CLI

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

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    

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

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

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

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

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

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

    az provider register --namespace Microsoft.ContainerService
    

إنشاء نظام مجموعة بصبغة تهيئة عقدة

  1. إنشاء نظام مجموعة مع تلوث تهيئة عقدة az aks create باستخدام الأمر والمعلمة --node-initialization-taints لتحديد sku=gpu:NoSchedule للصبغة.

    هام

    تنطبق تهيئة العقدة التي تحددها على كافة تجمعات العقد في نظام المجموعة. لتطبيق لون التهيئة على عقدة معينة، يمكنك استخدام قالب ARM بدلا من CLI.

    az aks create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $CLUSTER_NAME \
        --node-count 1 \
        --node-init-taints "sku=gpu:NoSchedule" \
        --generate-ssh-keys
    
  2. تحقق من حالة تجمع العقدة.

  3. تحقق من تعيين الصبغة على العقدة.

تحديث نظام مجموعة لإضافة تلوث تهيئة عقدة

  1. تحديث نظام مجموعة لإضافة لون تهيئة عقدة az aks update باستخدام الأمر والمعلمة --node-initialization-taints لتحديد sku=gpu:NoSchedule للصبغة.

    هام

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

    az aks update \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-init-taints "sku=gpu:NoSchedule"
    
  2. تحقق من حالة تجمع العقدة.

  3. تحقق من تعيين الصبغة على العقدة.

تحقق من حالة تجمع العقدة

  • بعد تطبيق لون العقدة أو لون التهيئة، تحقق من حالة تجمع العقدة az aks nodepool list باستخدام الأمر .

    az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME
    

    إذا قمت بتطبيق صبغات العقدة، يظهر إخراج المثال التالي أن <node-pool-name> تجمع العقدة عبارة Creating عن عقد مع المحدد nodeTaints:

    [
      {
        ...
        "count": 1,
        ...
        "name": "<node-pool-name>",
        "orchestratorVersion": "1.15.7",
        ...
        "provisioningState": "Creating",
        ...
        "nodeTaints":  [
          "sku=gpu:NoSchedule"
        ],
        ...
      },
     ...
    ]
    

    إذا قمت بتطبيق تصبغات تهيئة العقدة، يظهر إخراج المثال التالي أن <node-pool-name> تجمع العقدة عبارة Creating عن عقد مع المحدد nodeInitializationTaints:

    [
      {
        ...
        "count": 1,
        ...
        "name": "<node-pool-name>",
        "orchestratorVersion": "1.15.7",
        ...
        "provisioningState": "Creating",
        ...
        "nodeInitializationTaints":  [
          "sku=gpu:NoSchedule"
        ],
        ...
      },
     ...
    ]
    

تحقق من تعيين الصبغة على العقدة

  • تحقق من تلوث العقدة وملامح تهيئة العقدة في تكوين العقدة kubectl describe node باستخدام الأمر .

    kubectl describe node $NODE_NAME
    

    إذا قمت بتطبيق تلوث العقدة، يظهر إخراج المثال التالي أن <node-pool-name> تجمع العقدة يحتوي على Taintsالمحدد :

    [
        ...
        Name: <node-pool-name>
        ...
        Taints: sku=gpu:NoSchedule
        ...
        ],
        ...
     ...
    ]
    

إزالة تشوهات العقدة

إزالة تلوث عقدة معين

  • قم بإزالة تشوهات العقدة az aks nodepool update باستخدام الأمر . يزيل الأمر المثال التالي تلوث العقدة "sku=gpu:NoSchedule" من تجمع العقدة.

    az aks nodepool update \
    --cluster-name $CLUSTER_NAME \
    --name $NODE_POOL_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --node-taints "sku=gpu:NoSchedule"
    

إزالة كافة تشوهات العقدة

  • قم بإزالة كافة تشوهات العقدة من تجمع عقدة az aks nodepool update باستخدام الأمر . يقوم الأمر المثال التالي بإزالة كافة تشوهات العقدة من تجمع العقدة.

    az aks nodepool update \
    --cluster-name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $NODE_POOL_NAME \
    --node-taints ""
    

إزالة صبغات تهيئة العقدة

لديك الخيارات التالية لإزالة صبغات تهيئة العقدة من العقدة:

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

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

إزالة صبغات تهيئة العقدة مؤقتا

  • قم بإزالة تصبغات تهيئة العقدة مؤقتا باستخدام kubectl taint nodes الأمر .

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

    kubectl taint nodes $NODE_POOL_NAME sku=gpu:NoSchedule-
    

    بمجرد إزالتها، تظهر تهيئة العقدة مرة أخرى بعد حدوث تحجيم العقدة أو ترقيتها.

إزالة تصبغات تهيئة العقدة بشكل دائم

  1. اتبع الخطوات في إزالة تصبغ تهيئة العقدة مؤقتا لإزالة تلوث تهيئة العقدة باستخدام واجهة برمجة تطبيقات Kubernetes.

  2. قم بإزالة الصبغة من العقدة باستخدام واجهة برمجة تطبيقات AKS باستخدام az aks update الأمر . يزيل هذا الأمر تلوث تهيئة العقدة من كل عقدة في نظام المجموعة.

    az aks update \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-init-taints ""
    

تحقق من إزالة الصبغة من العقدة

  • تحقق من تلوث العقدة وملامح تهيئة العقدة في تكوين العقدة kubectl describe node باستخدام الأمر .

    kubectl describe node $NODE_NAME
    

    إذا قمت بإزالة تلوث عقدة، يظهر إخراج المثال التالي أن <node-pool-name> تجمع العقدة لا يحتوي على الصبغة التي تمت إزالتها ضمن Taints:

    [
        ...
        Name: <node-pool-name>
        ...
        Taints: 
        ...
        ],
        ...
     ...
    ]
    

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