كيف يعمل نظام Kubernetes؟

جدول المحتويات:

كيف يعمل نظام Kubernetes؟
كيف يعمل نظام Kubernetes؟
Anonim

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

تحديد الكتلة

تثبيت Kubernetes واحد يسمى "الكتلة". داخل المجموعة ، هناك واحد أو أكثر من العقد المتاحة لتشغيل حاوياتك. العقدة هي تمثيل لآلة مادية تم ربطها بالكتلة.

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

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

دور مستوى التحكم

على نطاق أوسع ، يكون مستوى التحكم مسؤولاً عن الإدارة العالمية لمجموعتك. ستتم إدارة أي عملية يمكن أن تؤثر على عقد متعددة أو البنية التحتية للكتلة بواسطة لوحة التحكم.

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

جوهر مستوى التحكم هو kube-apiserverيوفر هذا المكون واجهة برمجة تطبيقات Kubernetes HTTP التي تستهلكها من خلال أدوات مثل Kubectl و Helm. واجهة برمجة التطبيقات هي الطريقة التي تتفاعل بها مع مجموعتك. يتم استخدامه أيضًا بواسطة مكونات الكتلة الأخرى ، مثل عمليات العاملين في Node ، لترحيل المعلومات مرة أخرى إلى لوحة التحكم.

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

تتم إدارة وحدات التحكم بشكل إجمالي بواسطة kube-controller-managerيبدأ مكون لوحة التحكم هذا ويدير وحدات التحكم الفردية. هذه العملية ستكون دائما قيد التشغيل. إذا توقف ، فلن يتم تحديد التغييرات التي تم إجراؤها من خلال خادم واجهة برمجة التطبيقات ، ولن تحدث أي تغييرات في الحالة على الإطلاق.

مكون آخر مهم في مستوى التحكم هو kube-Scheduler المجدول مسؤول عن تعيين Pods إلى Nodes. تتطلب الجدولة عادةً مراعاة العديد من المعلمات المختلفة ، مثل استخدام الموارد الحالي لكل عقدة وأي قيود قمت بفرضها في البيان.

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

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

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

التواصل بين العقد ولوحة التحكم

يحافظ Kubernetes على قناة اتصال ثنائية الاتجاه بين العقد وطائرة التحكم.

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

تقوم جميع العقد العاملة بتشغيل مثيل kubelet. هذه أداة مساعدة وكيل مسؤولة عن الحفاظ على الاتصال مع Kubernetes Control Plane. يراقب Kubelet باستمرار الحاويات التي تعمل بها Node. سيتم إخطار طائرة التحكم إذا سقطت الحاوية في حالة غير صحية.

عندما تحتاج العقدة إلى إرسال البيانات إلى لوحة التحكم ، يتصل Kubelet بخادم واجهة برمجة التطبيقات في طائرة التحكم. يستخدم هذا نفس واجهة HTTPS التي تتصل بها من خلال أدوات مثل kubectl. تم تكوين Kubelet مسبقًا باستخدام بيانات اعتماد تسمح له بالمصادقة على Kubernetes.

تتم معالجة حركة المرور من مستوى التحكم إلى العقد مرة أخرى باستخدام kubelet. يعرض Kubelet نقطة نهاية HTTPS الخاصة به والتي يمكن لطائرة التحكم الوصول إليها. تقبل نقطة النهاية هذه بيانات حاوية جديدة ، والتي يستخدمها kubelet بعد ذلك لضبط الحاويات قيد التشغيل.

ما الذي يتم تشغيله أيضًا؟

Kubelet ليس الثنائي الوحيد الذي يجب تشغيل Kubernetes Node. ستجد أيضًا مثيلًا لـ kube-proxy على كل عقدة. هذا مسؤول عن تكوين نظام شبكات Node للوفاء بمتطلبات أعباء عمل الحاوية الخاصة بك.

لدى Kubernetes مفهوم "الخدمات" ، والذي يعرض أجهزة Pods متعددة كهوية شبكة واحدة. إنه kube-proxy الذي يحول تعريفات الخدمة إلى قواعد الشبكات التي توفر الوصول الذي طلبته.

يقوم kube-proxy بتهيئة البنية التحتية لشبكات نظام التشغيل لعرض الخدمات التي أنشأتها kubelet. تتم معالجة إعادة توجيه حركة المرور إما عن طريق طبقة تصفية الحزمة على مستوى نظام التشغيل أو عن طريق وكيل kube نفسه.

إلى جانب kubelet و kube-proxy ، تحتاج العقد أيضًا إلى إتاحة وقت تشغيل الحاوية. وقت تشغيل الحاوية مسؤول عن سحب الصور وتشغيل حاوياتك بالفعل. يدعم Kubernetes أي وقت تشغيل يطبق مواصفات واجهة تشغيل وقت الحاوية. تتضمن الأمثلة containerd و CRI-O.

الخلاصة

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

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

يُظهر الرسم بنية مجموعة Kubernetes
يُظهر الرسم بنية مجموعة Kubernetes

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

عندما تتلقى العقدة بيانًا جديدًا ، فإنها ستستخدم وقت تشغيل الحاوية الخاصة بها لسحب الصورة المناسبة وبدء مثيل حاوية جديد. سيقوم kube-proxy بعد ذلك بتعديل تكوين الشبكة لإعداد الخدمات وإتاحة الوصول إلى عبء عملك. ينقل Kubelet البيانات حول صحة العقدة إلى Kubernetes ، مما يمكّنها من اتخاذ إجراء لإعادة جدولة Pods إذا أصبحت موارد العقدة مقيدة.

موضوع شعبي