ثلاثة مستويات من القياس التلقائي في Kubernetes وكيفية استخدامها بفعالية

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

شرط Kubernetes Autoscaling 101: مقياس تلقائي للكتلة ، مقياس تلقائي أفقي ، مقياس تلقائي للقرص العمودي ترجم الأمر الذي نفذ القياس التلقائي إلى Kubernetes aaS من Mail.ru.

لماذا من المهم التفكير في التوسع

Kubernetes هي أداة لإدارة الموارد والتنسيق. بالطبع ، من الجيد العبث بالميزات الرائعة لنشر البودات ومراقبتها وإدارتها (الكبسولة عبارة عن مجموعة من الحاويات التي تعمل استجابةً لطلب ما).

ومع ذلك ، يجب أن تفكر أيضًا في الأسئلة التالية:

  1. كيفية قياس الوحدات والتطبيقات؟
  2. كيف تحافظ على الحاويات في حالة عمل وفعالة؟
  3. كيف تستجيب للتغييرات المستمرة في التعليمات البرمجية وأعباء العمل من المستخدمين؟

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

مستويات قياس Kubernetes التلقائي

يتطلب القياس التلقائي الفعال التنسيق بين طبقتين:

  1. طبقة جراب تتضمن مقياس أفقي (Horizontal Pod Autoscaler، HPA) و مقياس تلقائي عمودي (Vertical Pod Autoscaler، VPA). هذا هو مقياس الموارد المتاحة للحاويات الخاصة بك.
  2. مستوى الكتلة ، الذي يديره نظام Cluster Autoscaler (CA) ، فإنه يزيد أو يقلل من عدد العقد داخل الكتلة.

مقياس تلقائي أفقي (HPA)

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

مخطط عمل عالي المستوى لـ HPA:

  1. يتحقق HPA باستمرار من القيم المترية المحددة أثناء التثبيت بفاصل زمني افتراضي يبلغ 30 ثانية.
  2. تحاول HPA زيادة عدد الوحدات النمطية إذا تم الوصول إلى العتبة المحددة.
  3. تقوم HPA بتحديث عدد النسخ المتماثلة داخل وحدة تحكم النشر / النسخ المتماثل.
  4. تقوم وحدة التحكم في النشر / النسخ المتماثل بعد ذلك بنشر أي وحدات نمطية إضافية مطلوبة.

ثلاثة مستويات من القياس التلقائي في Kubernetes وكيفية استخدامها بفعالية
تبدأ HPA عملية نشر الوحدة النمطية عند الوصول إلى عتبة المقاييس

ضع في اعتبارك ما يلي عند استخدام HPA:

  • الفاصل الزمني الافتراضي لفحص HPA هو 30 ثانية. تم تعيينه مع العلم أفقي-pod-autoscaler-sync-period في مدير وحدة التحكم.
  • الخطأ النسبي الافتراضي هو 10٪.
  • بعد زيادة الوحدة الأخيرة ، ينتظر HPA استقرار المقاييس لمدة ثلاث دقائق. يتم تعيين هذا الفاصل بواسطة العلم أفقي-pod-autoscaler-upscale-time-upscale.
  • بعد تخفيض الوحدة الأخيرة ، ينتظر HPA لمدة خمس دقائق حتى يستقر. يتم تعيين هذا الفاصل بواسطة العلم أفقي-pod-autoscaler-downscale تأخير.
  • تعمل HPA بشكل أفضل مع كائنات النشر ، وليس مع وحدات التحكم في النسخ المتماثل. القياس التلقائي الأفقي غير متوافق مع التحديث المتداول ، والذي يعالج مباشرة وحدات التحكم في النسخ المتماثل. مع النشر ، يعتمد عدد النسخ المتماثلة بشكل مباشر على كائنات النشر.

القياس التلقائي العمودي للقرون

يخصص القياس التلقائي العمودي (VPA) وقتًا أكبر (أو أقل) من وحدة المعالجة المركزية أو وقت الذاكرة للقرون الموجودة. مناسب للقرون ذات الحالة أو عديمة الحالة ، ولكنها مخصصة بشكل أساسي للخدمات ذات الحالة. ومع ذلك ، يمكنك أيضًا استخدام VPA للوحدات عديمة الحالة إذا كنت تريد ضبط مقدار الموارد المخصصة في البداية تلقائيًا.

يستجيب VPA أيضًا لأحداث OOM (نفاد الذاكرة ، نفاد الذاكرة). يلزم إعادة تشغيل البودات لتغيير وقت وذاكرة وحدة المعالجة المركزية. عند إعادة التشغيل ، يحترم VPA ميزانية التخصيص (ميزانية توزيع القرون ، PDB) لضمان الحد الأدنى المطلوب من الوحدات.

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

