أفضل 10 حيل ونصائح Kubernetes

أفضل 10 حيل ونصائح Kubernetes

هناك الكثير من المؤلفات المرجعية على الإنترنت، ولكن في بعض الأحيان تكون أبسط النصائح هي الأكثر قيمة. فريق Kubernetes aaS من Mail.ru مترجم مجموعة مختارة من عشر حيل ونصائحالتي جمعها مؤلف المقال بعد عام من العمل مع Kubernetes. النصائح ليست مرتبة حسب الأهمية، ولكننا نعتقد أن الجميع سيجدون شيئًا مفيدًا لأنفسهم.

أبسط أمر للعمل مع Kubernetes

لتبدأ، ربما الإجراء الأبسط والأكثر فائدة في العمل مع Kubernetes. يتيح الأمر التالي إكمال الأمر kubectl في قذيفة باش:

echo "source <(kubectl completion bash)" >> ~/.bashrc

الإكمال التلقائي kubectl سيتم كتابته في ملف .bashrc وسيتم تنشيطه تلقائيًا في كل مرة يتم فيها تشغيل الصدفة. يؤدي هذا إلى تسريع كتابة الأوامر والمعلمات الطويلة مثل all-namespaces. مزيد من التفاصيل في مساعدة باش Kubernetes.

حدود الذاكرة الافتراضية ووحدة المعالجة المركزية في مساحة الاسم

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

ولمنع ذلك، يسمح لك Kubernetes بتعيين القيود الافتراضية على أساس كل مساحة اسم. وهي مكتوبة في ملف yaml لمساحة اسم محددة. فيما يلي مثال على مثل هذا الملف:

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container

قم بإنشاء مثل yaml وتطبيقه على أي مساحة اسم. على سبيل المثال، إلى مساحة الاسم limit-example. الآن، سيكون لأي حاوية منشورة في مساحة الاسم هذه حدًا يبلغ 512 ميجا، ما لم يتم تعيين حد فردي آخر لهذه الحاوية.

جمع البيانات المهملة في الإصدارات القديمة من Kubernetes

يبدأ Kubelet بشكل افتراضي في جمع البيانات المهملة عندما var/lib/docker يشغل 90% من مساحة القرص المتوفرة. يعد هذا أمرًا رائعًا، ولكن حتى الإصدار 1.7 من Kubernetes، لم يكن هناك حد افتراضي لعدد الإدخالات المستخدمة، والتي تتوافق مع عدد الملفات في نظام الملفات.

من المحتمل أن تكون الحاوية الخاصة بك var/lib/docker قد يستخدم فقط 50% من مساحة القرص، ولكن قد ينفد من inodes، الأمر الذي سيسبب مشاكل للعاملين.

في الإصدارات الأقدم من kubelet من 1.4 إلى 1.6، سيتعين عليك إضافة هذه العلامة:

--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%

في الإصدار 1.7 والإصدارات الأحدث، يتم تعيين هذه العلامة افتراضيًا. ومع ذلك، الإصدارات السابقة لا تراقب حد inode.

Minikube... Kubernetes محلية صغيرة ولكنها قوية

Minikube هي أسهل طريقة لتشغيل مجموعة Kubernetes المحلية. يتم تشغيله بأمر بسيط:

minikube start

يؤدي تشغيل هذا الأمر إلى تشغيل مجموعة Kubernetes حقيقية على جهازك.

أفضل 10 حيل ونصائح Kubernetes
مصدر التوضيح

الحيلة هي كيفية إنشاء التطبيق وتشغيله محليًا على تلك المجموعة. ما لم يتم توجيه تعليمات محددة، سيتم إنشاء صورة Docker على جهاز الكمبيوتر الخاص بك وليس على المجموعة.

لإجبار Docker على دفع الصورة إلى مجموعة Kubernetes المحلية، يتم إعطاء جهاز الإرساء الأمر التالي:

eval $(minikube docker-env)

يمكننا الآن إنشاء تطبيقات على مجموعة Kubernetes المحلية.

لا تمنح kubectl حق الوصول للجميع

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

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

إدارة ميزانيات الكبسولة

