العودة إلى المدونة

كيفية إنشاء عنقود Kubernetes باستخدام Kubeadm على Ubuntu 18.04

كيفية إنشاء عنقود Kubernetes باستخدام Kubeadm على Ubuntu 18.04

سيرشدك هذا البرنامج التعليمي إلى كيفية إعداد Kubernetes عنقودية من الصفر باستخدام Ansible و Kubeadm ومن ثم نشر تطبيق Nginx مجهز بحاويات باستخدامه.

مقدمة

Kubernetes (المعروف أيضًا باسم k8s أو “kube”) هو منصة مفتوحة المصدر لتنسيق الحاويات تقوم بأتمتة العديد من العمليات اليدوية المتضمنة في نشر التطبيقات المجهزة بحاويات وإدارتها وتوسيع نطاقها. يمتلك Kubernetes مجتمعًا مفتوح المصدر سريع النمو، يساهم بنشاط في المشروع. ألقِ نظرة على منشور المدونة الخاص بنا والذي سيعرفك على كل ما تحتاج لمعرفته حول أساسيات منصة Kubernetes.

Kubeadm هي أداة تقوم بتهيئة العديد من العناصر والأجزاء المدمجة مثل خادم API، وController Manager، وKube DNS. كما أنها تساعد في أتمتة التثبيت. ومع ذلك، فإنها لا تنشئ مستخدمين أو تتعامل مع تثبيت التبعيات على مستوى نظام التشغيل وتهيئتها، ولا يمكنها توفير بنيتك التحتية.

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

الأهداف:

ستتضمن مجموعتك الموارد المادية التالية:

1. عقدة رئيسية واحدة:

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

على سبيل المثال، سيحدد المجدول أي عقدة عمل ستستضيف POD المجدول حديثًا.

2. عقدتا عمل:

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

بمجرد إكمال هذا البرنامج التعليمي، سيكون لديك مجموعة تعمل بكامل طاقتها وجاهزة لتشغيل أعباء العمل (أي التطبيقات والخدمات المجهزة بحاويات) بافتراض أن الخوادم في المجموعة لديها موارد كافية من المعالج (CPU) والذاكرة (RAM) لتشغيل تطبيقاتك. بعد إعداد المجموعة بنجاح، يمكنك تشغيل أي تطبيق UNIX تقليدي تقريبًا. ويمكن وضعه في حاوية على مجموعتك، بما في ذلك تطبيقات الويب وقواعد البيانات والبرامج الخلفية (daemons) وأدوات سطر الأوامر.

ستستهلك المجموعة نفسها حوالي 300-500 ميجابايت من الذاكرة و10% من المعالج (CPU) على كل عقدة.

المتطلبات الأساسية:

  1. يجب أن يكون لديك زوج مفاتيح SSH على جهاز Linux المحلي الخاص بك ومعرفة كيفية استخدام مفاتيح SSH. ومع ذلك، إذا لم تكن قد استخدمت مفاتيح SSH من قبل، فيمكنك مراجعة هذا البرنامج التعليمي لمساعدتك في إعداد مفاتيح SSH على جهازك المحلي.
  2. ثلاثة خوادم تعمل بنظام التشغيل Ubuntu 18.04 مع ذاكرة وصول عشوائي (RAM) بسعة 4 جيجابايت على الأقل و4 معالجات افتراضية (vCPUs) لكل منها. يجب أن تكون قادرًا على الاتصال عبر SSH بكل خادم كمستخدم root باستخدام زوج مفاتيح SSH الخاص بك. اتبع هذا البرنامج التعليمي لتثبيت خادم Ubuntu الخاص بك.
  3. تثبيت Ansible على جهازك المحلي.
  4. يجب أن تكون أيضًا على دراية بـ Ansible playbooks.
  5. ستحتاج أيضًا إلى معرفة كيفية تشغيل حاوية من صورة Docker. انظر إلى “الخطوة 5 — العمل مع صور Docker في Ubuntu” في كيفية تثبيت واستخدام Docker على Ubuntu 18.04 إذا كنت بحاجة إلى تنشيط معلوماتك.

الخطوة 1 — إعداد دليل مساحة العمل وملف جرد Ansible

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