بالإضافة إلى ذلك ، يحتوي VPA على ميزة توصية مثيرة للاهتمام (VPA المُزكي). يراقب استخدام الموارد وأحداث OOM لجميع الوحدات لاقتراح قيم جديدة للذاكرة ووقت وحدة المعالجة المركزية بناءً على خوارزمية ذكية تستند إلى مقاييس تاريخية. هناك أيضًا واجهة برمجة تطبيقات تقبل التعامل مع pod وترجع قيم الموارد المقترحة.

من الجدير بالذكر أن VPA المُزكي لا يتتبع "حد" الموارد. يمكن أن يتسبب هذا في احتكار الوحدة للموارد داخل العقد. من الأفضل تعيين حد على مستوى مساحة الاسم لتجنب استخدام الذاكرة الضخمة أو وحدة المعالجة المركزية.

سير عمل VPA عالي المستوى:

  1. يتحقق VPA باستمرار من القيم المترية المحددة أثناء التثبيت في فاصل زمني افتراضي مدته 10 ثوانٍ.
  2. إذا تم الوصول إلى العتبة المحددة ، يحاول VPA تغيير مقدار الموارد المخصصة.
  3. يقوم VPA بتحديث عدد الموارد داخل وحدة التحكم في النشر / النسخ المتماثل.
  4. عند إعادة تشغيل البودات ، يتم تطبيق جميع الموارد الجديدة على النسخ التي تم إنشاؤها.

ثلاثة مستويات من القياس التلقائي في Kubernetes وكيفية استخدامها بفعالية
يضيف VPA المقدار المطلوب من الموارد

ضع النقاط التالية في الاعتبار عند استخدام VPA:

  • يتطلب التحجيم إعادة تشغيل إلزامية للجراب. هذا ضروري لتجنب التشغيل غير المستقر بعد إجراء التغييرات. من أجل الموثوقية ، يتم إعادة تشغيل الوحدات النمطية وتوزيعها بين العقد بناءً على الموارد المخصصة الجديدة.
  • VPA و HPA غير متوافقين حتى الآن مع بعضهما البعض ولا يمكن تشغيلهما على نفس البودات. إذا كنت تستخدم آليتي القياس في نفس المجموعة ، فتأكد من أن الإعدادات لا تسمح بتنشيطهما على نفس الكائنات.
  • يصمم VPA طلبات الحاويات للموارد بناءً على استخدام الموارد السابق والحالي فقط. لا تضع حدودًا على استخدام الموارد. قد تكون هناك مشاكل في العمل غير الصحيح للتطبيقات التي ستبدأ في أخذ المزيد والمزيد من الموارد ، وسيؤدي ذلك إلى قيام Kubernetes بإيقاف تشغيل هذا الكبسولة.
  • لا يزال VPA في مرحلة مبكرة من التطوير. كن مستعدًا لأن النظام قد يخضع لبعض التغييرات في المستقبل القريب. يمكنك أن تقرأ عنها القيود المعروفة и خطط التنمية. لذلك ، فإن الخطط تهدف إلى تنفيذ العمل المشترك لـ VPA و HPA ، بالإضافة إلى نشر الوحدات جنبًا إلى جنب مع سياسة القياس التلقائي الرأسي لها (على سبيل المثال ، الملصق الخاص "يتطلب VPA").

قياس تلقائي لمجموعة Kubernetes

Cluster Autoscaler (CA) يغير عدد العقد بناءً على عدد البودات المعلقة. يتحقق النظام بشكل دوري من الوحدات النمطية المعلقة - ويزيد حجم الكتلة إذا كانت هناك حاجة إلى مزيد من الموارد وإذا لم تتجاوز الكتلة الحدود الموضوعة. يتفاعل المرجع المصدق (CA) مع مزود الخدمة السحابية ، ويطلب عقدًا إضافية منه ، أو يطلق عُقدًا خاملة. تم تقديم أول إصدار عام من CA في Kubernetes 1.8.

سير عمل CA عالي المستوى:

  1. يتحقق المرجع المصدق (CA) من الوحدات النمطية المعلقة بفاصل زمني افتراضي مدته 10 ثوانٍ.
  2. إذا كانت واحدة أو أكثر من البودات في حالة معلقة لأن الكتلة لا تحتوي على موارد كافية متاحة لتخصيصها ، فإنها تحاول توفير عقد إضافي واحد أو أكثر.
  3. عندما يخصص موفر السحابة العقدة المطلوبة ، فإنه ينضم إلى الكتلة ويكون جاهزًا لخدمة البودات.
  4. يخصص مجدول Kubernetes البودات المعلقة للعقدة الجديدة. إذا ظلت بعض الوحدات بعد ذلك في حالة انتظار ، تتكرر العملية - وتتم إضافة عقد جديدة إلى المجموعة.

