كيف يعمل Kubernetes

مكتمل

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

ما هي مجموعة الكمبيوتر؟

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

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

Diagram of a computer cluster that shows how a task is distributed via the control plane to three nodes and the interaction between the nodes.

بنية Kubernetes

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

Diagram of a Kubernetes cluster architecture that shows the components installed on the control plane and the worker nodes.

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

يمكنك أيضا تشغيل أحمال عمل Microsoft باستخدام Windows Server 2019 أو أحدث على عقد نظام المجموعة. على سبيل المثال، افترض أن خدمة معالجة البيانات في تطبيق تتبع الطائرات بدون طيار مكتوبة كتطبيق .NET 4.5 يستخدم استدعاءات محددة لواجهة برمجة تطبيقات نظام التشغيل Windows. يمكن تشغيل هذه الخدمة فقط على العقد التي تعمل بنظام التشغيل خادم الويندوز.

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

طائرة التحكم Kubernetes

تُشغل طائرة التحكم في Kubernetes في مجموعة Kubernetes من الخدمات التي تدير وظيفة التزامن في Kubernetes.

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

إشعار

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

عقدة Kubernetes

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

الخدمات التي يتم تشغيلها في طائرة التحكم

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

Diagram of a Kubernetes cluster architecture that shows the components installed on the control plane.

تشكل الخدمات التالية مستوى التحكم في مجموعة Kubernetes:

  • خادم API
  • المخزن المساعد لذاكرة
  • Scheduler
  • مدير وحدة التحكم
  • إدارة وحدة تحكم السحابة

ما هو خادم API؟

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

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

تقوم API بعرض API RESTful التي يمكنك استخدامها لنشر الأوامر أو ملفات التكوين المستندة إلى YAML. YAML هو معيار بشري قابل للقراءة ومعيار تسلسل البيانات للغات البرمجة. يمكنك استخدام ملفات YAML لتعريف الحالة المرجوة لكافة الكائنات داخل مجموعة Kubernetes.

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

ما هو المخزن المساعد لذاكرة؟

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

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

إشعار

etcd غير مسؤول عن النسخ الاحتياطي للبيانات. تقع على عاتقك مسؤولية التأكد من وجود خطة نسخ احتياطي فعالة لنسخ البيانات احتياطيا etcd .

ما هو مبرمج الجدولة؟

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

ما هو مدير وحدة التحكم؟

يطلق ويراقب مدير وحدة التحكم وحدات التحكم التي تم تكوينها من أجل المجموعة من خلال خادم API.

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

تتصل وحدة التحكم بخادم API لتحديد حالة الكائن. إذا كانت الحالة الحالية مختلفة عن الحالة المطلوبة للكائن، تتخذ وحدة التحكم إجراء لضمان الحالة المطلوبة.

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

ما هو مدير وحدة التحكم في السحابة؟

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

خدمات تشغيل العقدة

يوجد العديد من الخدمات التي تُشغل عقدة Kubernetes للتحكم في كيفية تشغيل أحمال العمل.

Diagram of a Kubernetes cluster architecture that shows the components installed on a Kubernetes node.

تشغيل الخدمات التالية على عقدة Kubernetes:

  • Kubelet
  • Kube-proxy
  • وقت تشغيل الحاوية

ما هو kubelet؟

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

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

ما هو kube-proxy؟

مكون kube-proxy هو المسؤول عن شبكة اتصال المجموعة المحلية ويتم التشغيل على كل عقدة. يضمن أن لكل عقدة عنوان IP فريدًا. كما أنه يطبق قواعد لمعالجة التوجيه وموازنة التحميل للحركة باستخدام iptables وIPVS.

لا يوفر هذا الوكيل خدمات DNS بنفسه. يوصى بإنشاء مجموعة DNS إضافية استنادًا إلى CoreDNS وتثبيتها بشكل افتراضي.

ما هو وقت تشغيل الحاوية؟

