
أنا خلقت Kube Eagle - مصدر بروميثيوس. لقد اتضح أنه شيء رائع يساعد على فهم أفضل لموارد المجموعات الصغيرة والمتوسطة. نتيجة لذلك ، قمت بحفظ أكثر من مائة دولار ، لأنني اخترت الأنواع المناسبة من الأجهزة وقمت بتكوين حدود موارد التطبيق لأحمال العمل.
سوف أتحدث عن مزايا Kube Eagle ، لكن أولاً سأشرح لماذا ظهرت الضجة ولماذا كانت هناك حاجة إلى مراقبة عالية الجودة.
تمكنت عدة مجموعات من 4-50 العقد. في كل مجموعة - ما يصل إلى 200 الخدمات والتطبيقات الصغيرة. للاستفادة بشكل أفضل من الأجهزة المتاحة ، تم تكوين معظم عمليات النشر باستخدام موارد ذاكرة الوصول العشوائي القابلة للانفجار ووحدة المعالجة المركزية. يمكن أن تأخذ القرون الموارد المتاحة ، إذا لزم الأمر ، وفي الوقت نفسه لا تتداخل مع التطبيقات الأخرى على هذه العقدة. حسنا ، أليس كذلك عظيمًا؟
على الرغم من أن الكتلة استهلكت القليل جدًا من وحدة المعالجة المركزية (8٪) وذاكرة الوصول العشوائي (40٪) ، إلا أننا واجهنا دائمًا مشكلات في مزاحمة الموقد عندما حاولوا تخصيص ذاكرة أكبر من تلك المتوفرة على العقدة. ثم كان لدينا لوحة تحكم واحدة فقط لرصد موارد Kubernetes. هنا واحد:

Grafana لوحة القيادة مع مقاييس cAdvisor فقط
مع هذه اللوحة ، فإن العقد التي تستهلك الكثير من الذاكرة ووحدة المعالجة المركزية ليست مشكلة. المشكلة هي معرفة السبب. للحفاظ على القرون في مكانها الصحيح ، يمكنك ، بالطبع ، تكوين الموارد المضمونة على جميع القرون (الموارد المطلوبة تساوي الحد). لكن هذا ليس أذكى استخدام للحديد. كان هناك عدة مئات غيغا بايت من الذاكرة على الكتلة ، بينما كانت بعض العقد يتضورون جوعًا ، بينما كان لدى الآخرين 4 إلى 10 جيجابايت.
اتضح أن برنامج جدولة Kubernetes قام بتوزيع أعباء العمل عبر الموارد المتاحة بشكل غير متساو. يأخذ برنامج Kubernetes Scheduler في الاعتبار التكوينات المختلفة: التقارب ، والقواعد الشديدة والتحمل ، محددات العقدة التي يمكن أن تحد من العقد المتاحة. ولكن في حالتي ، لم يكن هناك شيء من هذا القبيل ، وتم التخطيط للقرون اعتمادًا على الموارد المطلوبة في كل عقدة.
من أجل الموقد ، تم تحديد عقدة تحتوي على أكثر الموارد حرية والتي تلبي شروط الطلب. اتضح أن الموارد المطلوبة على العقد لا تتطابق مع الاستخدام الفعلي ، وهنا جاء Kube Eagle وقدرته على مراقبة الموارد إلى الإنقاذ.
لدي ما يقرب من جميع مجموعات Kubernetes تتبع فقط مع مصدر Node و Kube State Metrics . يوفر Node Exporter إحصائيات حول الإدخال / الإخراج والقرص ووحدة المعالجة المركزية (CPU) وذاكرة الوصول العشوائي (RAM) ، وتعرض مقاييس حالة Kube مقاييس كائن Kubernetes ، مثل الطلبات وحدود موارد وحدة المعالجة المركزية والذاكرة.
نحتاج إلى دمج مقاييس الاستخدام مع الطلب والحد من المقاييس في Grafana ، ثم نحصل على جميع المعلومات حول المشكلة. يبدو الأمر بسيطًا ، ولكن في الواقع في هاتين الأداتين ، يتم تسمية التصنيفات بشكل مختلف ، وبعض المقاييس لا تحتوي على تصنيف بيانات التعريف على الإطلاق. يقوم Kube Eagle بكل شيء بمفرده واللوحة تبدو كالتالي:


Kube Eagle Dashboard
تمكنا من حل العديد من المشاكل مع الموارد وتوفير المعدات:
- لم يعرف بعض المطورين عدد الموارد التي تحتاج إليها الخدمات المصغرة (أو ببساطة لم يزعجوها). لم يكن لدينا شيء للعثور على طلبات الموارد الخاطئة - لهذا نحن بحاجة إلى معرفة طلبات بالإضافة إلى حدود الاستهلاك. الآن يرون قياسات Prometheus ، ومراقبة الاستخدام الفعلي وضبط الاستعلامات والحدود.
- تطبيقات JVM تأخذ الكثير من ذاكرة الوصول العشوائي. أداة تجميع مجمعي البيانات المهملة تحرر الذاكرة فقط في حالة وجود أكثر من 75٪. ونظرًا لأن معظم الخدمات لها ذاكرة قابلة للانفجار ، فإن JVM احتلتها دائمًا. لذلك ، استهلكت كل خدمات جافا هذه ذاكرة الوصول العشوائي (RAM) أكثر بكثير من المتوقع.
- طلبت بعض التطبيقات الكثير من الذاكرة ، ولم يعط جدولة Kubernetes هذه العقد لتطبيقات أخرى ، على الرغم من أنها كانت في الواقع أكثر حرية من العقد الأخرى. أضاف أحد مطوري البرامج رقمًا إضافيًا عن طريق الخطأ وأمسك جزءًا كبيرًا من ذاكرة الوصول العشوائي: 20 جيجابايت بدلاً من 2. لم يلاحظ أحد ذلك. كان التطبيق 3 النسخ المتماثلة ، لذلك تأثرت 3 العقد.
- قدمنا حدود الموارد ، وإعادة تخطيط القرون مع الطلبات الصحيحة وحصلنا على التوازن المثالي لاستخدام الحديد في جميع العقد. عموما يمكن إغلاق بضع العقد. ثم رأينا أن لدينا الأجهزة الخاطئة (الموجهة نحو وحدة المعالجة المركزية ، وليس الموجهة نحو الذاكرة). لقد غيرنا النوع وحذفنا عددًا قليلًا من العقد.
النتائج
مع وجود موارد قابلة للانفجار في كتلة ما ، يمكنك استخدام الأجهزة الموجودة بشكل أكثر كفاءة ، لكن برنامج جدولة Kubernetes يقوم بجدولة القرون على طلبات الموارد ، وهو أمر محفوف بالمخاطر. لقتل عصفورين بحجر واحد: لتجنب المشاكل ، واستخدام الموارد على أكمل وجه ، هناك حاجة إلى مراقبة جيدة. يعد Kube Eagle (مصدر بروميثيوس ولوحة معلومات Grafana) مفيدًا لهذا الغرض.