ثلاثة مستويات من القياس التلقائي في Kubernetes وكيفية استخدامها بفعالية
التزويد التلقائي لعقد المجموعة في السحابة

ضع ما يلي في الاعتبار عند استخدام CA:

  • يضمن CA أن جميع الوحدات في الكتلة لديها مساحة للتشغيل ، بغض النظر عن حمل وحدة المعالجة المركزية. بالإضافة إلى ذلك ، يحاول التأكد من عدم وجود عقد غير ضرورية في الكتلة.
  • يسجل CA الحاجة إلى التحجيم بعد حوالي 30 ثانية.
  • بعد أن تصبح العقدة زائدة عن الحاجة ، ينتظر CA 10 دقائق افتراضيًا قبل تغيير حجم النظام.
  • نظام القياس التلقائي لديه مفهوم الموسعات. هذه استراتيجيات مختلفة لاختيار مجموعة من العقد التي ستضاف إليها العقد الجديدة.
  • استخدم الخيار بمسؤولية الكتلة-autoscaler.kubernetes.io/safe-to-evict (صحيح). إذا قمت بتثبيت الكثير من البودات ، أو إذا كان الكثير منها منتشرًا عبر جميع العقد ، فستفقد إلى حد كبير القدرة على تصغير الكتلة.
  • استخدم PodDisruptBudgetsلمنع حذف البودات ، مما قد يتسبب في تعطل جزء من تطبيقك تمامًا.

كيف تتفاعل أنظمة القياس التلقائي لـ Kubernetes مع بعضها البعض

لتحقيق الانسجام التام ، يجب تطبيق القياس التلقائي على مستوى الكبسولة (HPA / VPA) وعلى مستوى الكتلة. من السهل نسبيًا التفاعل مع بعضهم البعض:

  1. تقوم HPA أو VPA بتحديث النسخ المتماثلة أو الموارد المخصصة للقرون الموجودة.
  2. إذا لم يكن هناك ما يكفي من العقد لتوسيع نطاقها كما هو مخطط ، يلاحظ المرجع المصدق أن هناك كبسولات في حالة معلقة.
  3. يخصص CA عقدًا جديدة.
  4. يتم توزيع الوحدات النمطية على العقد الجديدة.

ثلاثة مستويات من القياس التلقائي في Kubernetes وكيفية استخدامها بفعالية
نظام تحجيم Kubernetes المشترك

الأخطاء الشائعة في مقياس Kubernetes التلقائي

هناك بعض المشكلات الشائعة التي تواجهها الأجهزة عند محاولة استخدام القياس التلقائي.

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

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

السيناريو المثالي - 4 دقائق:

  1. 30 ثانية. تحديث المقاييس المستهدفة: 30-60 ثانية.
  2. 30 ثانية. يتحقق HPA من القيم المترية: 30 ثانية.
  3. أقل من ثانيتين. تم إنشاء الكبسولات وهي في حالة انتظار: ثانية واحدة.
  4. أقل من ثانيتين. يرى المرجع المصدق (CA) الوحدات النمطية المعلقة ويرسل استدعاءات إلى عقد التزويد: ثانية واحدة.
  5. 3 دقائق. يخصص موفر السحابة العقد. تنتظر K8s حتى تصبح جاهزة: ما يصل إلى 10 دقائق (يعتمد على عدة عوامل).

السيناريو الأسوأ (الأكثر واقعية) - 12 دقيقة:

  1. 30 ثانية. تحديث المقاييس المستهدفة.
  2. 30 ثانية. يتحقق HPA من القيم المترية.
  3. أقل من ثانيتين. تم إنشاء الكبسولات والانتقال إلى حالة معلقة.
  4. أقل من ثانيتين. يرى المرجع المصدق الوحدات النمطية المعلقة ويرسل مكالمات لإعداد العقد.
  5. 10 دقائق. يخصص موفر السحابة العقد. K8s ينتظرون حتى يكونوا جاهزين. يعتمد وقت الانتظار على عدة عوامل مثل زمن انتقال البائع ووقت استجابة نظام التشغيل وعمل أداة الدعم.

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

كيفية إدارة التحجيم في Kubernetes

  1. Kubernetes هي أداة لإدارة الموارد وتنظيمها. تعتبر عمليات إدارة البودات وموارد المجموعة علامة فارقة في تطوير Kubernetes.
  2. تعرف على المنطق وراء قابلية توسيع الكبسولات باستخدام HPA و VPA.
  3. يجب استخدام CA فقط إذا كنت تفهم جيدًا احتياجات القرون والحاويات الخاصة بك.
  4. لتحسين إعداد المجموعة لديك ، تحتاج إلى فهم كيفية عمل أنظمة القياس المختلفة معًا.
  5. عند تقدير وقت القياس ، ضع في اعتبارك أسوأ السيناريوهات وأفضلها.

المصدر: www.habr.com

إضافة تعليق