بمجرد إنشاء الدليل، ستقوم بإنشاء hosts ملف لتخزين جميع المعلومات حول عناوين IP الخاصة بكل خادم ومجموعته. سيساعدك على تخزين معلومات المخزون بداخله. وكما ذكرنا سابقًا، سيكون هناك ثلاثة خوادم، خادم رئيسي (master) وخادمان عاملان (workers). سيكون الخادم الرئيسي هو الماستر مع عنوان IP معروض كـ master_ip. سيكون الخادمان الآخران عاملين وسيكون لهما عناوين IP worker_1_ip و worker_2_ip.

تحتاج إلى إنشاء دليل باسم ~/kube-cluster في الدليل الرئيسي لجهازك المحلي والدخول إلى الدليل باستخدام الأمر cd:

سيعمل الدليل ~/kube-cluster الآن كمنطقة تخزين رقمية مؤقتة (مساحة عمل) ستقوم بداخلها بتشغيل جميع الأوامر المحلية لإنشاء عنقود Kubernetes باستخدام kubeadm. سيحتوي الدليل على جميع ملفات playbooks الخاصة بـ Ansible وسيتم استخدامه لبقية هذا البرنامج التعليمي.

إنشاء ملف المضيفين (Hosts File)

أنشئ ملفًا باسم ~/kube-cluster/hosts باستخدام nano أو محرر النصوص المفضل لديك:

الآن ستحتاج إلى إضافة النص التالي، والذي سيحدد معلومات حول البنية المنطقية للعنقود الخاص بك:

وكما ذكرنا، سيساعدك ملف المخزون (inventory) هذا على تخزين جميع المعلومات حول عناوين IP الخاصة بخوادمك والمجموعات التي ينتمي إليها كل خادم. ~/kube-cluster/hosts سيكون ملف المخزون الخاص بك و (masters و workers) هما مجموعتا Ansible اللتان أضفتهما إليه لتحديد البنية المنطقية للعنقود الخاص بك.

إن مجموعة Master هي المجموعة التي تحدد أنه يجب على Ansible تشغيل الأوامر عن بُعد كمستخدم root. كما أنها تسرد عنوان IP الخاص بالعقدة الرئيسية (master_ip) الذي يمكن إدراجه بواسطة إدخال الخادم المسمى “master”. وبالمثل، فإن مجموعة Workers تحتوي على إدخالين لخوادم العمال (worker_1_ip و worker_2_ip) اللذين يحددان أيضًا ansible_user كـ root.

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

الخطوة 2 — إنشاء مستخدم ليس root على جميع الخوادم البعيدة

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

يمكن أن يكون هذا مفيدًا للعمليات التي يتم إجراؤها بشكل متكرر للحفاظ على العنقود. علاوة على ذلك، ستساعدك هذه الخطوة على أداء المهمة بدقة أكبر وبأقل عرضة للأخطاء، مما يقلل من فرص تعديل أو حذف الملفات المهمة دون قصد. إذا كنت تريد تغيير إعداد الملفات المملوكة لـ root أو عرض معلومات النظام باستخدام أوامر مثل top/htop وعرض قائمة بالحاويات قيد التشغيل، فإن الخطوة التالية ستساعدك على أداء جميع المهام.

إنشاء الـ Playbook

أنشئ ملفًا باسم ~/kube-cluster/initial.yml في مساحة العمل:

بعد ذلك، تحتاج إلى إضافة الـ play التالي. الـ play في Ansible عبارة عن مجموعة من الخطوات التي سيتم تنفيذها والتي تستهدف خوادم ومجموعات معينة. يمكن أن يكون هناك play واحد أو أكثر في الـ playbook.

سيقوم الـ play التالي بإنشاء مستخدم sudo ليس root:

فيما يلي تفصيل لما يفعله دليل التشغيل (playbook) الخاص بنا:

  1. سيقوم دليل التشغيل هذا بإنشاء مستخدم غير جذري (non-root) باسم ubuntu.
  2. بما أنك بحاجة إلى تشغيل أوامر sudo دون الحصول على مطالبة بكلمة مرور، فإن هذا التشغيل سيقوم بتهيئة ملف sudoers للسماح للمستخدم ubuntu بالقيام بذلك.
  3. الهدف الرئيسي من المهمة المذكورة أعلاه هو السماح لك بالاتصال عبر SSH بكل خادم كمستخدم ubuntu. يضيف دليل التشغيل هذا المفتاح العام لجهازك المحلي (عادةً ~/.ssh/id_rsa.pub) إلى قائمة المفاتيح المصرح بها لمستخدم ubuntu البعيد.

الآن، بعد إضافة النص، تحتاج إلى حفظ الملف وإغلاقه.