كيف يمكن التأكد من عدم توقف التطبيق في مجموعة Kubernetes؟ PodDisruptionBudget ومرة ​​أخرى PodDisruptionBudget.

يتم تحديث المجموعات بشكل دوري ويتم إفراغ العقد. لا شيء يقف على حاله، هذا هو الواقع. يجب أن تتضمن كل عملية نشر تحتوي على أكثر من مثيل واحد PDB (PodDisruptionBudget). يتم إنشاؤه في ملف yaml بسيط يتم تطبيقه على المجموعة. يتم تحديد منطقة التغطية لـ PDB معين بواسطة محددات الملصقات.

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

مثال بنك التنمية الآسيوي:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: app-a-pdb
spec:
  minAvailable: 2
  selector:
      matchLabels:
        app: app-a

المعلمتان الرئيسيتان هما matchLabels и minAvailable. تحدد المعلمة الأولى التطبيقات التي تنطبق عليها الميزانية. على سبيل المثال، إذا كان لدي عمليات نشر ذات تسميات app: app-a и app: app-b، فسيتم تطبيق PDB هذا على الأول فقط.

المعلمة minAvailable يؤخذ بعين الاعتبار عند تفريغ (تنظيف) العقدة. على سبيل المثال، في مثالنا، أثناء التفريغ، يتم إخلاء جميع الحالات app: app-a، باستثناء اثنين.

يتيح لك هذا التحكم في عدد مثيلات التطبيق التي يجب تشغيلها في أي وقت محدد.

مراقبة صحة التطبيق

مثل هذه المراقبة ممكنة بطريقتين: استخدام اختبارات الاستعداد أو الحياة.

المسبار الأول (الجاهزية) يحدد مدى جاهزية الحاوية لاستقبال حركة المرور.

أما الثاني (الحيوية) فيوضح ما إذا كانت الحاوية سليمة أم تحتاج إلى إعادة التشغيل.

تتم إضافة التكوينات ذات الصلة ببساطة إلى yaml للنشر. هناك يمكنك تحديد المهلات وأوقات التأخير وعدد مرات إعادة المحاكمة. رؤية المزيد من التفاصيل عنهم وثائق كوبيرنيتيس.

العلامات في كل مكان

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

يمكنك فعل أي شيء تقريبًا باستخدام العلامات، ولكن من الأمثلة الجيدة على ذلك إنشاء بيئات متعددة لتشغيل البرامج على نفس المجموعة.

لنفترض أنك تستخدم نفس المجموعة لـ dev и qa. هذا يعني أنه يمكنك الحصول على تطبيق app-a، والعمل في وقت واحد في كلا البيئتين qa и dev. في هذه الحالة، يمكننا الوصول بشكل منفصل إلى مثيل التطبيق في بيئة معينة عن طريق تحديد المعلمة المناسبة environment. على سبيل المثال app: app-a и environment: dev لبيئة واحدة، و app: app-a и environment: qa للثاني.

يتيح لك هذا الوصول إلى كلا مثيلي التطبيق، على سبيل المثال، لإجراء الاختبار في وقت واحد.

كن منظمًا

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

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

إذا قمت لسبب ما بحذف عملية نشر (حاوية، صورة، أيًا كان)، فقط تأكد من إجراء عملية تنظيف كاملة.

تلبية الذهاب

لقد احتفظنا بالنصيحة الرئيسية للأخير. تعلم لغة البرمجة Go.

تم تطوير Kubernetes بلغة Go، وتمت كتابة كافة الامتدادات بلغة Go، كما تم دعم مكتبة العميل Client-Go رسميًا.

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

ربما يكون تعلم لغة البرمجة Go وإتقان التعامل مع العميل أهم نصيحة يمكنك تقديمها لمستخدمي Kubernetes الجدد.

تمت ترجمته بدعم من Mail.ru Cloud Solutions

ماذا تقرأ:

  1. ثلاثة مستويات من القياس التلقائي في Kubernetes وكيفية استخدامها بفعالية.
  2. العقد العاملة في Kubernetes: العديد من العقد الصغيرة أو عدد قليل من العقد الكبيرة?
  3. 25 أداة مفيدة لنشر وإدارة Kubernetes.

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

إضافة تعليق