كيفية عمل عمليات نشر «Kubernetes»

مكتمل

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

Diagram of the high-level architecture that shows the drone-tracking solution components.

خيارات نشر «pod»

هناك العديد من الخيارات لإدارة نشر الحجيرات في مجموعة Kubernetes عند استخدام kubectl. الخيارات هي:

  • نماذج «pod»
  • وحدات التحكم في النسخ المتماثل
  • مجموعات النسخ المتماثلة
  • عمليات النشر

يمكنك استخدام أي من هذه التعريفات الأربعة لنوع كائن Kubernetes لنشر جراب أو pods. تستخدم هذه الملفات YAML لوصف الحالة المقصودة للجراب أو الحجيرات التي سيتم نشرها.

ما هو نموذج «pod»؟

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

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

ما هي وحدة التحكم في النسخ المتماثل؟

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

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

ما هي مجموعة النسخ المتماثلة؟

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

يتيح المحدد لمجموعة النسخ المتماثلة تعريف «pods» التي يتم تشغيلها تحتها. باستخدام هذه الميزة، يمكنك إدارة «pods» المسماة بنفس القيمة كقيمة المحدد، ولكن لا يتم إنشاؤها مع مجموعة منسوخة.

ما هو النشر؟

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

افترض أن لديك خمسة مثيلات للتطبيق الخاص بك ليتم نشرها في مجموعتك. هناك خمسة «pods» تعمل على الإصدار 1.0.0 من تطبيقك.

Diagram that shows five pods running on a node with the same pod version.

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

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

Diagram that shows five pods, two pods set as version 1 and 3 pods set as version 2.

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

كما توفر لك عمليات التوزيع استراتيجية التراجع، والتي يمكنك تنفيذها باستخدام kubectl.

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

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

اعتبارات النشر

لدى «Kubernetes» متطلبات محددة حول كيفية تكوين شبكة التخزين والتخزين للمجموعة. كيفية تأثير تكوين هذين الجانبين على قراراتك حول كيفية عرض التطبيقات على شبكة المجموعة وتخزين البيانات.

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

شبكة «Kubernetes»

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

Diagram of nodes with assigned IP addresses in a cluster.

تخصص كل «pods» التي نشرتها IP من مجموعة عناوين IP. على سبيل المثال، افترض أن التكوين لديك يستخدم نطاق الشبكة 10.32.0.0/12، كما هو موضح أدناه.

Diagram of nodes and pods with assigned IP addresses in a cluster.

بشكل افتراضي، لا يمكن ربط «pods» والعقد مع بعضها باستخدام نطاقات عنوان IP مختلفة.

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

لتبسيط التواصل، تتوقع «Kubernetes» منك تكوين الشبكات بمثل هذه الطريقة:

  • يمكن لـ «pods» الاتصال ببعضها عبر العقد بدون ترجمة عنوان الشبكة (NAT).
  • يمكن ربط العقد بـ «pods»، والعكس بالعكس دون NAT.
  • يمكن للوكلاء على العقدة ربط مع كافة العقد بـ «pods».

يقدم «Kubernetes» العديد من خيارات الشبكات التي يمكنك تثبيتها لتكوين الشبكات. وتشمل الأمثلة «Antrea» وسيسكو تطبيق تتمحور البنية التحتية (ACI) و«Cilium» و«Flannel» و«Kubenet» و«VMware NSX-T» و«Weave Net».

كما يقدم مزودو خدمات السحابة حلول الشبكات الخاصة بهم. على سبيل المثال، تدعم خدمة «Kubernetes Azure (AKS)» واجهة شبكة حاويات الشبكات الظاهرية Azure (CNI) و«Cilium» و«Flannel» و«Kubenet» و«Antrea».

خدمات «Kubernetes »

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

يخصص «Kubernetes» خدمة عنوان IP على الإنشاء، مثل العقدة أو «pod». يتم تعيين هذه العناوين من نطاق IP الخاص بمجموعة الخدمة؛ على سبيل المثال، 10.96.0.0/12. تخصص الخدمة أيضًا اسم «DNS» استنادًا إلى اسم الخدمة ومنفذ IP.

في تطبيق تتبع الطائرات بدون طيار، يكون اتصال الشبكة كما يلي:

  • يمكن للمستخدمين خارج المجموعة الوصول إلى الموقع الإلكتروني و«RESTful API» خارج المجموعة.

  • يمكن الوصول إلى ذاكرة التخزين الداخلية المؤقتة وخدمات انتظار الرسائل في الواجهة الأمامية و«RESTful» على التوالي، ولكن ليس للمستخدمين الخارجيين.

  • تحتاج قائمة انتظار الرسائل إلى الوصول إلى خدمة معالجة البيانات، ولكن ليس للمستخدمين الخارجيين.

  • يمكن لذاكرة التخزين المؤقت وخدمة معالجة البيانات، ولكن ليس للمستخدمين الخارجيين الوصول إلى قاعدة بيانات «NoSQL».