تشغيل دليل التشغيل (playbook)

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

سيستغرق تنفيذ هذا الأمر بعض الوقت، وبعد ذلك ستظهر لك المخرجات التالية:

creating non root user create a kubernetes cluster

بعد اكتمال هذه الخطوة، يمكنك الانتقال إلى تثبيت التبعيات الخاصة بـ Kubernetes في الخطوة التالية.

الخطوة 3 — تثبيت تبعيات Kubernetes

في هذه الخطوة، ستتعلم كيفية تثبيت الحزم على مستوى نظام التشغيل المطلوبة بواسطة Kubernetes باستخدام مدير حزم Ubuntu.

هذه الحزم هي:

  1. Docker: Docker عبارة عن منصة وأداة لبناء وتوزيع وتشغيل حاويات Docker. يمكنك إعداد Docker بسهولة باتباع دليلنا التعليمي حول كيفية تثبيت & تشغيل Docker على Ubuntu في السحابة العامة. ومع ذلك، فإن دعم بيئات التشغيل الأخرى مثل rkt قيد التطوير النشط في Kubernetes.
  2. Kubeadm: kubeadm هي أداة واجهة سطر أوامر (CLI) تقوم بالإجراءات اللازمة لتشغيل حد أدنى من العنقود (cluster) الصالح للعمل. سيساعدك ذلك على تثبيت وبناء المكونات المختلفة للعنقود بطريقة قياسية.
  3. kubelet: الـ kubelet هو "عميل العقدة" (node agent) الرئيسي الذي يعمل على كل عقدة ويتعامل مع العمليات على مستوى العقدة.
  4. kubectl: kubectl هي أيضًا أداة واجهة سطر أوامر (CLI) تتصل بالعنقود الخاص بك وتصدر الأوامر من خلال خادم واجهة برمجة التطبيقات (API Server) الخاص به.
إنشاء دليل التشغيل (playbook)

أنشئ ملفًا باسم ~/kube-cluster/kube-dependencies.yml في مساحة العمل:

الآن تحتاج إلى إضافة التشغيلات التالية إلى الملف لتثبيت الحزم التالية على خوادمك:

يقوم التشغيل الأول في دليل المخطط (playbook) بما يلي:

  1. سيساعدك هذا التشغيل على تثبيت حزم على مستوى نظام التشغيل، Docker – بيئة تشغيل الحاويات.
  2. يقوم بتثبيت apt-transport-https، مما يتيح لك إضافة مصادر HTTPS خارجية إلى قائمة مصادر APT الخاصة بك.
  3. يضيف مفتاح apt الخاص بمستودع Kubernetes APT للتحقق من المفتاح.
  4. يضيف مستودع Kubernetes APT إلى قائمة مصادر APT الخاصة بالخوادم البعيدة.
  5. يقوم بتثبيت kubelet و kubeadm.

يقوم التشغيل الثاني بمهمة فردية وهامة تتضمن تثبيت kubectl على العقدة الرئيسية (master node). الآن، بعد إضافة النص، تحتاج إلى حفظ الملف وإغلاقه.

تشغيل دليل المخطط (playbook)

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

سيستغرق تنفيذ هذا الأمر بعض الوقت، وبعد ذلك ستظهر لك المخرجات التالية:

installing k8s dependencies create a kubernetes cluster

بعد التنفيذ، سيتم تثبيت Docker و kubeadm و kubelet على جميع الخوادم البعيدة. لا يعد Kubectl مكونًا مطلوبًا وهو مطلوب فقط لتنفيذ أوامر العنقود (cluster). وتثبيته على العقدة الرئيسية فقط أمر منطقي في هذا السياق لأنك ستقوم بتشغيل kubectl فقط من العقدة الرئيسية. ومع ذلك، يرجى ملاحظة أن kubectl يمكن تشغيل الأوامر من أي من عقد العمل أو من أي جهاز يمكن تثبيته وتهيئته للإشارة إلى العنقود.

تم الآن تثبيت جميع تبعيات النظام. لنقم بإعداد العقدة الرئيسية وتهيئة العنقود.

الخطوة 4 — إعداد العقدة الرئيسية

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

تعد الـ Pods أصغر الكائنات القابلة للنشر وأكثرها أساسية في Kubernetes. تحتوي الـ Pods على حاوية واحدة أو أكثر، مثل حاويات Docker. عندما تقوم الـ Pod بتشغيل حاويات متعددة، يتم إدارة هذه الحاويات ككيان واحد وتتشارك موارد الـ Pod.