وقت تشغيل الحاوية هو البرنامج الأساسي الذي يقوم بتشغيل حاويات على مجموعة Kubernetes. يعتبر وقت التشغيل مسؤولاً عن جلب وبدء وإيقاف صور الحاوية. يدعم Kubernetes العديد من أوقات تشغيل الحاوية، بما في ذلك على سبيل المثال لا الحصر Docker وcontainerd وrkt وCRI -O وfrakti. يعتمد دعم العديد من أنواع وقت تشغيل الحاويات على وقت تشغيل الحاوية (CRI). CRI هو تصميم مكون يربط kubelet بوقت تشغيل الحاويات المتاحة.

يتم حاوية وقت تشغيل الحاوية الافتراضي في AKS، وهو وقت تشغيل حاوية قياسي في الصناعة.

التفاعل مع مجموعة Kubernetes

يوفر Kubernetes أداة سطر أوامر تسمى kubectl لإدارة نظام المجموعة. يمكنك استخدام kubectl لإرسال الأوامر إلى وحدة التحكم في نظام المجموعة أو إحضار معلومات حول جميع كائنات Kubernetes عبر خادم API.

kubectl يستخدم ملف تكوين يتضمن معلومات التكوين التالية:

  • يحدد تكوين نظام المجموعة اسم نظام المجموعة ومعلومات الشهادة ونقطة نهاية واجهة برمجة تطبيقات الخدمة المقترنة بالمجموعة. يسمح لك هذا التعريف بالاتصال من محطة عمل واحدة إلى مجموعات متعددة.
  • يحدد تكوين المستخدم المستخدمين ومستويات الأذونات الخاصة بهم عند الوصول إلى المجموعات المكونة.
  • المستخدمون وأنظمة المجموعات لتكوين السياق عن طريق استخدام اسم مألوف. على سبيل المثال، قد يكون لديك "dev-cluster-" وprod-clusterd" لتحديد مجموعات التطوير والإنتاج.

يمكنك التكوين kubectl للاتصال بتجمعات متعددة عن طريق توفير السياق الصحيح كجزء من بناء جملة سطر الأوامر.

«pod» Kubernetes

يمثل «pod» مثيلاً فرديًا للتطبيق الذي يعمل في Kubernetes. أعباء العمل التي تقوم بتشغيلها على Kubernetes هي تطبيقات في حاويات. على عكس بيئة Docker، لا يمكنك تشغيل الحاويات مباشرة على Kubernetes. يمكنك حزم الحاوية في كائن Kubernetes المسمى بـ «pod». «pod» هو أصغر كائن يمكنك إنشاؤه في Kubernetes.

Diagram of a pod with a website as the primary container.

يمكن لـ «pod» الواحد الاحتفاظ بمجموعة مكونة من حاوية واحدة أو أكثر. ومع ذلك، عادةً لا يشمل «pod» مضاعفات لنفس التطبيق.

يتضمن الكبسولة معلومات حول التخزين المشترك وتكوين الشبكة ومواصفات حول كيفية تشغيل حاوياتها المحزمة. يمكنك استخدام نماذج «pod» في تعريف المعلومات حول «pods» التي يتم تشغيلها في مجموعتك. قوالب «pod» هي ملفات مُشفرة من نوع YAML التي تقوم بإعادة استخدامها وتضمينها في كائنات أخرى لإدارة عمليات نشر «pods».

Diagram of pod with a website as the primary container and a supporting container. The node has both an assigned IP address and a localhost host address.

على سبيل المثال، لنفترض أنك تريد نشر موقع ويب إلى مجموعة Kubernetes. يمكنك إنشاء ملف تعريف «pod» الذي يحدد صور حاوية التطبيق والتكوين. بعد ذلك، تنشر ملف تعريف «pod» إلى Kubernetes.

من غير المحتمل أن يكون لتطبيق الويب موقع إلكتروني كمكون وحيد في الحل. يحتوي تطبيق الويب عادةً على مخزن البيانات وعناصر أخرى داعمة. يمكن أن تحتوي «pods» Kubernetes على أكثر من حاوية واحدة.

