Taints وTolerations
امنع جدولة الوحدات على عقد محددة باستخدام taints، واسمح لوحدات معينة بتحمّلها
Taints وTolerations درس مجاني في DevOps Bootcamp على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في DevOps Bootcamp، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة DevOps Bootcamp 4 دروس في المجموع.
ما هي Taints؟
تخيلوا أن لديكم عقدًا خاصة في نظام مجموعة Kubernetes، ربما تحتوي على أجهزة محددة مثل وحدات GPU، أو مخصصة لأعباء عمل معينة. لن ترغبوا في تشغيل أي Pod عشوائي عليها، أليس كذلك؟
هنا يأتي دور Taints! إن Taint خاصية تُطبَّق على عقدة وتمنع جدولة Pods عليها، ما لم تكن تلك Pods «تتسامح» مع Taint صراحةً.
أسباب استخدام Taints
تُعد Taints مفيدة جدًا لإدارة أماكن تشغيل Pods:
- العقد المخصصة: حجز العقد لفرق أو تطبيقات محددة.
- الأجهزة الخاصة: عزل العقد التي تحتوي على وحدات GPU أو أقراص SSD عالية الأداء لصالح Pods التي تحتاج إليها.
- الصيانة: وضع علامة على عقدة لإجراء الصيانة عليها، ومنع جدولة Pods جديدة عليها مؤقتًا.
آلية عمل Taints
اعتبروا Taint لافتة «ممنوع الدخول» على عقدة. ولا يمكن لـ Pod تجاهل هذه اللافتة إلا إذا كان لديه «تصريح» مطابق يُسمى Toleration.
يتكون Taint من مفتاح وقيمة وتأثير. مثلًا: key=value:effect.
فهم تأثيرات Taint
يخبر جزء «التأثير» من Taint Kubernetes بما يجب فعله مع Pods التي لا تتسامح معه. وهناك ثلاثة تأثيرات رئيسية:
NoSchedulePreferNoScheduleNoExecute
لنلقِ نظرة على كل منها.
تأثير Taint: NoSchedule
يُعد تأثير NoSchedule الأكثر صرامة. فإذا كانت العقدة تحتوي على Taint بتأثير NoSchedule، فلن تتم جدولة أي Pod عليها ما لم يكن لديه Toleration مطابق.
لا تتأثر Pods الموجودة والتي تعمل بالفعل على العقدة بإضافة Taint جديد من نوع NoSchedule.
تأثير Taint: PreferNoSchedule
يُعد PreferNoSchedule إصدارًا «مرنًا» من NoSchedule. ستحاول Kubernetes قدر الإمكان تجنب جدولة Pods على عقدة تحمل Taint، لكنه ليس متطلبًا صارمًا.
إذا لم توجد عقد أخرى مناسبة، فقد تتم جدولة Pod على عقدة تحمل Taint من نوع PreferNoSchedule حتى من دون Toleration.
تأثير Taint: NoExecute
يتميز تأثير NoExecute بأنه يؤثر في Pods *التي تعمل بالفعل*. فإذا كانت العقدة تحمل Taint من نوع NoExecute:
- سيتم *إجلاء* Pods التي لا تملك Toleration مطابقًا فورًا.
- لن تتم جدولة Pods الجديدة التي لا تملك Toleration مطابقًا.
يُستخدم هذا غالبًا لتفريغ العقد أو التعامل مع أعطالها.
مقدمة إلى Tolerations
بينما تُطبَّق Taints على العقد، تُطبَّق Tolerations على Pods. وتسمح Toleration الخاصة بـ Pod بجدولته على عقدة تحتوي على Taint مطابق.
من دون Toleration مطابقة، لا يمكن جدولة Pod على عقدة تحمل Taint (أو يفضّل عدم جدولته عليها).
Tolerations في بيانات Pod
تحددون Tolerations داخل بيان YAML الخاص بـ Pod، ضمن القسم spec. إليكم كيفية جعل Pod يتسامح مع Taint من النوع key=value:NoSchedule:
apiVersion: v1
kind: Pod
metadata:
name: my-tolerated-pod
spec:
containers:
- name: nginx
image: nginx
tolerations:
- key: "special-purpose"
operator: "Equal"
value: "gpu"
effect: "NoSchedule"كيفية تطابق Taints وTolerations
لكي تتم جدولة Pod على عقدة تحمل Taint، يجب أن تتطابق Toleration الخاصة به مع Taint الخاص بالعقدة. وتتضمن المطابقة ما يلي:
- المفتاح: يجب أن يكون متطابقًا.
- القيمة: يجب أن تكون متطابقة إذا كان
operator: Equal. - التأثير: يجب أن يكون متطابقًا.
- عامل التشغيل: يمكن أن يكون
EqualأوExists(أي أي قيمة للمفتاح).
تتسامح Toleration الخاصة key: "" operator: Exists مع *أي* Taint.
تحقق سريع: Taints
تحمل عقدة ما Taint بقيمة env=production:NoSchedule. أي تكوين لـ Pod سيسمح بجدولته على هذه العقدة؟
مراجعة: Taints وTolerations
لقد تعلمتم عن Taints وTolerations!
- تُطبَّق Taints على العقد لإبعاد Pods عنها.
- تُطبَّق Tolerations على Pods للسماح بجدولتها على العقد التي تحمل Taints.
- تأثيرات Taint الأساسية هي
NoScheduleوPreferNoScheduleوNoExecute. - يجب أن تتطابق Tolerations مع مفتاح Taint وقيمته وتأثيره حتى تتم جدولة Pod.
تمنحكم هذه الأدوات تحكمًا دقيقًا في مواضع تشغيل Pods!
الأسئلة الشائعة
هل درس «Taints وTolerations» مجاني؟
نعم — نص درس «Taints وTolerations» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة DevOps Bootcamp، انتقل إلى CoddyKit PRO. تتضمن دورة DevOps Bootcamp 4 دروس في المجموع.
ماذا ستتعلم في «Taints وTolerations»؟
امنع جدولة الوحدات على عقد محددة باستخدام taints، واسمح لوحدات معينة بتحمّلها تتمرن على DevOps Bootcamp مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ DevOps Bootcamp؟
لا تُشترط خبرة سابقة. DevOps Bootcamp على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «Taints وTolerations»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس DevOps Bootcamp هذا؟
نعم. كل درس في DevOps Bootcamp يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- طلبات الموارد وحدودها
- محدّدات العقدة والتقارب
- Taints وTolerations
- أولوية Pods والاستباق