لكل pod عنوان IP خاص به، ويجب أن يكون الـ pod الموجود على عقدة ما قادرًا على الوصول إلى pod على عقدة أخرى باستخدام عنوان IP الخاص بالـ pod. ومع ذلك، فإن الاتصال بين الـ pods أكثر تعقيدًا. فهو يحتاج إلى مكون منفصل يمكنه توجيه حركة المرور بشكل شفاف من pod على عقدة إلى pod على عقدة أخرى. تُستخدم إضافات شبكة pod لهذه الوظيفة. تتوفر العديد من إضافات شبكة pod، ولكننا سنستخدم Flannel لأنه خيار مستقر وفعال.

إنشاء دليل التشغيل

قم بإنشاء دليل تشغيل Ansible باسم master.yml على جهازك المحلي:

علاوة على ذلك، تحتاج إلى إضافة التشغيل التالي إلى الملف لتهيئة العنقود وتثبيت Flannel:

إليك تفصيل هذا الـ play:

  1. المهمة الأولى في هذا الـ play ستقوم بإعداد العنقود عن طريق تشغيل kubeadm init. لتحديد الشبكة الفرعية الخاصة التي سيتم تخصيص عناوين IP الخاصة بالـ pod لها، نقوم بتمرير الوسيط --pod-network-cidr=10.244.0.0/16. يستخدم Flannel الشبكة الفرعية المذكورة أعلاه افتراضيًا. نحن نستخدم هذا لإخبار kubeadm باستخدام نفس الشبكة الفرعية.
  2. تُستخدم المهمة الثانية لإنشاء دليل .kube في /home/ubuntu. سيحتوي هذا الدليل على معلومات التكوين مثل ملفات مفاتيح المسؤول، المطلوبة للاتصال بالعنقود وعنوان API الخاص بالعنقود.
  3. تُستخدم المهمة الثالثة لنسخ ملف /etc/kubernetes/admin.conf الذي تم إنشاؤه من kubeadm init إلى الدليل الرئيسي للمستخدم غير الجذر. سيسمح لك هذا باستخدام kubectl للوصول إلى العنقود الذي تم إنشاؤه حديثًا.
  4. المهمة الأخيرة تقوم بتشغيل kubectl apply لتثبيت Flannel. kubectl apply -f descriptor.[yml|json] هي الصيغة لإخبار kubectl بإنشاء الكائنات الموصوفة في ملف descriptor.[yml|json]. يحتوي ملف kube-flannel.yml على أوصاف الكائنات المطلوبة لإعداد Flannel في العنقود.

الآن، بعد إضافة النص، تحتاج إلى حفظ الملف وإغلاقه.

تشغيل الـ Playbook

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

سيستغرق تنفيذ هذا الأمر بعض الوقت، وبعد ذلك سترى المخرجات التالية:

setting up master node create a kubernetes cluster

الآن قم بالاتصال عبر SSH باستعمال الأمر التالي للتحقق من حالة العقدة الرئيسية:

بمجرد الدخول إلى العقدة الرئيسية، قم بتنفيذ:

سترى الآن المخرجات التالية:

get nodes

عند الحصول على المخرجات المذكورة أعلاه، يمكنك التأكيد على أن جميع مهام الإعداد قد تم إنجازها بواسطة العقدة الرئيسية ويمكنها البدء في قبول عقد العمل وتنفيذ المهام بمجرد دخولها في حالة جاهزة (Ready). يمكنك الآن إضافة عقد العمل من جهازك المحلي.

الخطوة 5 — إعداد عقد العمل

بعد إعداد العقدة الرئيسية، يمكننا الآن الانتقال إلى خطوتنا التالية وهي إعداد عقد العمل. يمكن إضافة عقد العمل إلى العنقود ببساطة عن طريق تنفيذ أمر واحد على كل خادم عمل. يتم تضمين المعلومات الهامة مثل عنوان IP، ومنفذ خادم API الخاص بالعقدة الرئيسية، والرمز المميز الآمن (secure token) في هذا الأمر. ومع ذلك، يجب أن تلاحظ أنه لن تتمكن جميع العقد من الانضمام إلى العنقود، بل فقط تلك العقد التي تمرر الرمز المميز الآمن هي التي ستتمكن من الانضمام.

إنشاء الـ playbook

سيساعدك هذا الأمر على العودة إلى مساحة العمل الخاصة بك وإنشاء playbook باسم workers.yml:

أضف النص التالي إلى الملف لإضافة عقد العمل إلى العنقود:

إليك ما يفعله الـ playbook. هناك تشغيلان في الكود أعلاه:

  1. يُستخدم التشغيل الأول للحصول على أمر الانضمام الذي يجب تشغيله على عقد العمل. سيكون تنسيق الأمر كالتالي: kubeadm join --token sha256:<hash><token><master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>;. تحتاج المهمة إلى الحصول على قيم الرمز المميز (token) والهاش (hash) الصحيحة. بمجرد حصولها على المدخلات الصحيحة، تقوم المهمة بتعيينها كحقيقة (fact) حتى يتمكن التشغيل الثاني من الوصول إلى تلك المعلومات.
  2. تمت كتابة التشغيل الثاني فقط لأداء مهمة فردية – لجعل عقدتي العمل جزءًا من العنقود ببساطة عن طريق تشغيل أمر الانضمام على جميع عقد العمل.

بعد إضافة النص، تحتاج إلى حفظ الملف وإغلاقه.

تشغيل الـ playbook

بعد ذلك، نحتاج إلى تنفيذ الـ playbook الخاص بنا عن طريق تشغيل الأمر التالي على أجهزة العمل:

سيستغرق تنفيذ هذا الأمر بعض الوقت، وبعد ذلك سترى المخرجات التالية:

setting up worker nodes

الآن، تم إعداد عنقود Kubernetes الخاص بك بالكامل وهو يعمل بكفاءة مع استعداد عقد العمل لتشغيل أعباء العمل. قبل الانتقال إلى الخطوة التالية، دعنا نتحقق من أن العنقود يعمل كما هو مخطط له.

الخطوة 6 — التحقق من العنقود

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

استخدم الأوامر التالية للحصول على حالة العنقود:

سيستغرق تنفيذ هذا الأمر بعض الوقت، وبعد ذلك سترى المخرجات التالية:

get nodes

 

 

 

 

تحتاج إلى التحقق مما إذا كانت جميع العقد التي تشكل جزءًا من العنقود في حالة الاستعداد. إذا كانت بعض العقد تحتوي على Not Ready كـ STATUS، فهذا يوضح أن عقد العمل لم تنتهِ من إعدادها بعد. ومع ذلك، قبل إعادة تشغيل kubectl get nodes والتحقق من المخرجات المحدثة، يجب عليك الانتظار لمدة خمس إلى عشر دقائق أخرى. إذا كانت بعض العقد لا تزال تظهر Not Ready كحالة لها، يجب عليك الذهاب والتحقق من الخطوات السابقة وإعادة تشغيل الأوامر. فقط إذا كانت العقد تحتوي على القيمة Ready لـ STATUS، فإنها تكون جزءًا من العنقود وجاهزة لتشغيل أعباء العمل. بعد تنفيذ الخطوة السادسة بنجاح، تم الآن التحقق من العنقود الخاص بك. الآن دعنا نجدول تطبيق Nginx كمثال على العنقود.

الخطوة 7 — تشغيل تطبيق على العنقود

إنشاء Deployment

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

تحتاج إلى تغيير اسم صورة Docker وأي علامات ذات صلة (مثل المنافذ والأحجام). لإبقاء الأمور مألوفة، يمكنك نشر Nginx باستخدام الـ deployments والـ services لمعرفة كيفية نشر التطبيقات في العنقود.

إن Kubernetes deployment هو كائن مورد في Kubernetes يوفر تحديثات تعريفية للتطبيقات. يتيح لك النشر (deployment) وصف دورة حياة التطبيق، مثل صورة الحاوية (container image)، والنسخ المتطابقة (replicas)، واستراتيجية التحديث. يضمن النشر تشغيل العدد المطلوب من الـ pods وإتاحتها في جميع الأوقات. إذا تعطل pod أثناء دورة حياة المجموعة (cluster)، فإنه يقوم بإنشائه مرة أخرى. كما يتم تسجيل عملية التحديث بالكامل وإصدارها مع خيارات للإيقاف المؤقت والاستمرار والتراجع إلى الإصدارات السابقة. سيساعدك الأمر أعلاه لإنشاء نشر باسم Nginx في نشر pod بحاوية واحدة من صورة Docker الخاصة بـ Nginx في سجل Docker.

إعداد Node Port