لدعم هذه التصورات، يمكنك تكوين ثلاثة أنواع من الخدمات لعرض مكونات تطبيقك.

الخدمة الوصف
ClusterIP العنوان المخصص للخدمة التي توفر الخدمة لمجموعة من الخدمات داخل المجموعة. على سبيل المثال، الربط بين مكونات الواجهة الأمامية والواجهة الخلفية لتطبيقك.
NodePort منفذ العقدة بين 30000 و32767 الذي تعينه وحدة تحكم Kubernetes للخدمة؛ على سبيل المثال، 192.169.1.11 على clusters01. ثم تكوين الخدمة باستخدام المنفذ المستهدف على «pod» الذي تريد عرضه. على سبيل المثال، تكوين المنفذ 80 على «pod» المُشغل لأحد طرفي الجبهة. يمكنك الآن الوصول إلى الواجهة الأمامية من خلال عنوان المنفذ وIP العقدة.
موازن التحميل موازن التحميل الذي يسمح بتوزيع التحميل بين العقد التي تقوم بتشغيل تطبيقك، ويعرض «pod» للوصول إلى الشبكة العامة. عادةً ما تقوم بتكوين موازنات التحميل عند استخدام موفري السحابة. في هذه الحالة، يتم توجيه الحركة من موازن التحميل الخارجي إلى «pods» التي تقوم بتشغيل تطبيقك.

في تطبيق تتبع الطائرات بدون طيار، قد تقرر كشف موقع التتبع وواجهة برمجة تطبيقات RESTful باستخدام LoadBalancer وخدمة معالجة البيانات باستخدام ClusterIP.

كيفية تجميع «pods»

إدارة «pods» من خلال عنوان IP ليست عملية. تتغير عناوين IP في «Pod» كوحدات تحكم تعيد إنشائهم، وقد يكون لديك أي عدد من «pods» قيد التشغيل.

Diagram of a service with selector labels.

يسمح لك كائن الخدمة باستهداف وإدارة pods معينة في نظام المجموعة باستخدام تسميات المحدد. تعيين تسمية محدد في تعريف خدمة لمطابقة تسمية «pod» المعرفة في ملف تعريف «pod».

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

تخزين «Kubernetes»

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

Diagram of a service with selector labels again.

يوفر Kubernetes خيارات لتوفير التخزين المستمر باستخدام PersistentVolumes. يمكنك أيضا طلب تخزين محدد للقرون باستخدام PersistentVolumeClaims.

ضع هذين الخيارين في الاعتبار عندما تنشر مكونات التطبيق التي تتطلب تخزينًا مستمرًا، مثل قوائم انتظار الرسائل وقواعد البيانات.

اعتبارات تكامل السحابة

لا تفرض «Kubernetes» ذاكرة تخزين التكنولوجيا التي تستخدمها في تطبيق السحابة الأصلي. في بيئة السحابة مثل Azure، يمكنك استخدام العديد من الخدمات خارج مجموعة «Kubernetes».

أذكر مما سبق أن «Kubernetes» لا تقدم أي من الخدمات التالية:

  • البرامج الوسيطة
  • أطر تجهيز البيانات
  • قواعد البيانات
  • ذاكرة تخزين مؤقتة
  • أنظمة تخزين المجموعة

في حل تتبع الطائرات بدون طيار هذا، هناك ثلاث خدمات توفر وظائف البرامج الوسيطة: قاعدة بيانات NoSQL وخدمة ذاكرة التخزين المؤقت في الذاكرة وقوائم انتظار الرسائل. يمكنك تحديد MongoDB Atlas لحل NoSQL وRedis لإدارة ذاكرة التخزين المؤقت في الذاكرة و RabbitMQ أو Kafka اعتمادا على احتياجات قائمة انتظار الرسائل.

عندما تستخدم بيئة السحابة مثل «Azure»، فمن الأفضل استخدام الخدمات خارج مجموعة «Kubernetes». يمكن لهذا القرار تبسيط تكوين وإدارة المجموعة. على سبيل المثال، يمكنك استخدام ذاكرة التخزين المؤقت Azure ل Redis لخدمات التخزين المؤقت في الذاكرة، ناقل خدمة Azure المراسلة لقائمة انتظار الرسائل، وAzure Cosmos DB لقاعدة بيانات NoSQL.