قد لا تحتاج Kubernetes


فتاة على سكوتر. رسم توضيحي لـ freepik ، شعار Nomad بواسطة HashiCorp

Kubernetes عبارة عن غوريلا بحجم 300 كجم لتنسيق الحاويات. إنه يعمل في بعض من أكبر أنظمة الحاويات في العالم ، لكنه مكلف.

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

ماذا تريد


يدعم فريقنا عددًا من الخدمات النموذجية لمراقبة وتحليل الأداء: نقاط النهاية لواجهة برمجة التطبيقات (API) الخاصة بمقاييس Go ، وتصدير Prometheus ، ومحللات السجل مثل Logstash و Gollum ، بالإضافة إلى قواعد البيانات مثل InfluxDB أو Elasticsearch. كل من هذه الخدمات تعمل في حاوية خاصة بها. نحن بحاجة إلى نظام بسيط للحفاظ على كل هذا التشغيلية.

لقد بدأنا بقائمة متطلبات تزامن الحاوية:

  • إطلاق مجموعة من الخدمات على العديد من الأجهزة.
  • نظرة عامة على تشغيل الخدمات.
  • التواصل بين الخدمات.
  • إعادة التشغيل التلقائي في حالة تعطل الخدمة.
  • صيانة البنية التحتية من قبل فريق صغير.

بالإضافة إلى ذلك ، ستكون الأمور التالية لطيفة ، ولكن لن تكون الإضافات الإلزامية:

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

لماذا Kubernetes لا يناسبنا


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

كمثال ، يدعم Kubernetes تكوينات الخدمة المدمجة من خلال ConfigMaps . يمكنك الشعور بالارتباك بسرعة ، خاصةً عند دمج ملفات تكوين متعددة أو إضافة خدمات إضافية إلى الحافظة. يسمح لك Kubernetes (أو دفة القيادة في هذه الحالة) بتنفيذ تكوينات خارجية ديناميكية لفصل المصالح. ولكن هذا يؤدي إلى وجود اتصال سري بين مشروعك و Kubernetes. ومع ذلك ، فإن Helm و ConfigMaps هما خيارات إضافية ، لذلك ليس عليك استخدامهما. يمكنك ببساطة نسخ التكوين إلى صورة Docker. ومع ذلك ، من المغري أن نسلك هذا الطريق وأن نبني تجريدات غير ضرورية ، والتي يمكنك أن تندم عليها لاحقًا.

بالإضافة إلى ذلك ، فإن النظام البيئي Kubernetes ينمو بسرعة. يستغرق الكثير من الوقت والطاقة لاستكمال أحدث الممارسات وأحدث الأدوات. Kubectl ، minikube ، kubeadm ، رأس ، الحارث ، kops ، oc - القائمة تطول وتطول. في بداية العمل ، ليست كل هذه الأدوات ضرورية ، لكنك لا تعرف ما هو مطلوب ، لذلك عليك أن تكون على دراية بكل شيء. وبسبب هذا ، فإن منحنى التعلم حاد للغاية.

عند استخدام Kubernetes


في شركتنا ، يستخدم الكثيرون Kubernetes وهم سعداء بها. تتم إدارة هذه الحالات بواسطة Google أو Amazon ، والتي لديها موارد دعم كافية.

Kubernetes يأتي مع ميزات مذهلة تجعله أكثر قدرة على إدارة حاوية كبيرة الحجم:

  • إدارة الحقوق التفصيلية.
  • وحدات تحكم مخصصة إضافة منطق إلى الكتلة. هذه مجرد برامج تتحدث إلى Kubernetes API.
  • Autoscaling ! تستطيع Kubernetes توسيع نطاق الخدمات حسب الطلب باستخدام مقاييس الخدمة دون الحاجة إلى تدخل يدوي.

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

يقدم فريقنا معظم الخدمات عن بُعد (نظرًا للارتباط الوثيق بالبنية التحتية الرئيسية) ، لذلك لم نكن نريد رفع مجموعة Kubernetes الخاصة بنا. أردنا فقط تقديم الخدمات.