بعد ذلك، نحتاج إلى إنشاء NodePort. NodePort هو منفذ مفتوح على كل عقدة في مجموعتك (cluster). يقوم Kubernetes بتوجيه حركة المرور الواردة بشفافية على NodePort إلى خدمتك، حتى لو كان تطبيقك يعمل على عقدة أخرى. لهذا يمكننا استخدام هذا الأمر لإنشاء مورد NodePort باسم Nginx والذي سيقوم بنشر التطبيق علنًا:

الخدمة (Service) هي كائن آخر في Kubernetes مسؤول عن كشف واجهة لتلك الـ pods، مما يتيح الوصول إلى الشبكة إما من داخل المجموعة (cluster) أو بين العمليات الخارجية والخدمة. يمكن تعريفها على أنها تجريد فوق الـ pod يوفر عنوان IP واحدًا واسم DNS يمكن من خلاله الوصول إلى الـ pods. باستخدام الخدمة، يسهل جدًا إدارة تكوين موازنة التحميل.

قم بتشغيل الأمر التالي:

سيؤدي هذا إلى إخراج نص مشابه لما يلي:

get services

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

للتحقق من أنه يعمل، قم بزيارة http://worker_1_ip:nginx_port أو http://worker_2_ip:nginx_port من خلال متصفح على جهازك المحلي. سترى صفحة ترحيب Nginx المألوفة.

إزالة النشر (Deployment)

إذا كنت ترغب في إزالة تطبيق Nginx، فستحتاج أولاً إلى حذف خدمة nginx من العقدة الرئيسية (master node):

للتحقق من حذف التطبيق نهائيًا، تحتاج إلى تشغيل هذا الأمر:

ستحصل على المخرجات التالية:

check services

بعد ذلك، تحتاج إلى حذف النشر (deployment) باستخدام الأمر التالي:

يمكنك استخدام هذا الأمر للتحقق مما إذا كان قد تم حذف النشر نهائيًا:

get deployments

الخاتمة:

سيساعدك هذا البرنامج التعليمي على إعداد مجموعة (cluster) بشكل صحيح على Ubuntu 18.04 باستخدام Kubeadm و Ansible. الآن بعد إعداد مجموعتك، يمكنك بسهولة البدء في نشر تطبيقاتك وخدماتك الخاصة.

إليك قائمة بالروابط التي تحتوي على تفاصيل إضافية ستوجهك في هذه العملية:

  1. Dockerizing applications – يحتوي هذا الرابط على أمثلة ترشدك إلى كيفية تحميل التطبيقات باستخدام Docker. مثل تحويل PostgreSQL إلى حاوية Docker، وخدمة CouchDB، وما إلى ذلك.
  2. Pod Overview – يعرض هذا الرابط تفاصيل حول كيفية استخدام الـ pod، وآلية عمل الـ pods، وكيفية ارتباط الـ pods بكائنات Kubernetes الأخرى. تعد الـ pods جزءًا مهمًا من Kubernetes، لذا فإن فهمها سيساعدك على النجاح في مهمتك.
  3. Deployments Overview – سيساعدك هذا على التعرف على عمليات النشر (deployments). يوفر النشر تحديثات تعريفية للـ Pods و ReplicaSets. ستتعلم كيفية تحديث النشر وتدويره والتراجع عنه.
  4. Services Overview - سيرشدك هذا الرابط حول الخدمات التي تعد كائنًا آخر متكرر الاستخدام في مجموعات Kubernetes. الخدمة في Kubernetes هي تجريد يحدد مجموعة منطقية من الـ Pods وسياسة يمكنك من خلالها الوصول إليها. يعد فهم أنواع الخدمات والخيارات المتاحة لها أمرًا ضروريًا لتشغيل كل من التطبيقات عديمة الحالة (stateless) والتطبيقات ذات الحالة (stateful).

علاوة على ذلك، ألقِ نظرة على دروسنا التعليمية الأخرى التي تركز على Docker و Kubernetes والتي يمكنك العثور عليها في مدونتنا:

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

حوسبة سعيدة!

author

Manpreet Singh

المؤلف · CloudSigma

Preslav Dobrev هو مصمم إبداعي في CloudSigma، يركز على هوية أعمال متسقة باستخدام قنوات التسويق التقليدية والمبتكرة. هو بارع في دمج الرؤية الفنية مع التسويق الاستراتيجي لخلق سرد قصصي مؤثر للعلامة التجارية.

التعليقات

لا توجد تعليقات بعد. كن أول من يعلق.