افترض أن موقعك يستخدم قاعدة بيانات. يتم حزم الموقع في الحاوية الرئيسية، ويتم حزم قاعدة البيانات في الحاوية الداعمة. تتواصل حاويات متعددة مع بعضها البعض من خلال بيئة. تتضمن الحاويات خدمات لنظام تشغيل مضيف ومكدس شبكة ومساحة اسم kernel والذاكرة المشتركة وحجم التخزين. «pod» وبيئة الملعب التي توفر كل هذه الخدمات لتطبيقك. كما يسمح «pod» للحاويات بمشاركة عنوان IP المخصص لها.

لأنه يمكنك إنشاء العديد من «pods» التي يتم تشغيلها على العديد من العقد، من الصعب التعرف عليها. يمكنك التعرف على pods وتجميعها باستخدام تسميات السلسلة التي تحددها عند تعريف pod.

دورة حياة لـ «Kubernetes»

تحتوي قرون «Kubernetes» على دورة حياة مميزة تؤثر على طريقة نشر «pods» وتشغيلها وتحديثها. تبدأ بتقديم قائمة YAML pod إلى المجموعة. بعد تقديم واستمرار ملف القائمة إلى المجموعة، فإنه يعرف الحالة المرجوة من «pod». يجدول مبرمج الجدولة «pod» إلى عقدة صحية تحتوي على موارد كافية لتشغيل «pod».

Diagram that shows the lifecycle of a pod.

فيما يلي المراحل في دورة حياة «pod»:

المرحلة ‏‏الوصف
معلق يقبل الجراب نظام المجموعة، ولكن لا يتم إعداد كافة الحاويات في نظام المجموعة أو جاهزة للتشغيل. تشير الحالة المعلقة إلى الوقت الذي تنتظر فيه الجراب جدولته والوقت المستغرق في تنزيل صور الحاوية.
قيد التشغيل يتحول «pod» إلى حالة التشغيل بعد أن تجهيز جميع الموارد داخل «pod».
تم بنجاح تنتقل الحاوية إلى حالة ناجحة بعد إكمال الحاوية لمهمتها المقصودة وتشغيلها بنجاح.
فاشل يمكن أن تفشل «pods» لأسباب مختلفة. قد تفشل حاوية في الحاوية، مما يؤدي إلى إنهاء جميع الحاويات الأخرى، أو ربما لم يتم العثور على صورة أثناء إعداد حاويات الجراب. في هذه الأنواع من الحالات، يمكن للجراب الانتقال إلى حالة فشل. يمكن أن تنتقل الحجيرات إلى حالة فاشلة إما من حالة معلقة أو حالة قيد التشغيل. يمكن أيضًا للفشل المحدد إعادة «pod»مرة أخرى إلى الوضع المعلق.
غير معروفة إذا تعذر تحديد حالة الجراب، فإن الحاوية في حالة غير معروفة.

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

لا تحفظ المجموعة حالة «pod» أو التكوين المخصص ديناميكيًا. على سبيل المثال، لا يحفظ معرّف «pod» أو عنوان بروتوكول الإنترنت. يؤثر هذا الجانب على كيفية نشر «pods» وكيفية تصميم تطبيقاتك. على سبيل المثال، لا يمكنك الاعتماد على عناوين IP المعينة مسبقًا للكبسولات الخاصة بك.

حالات الحاوية

ضع في اعتبارك أن المراحل هي ملخص للمكان الذي توجد فيه «pods» في دورة حياتها. عند فحص «pod» تستخدم المجموعة ثلاث حالات لتتبع الحاويات داخل «pod»:

حالة ‏‏الوصف
قيد الانتظار‬ الحالة الافتراضية للحاوية وحالة الحاوية عندما لا تكون قيد التشغيل أو تم إنهاؤها.
قيد التشغيل يتم تشغيل الحاوية كما هو متوقع دون أي مشاكل.
إنهاء لم تعد الحاوية قيد التشغيل. والسبب هو أن جميع المهام قد انتهت أو فشلت الحاوية لسبب ما. يتوفر السبب ورمز الخروج لتصحيح كلتا الحالتين.