بطاريات غير المدرجة


البدو هو 20 ٪ من تزامن ، والذي يعطي 80 ٪ من الضروري. كل ما يفعله هو إدارة عمليات النشر. يتولى البدوي عمليات النشر وإعادة تشغيل الحاويات في حالة وجود أخطاء ... وهذا كل شيء.

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

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

أفضل شيء في Nomad هو أنه من السهل استبداله . لا يوجد عمليا أي ربط للبائع ، حيث يتم دمج وظائفه بسهولة في أي نظام آخر يدير الخدمات. إنه يعمل تمامًا مثل ثنائي منتظم على كل جهاز في كتلة ، هذا كل شيء!

النظام البيئي البدوي من المكونات المزدوجة


القوة الحقيقية للبدو في نظامها البيئي. يتكامل بشكل جيد مع المنتجات الأخرى - الاختيارية تمامًا - مثل القنصل (تخزين القيمة الرئيسية) أو Vault (معالجة الأسرار). داخل ملف Nomad توجد أقسام لاستخراج البيانات من هذه الخدمات:

template { data = <<EOH LOG_LEVEL="{{key "service/geo-api/log-verbosity"}}" API_KEY="{{with secret "secret/geo-api-key"}}{{.Data.value}}{{end}}" EOH destination = "secrets/file.env" env = true } 

نقرأ هنا service/geo-api/log-verbosity key الأساسية من القنصل وفي العملية التي نمثلها مع متغير البيئة LOG_LEVEL . نحن نمثل أيضًا secret/geo-api-key من Vault كـ API_KEY . بسيطة ولكنها قوية!

بسبب بساطته ، يمكن تمديد Nomad بسهولة من خلال خدمات أخرى من خلال API. على سبيل المثال ، يتم دعم علامات المهام. نقوم بتمييز جميع الخدمات باستخدام المقاييس باستخدام علامة trv-metrics . وبالتالي ، تجد Prometheus بسهولة هذه الخدمات من خلال القنصل وتتحقق دوريًا من نقطة النهاية /metrics بحثًا عن بيانات جديدة. يمكن القيام بنفس الشيء ، على سبيل المثال ، بالنسبة للسجلات التي تستخدم Loki .

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

  • تشغيل مهمة Jenkins بخطاف ، ويقوم القنصل بمتابعة إعادة نشر مهمة Nomad عندما يتغير تكوين الخدمة.
  • Ceph يضيف نظام الملفات الموزعة إلى البدوي.
  • فابيو لموازنة الحمل.

كل هذا يتيح لك تطوير البنية التحتية عضويا دون أي ربط خاص للبائع.

تحذير صادق


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

بالمقارنة مع Kubernetes ، فإن مجتمع البدوي ليس كبيرًا جدًا. يوجد في Kubernetes بالفعل حوالي 75000 عملية ارتكاب و 2000 مساهم ، بينما لدى Nomad حوالي 14000 عملية مشاركة و 300 مساهم. سيتم الضغط بشدة على Nomad لمواكبة Kubernetes بسرعة ، ولكن ربما هذا ليس ضروريًا! هذا نظام أكثر تخصصًا ، ويعني المجتمع الأصغر أيضًا أن طلب السحب الخاص بك من المحتمل أن يتم ملاحظته وقبوله من Kubernetes.

ملخص


الخلاصة: لا تستخدم Kubernetes لمجرد أن الجميع يفعل ذلك. قيّم بعناية متطلباتك وتحقق من الأداة الأكثر ربحية.

إذا كنت تخطط لنشر الكثير من الخدمات المتجانسة على بنية تحتية واسعة النطاق ، فإن Kubernetes يعد خيارًا جيدًا. فقط تذكر تكاليف التعقيد والصيانة الإضافية. يمكن تجنب بعض التكاليف باستخدام بيئة Kubernetes مُدارة مثل Google Kubernetes Engine أو Amazon EKS .

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

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

Source: https://habr.com/ru/post/ar445030/


All Articles