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

كيفية تثبيت واستخدام Kubernetes على Ubuntu 20.04

كيفية تثبيت واستخدام Kubernetes على Ubuntu 20.04

مقدمة

Kubernetes هي أداة مفتوحة المصدر بالغة الأهمية في container orchestration. يعمل Kubernetes عن طريق تنسيق وإدارة المجموعات (clusters) على نطاق واسع عبر بيئات سحابية مختلفة أو حتى خوادم محلية. المجموعة هي مجموعة من المضيفين المخصصين لتشغيل التطبيقات والخدمات المغلفة في حاويات. تحتاج المجموعة إلى عقدتين على الأقل للعمل – واحدة master node و worker node. مع مراعاة قابلية التوسع، لديك خيار توسيع المجموعة بالعدد الذي تريده من عقد العمل (worker nodes) حسب الحاجة.

تشير العقدة (node) في Kubernetes إلى خادم. العقدة الرئيسية (master node) هي خادم يدير حالة المجموعة. عقد العمل (worker nodes) هي خوادم تقوم بتشغيل أعباء العمل – وعادة ما تكون هذه containerized applications and services.

هذا guide will walk you through the steps of installing and deploying a Kubernetes cluster consisting of two nodes on Ubuntu 20.04. كما ذكرنا، فإن وجود عقدتين هو التكوين الأكثر أساسية عند العمل مع Kubernetes. لديك أيضًا خيار إضافة المزيد من عقد العمل بمجرد فهمك للأساسيات. سنوضح لك أيضًا كيفية ربط الخادمين للسماح للعقدة الرئيسية (master node) بالتحكم في عقدة العمل (worker node).

لاختبار التكوين الخاص بنا، سنقوم بنشر Docker حاوية تقوم بتشغيل Nginx webserver في المجموعة. هذا تطبيق نموذجي من الحياة الواقعية لـ Kubernetes. ستتعلم المزيد عن بعض المكونات المحددة لـ Kubernetes مثل kubectl و kubeadm مع تقدمنا. ويُنصح أيضًا بالتعرف أولاً على برنامجنا التعليمي حول getting to know Kubernetes tool-kit basics لتعريف نفسك بأساسيات منصة Kubernetes.

الآن، لنبدأ!

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

ستحتاج إلى توفير خادمين، يعملان بنظام Ubuntu 20.04. للحصول على أفضل أداء، فإن الحد الأدنى لمتطلبات النظام لـ Kubernetes هو 2 جيجابايت من ذاكرة الوصول العشوائي (RAM) ووحدتي معالجة مركزية (CPUs). يمكنك اتباع الخطوات من 1 إلى 4 من هذا step-by-step tutorial to help you set up your Ubuntu server على CloudSigma. سيكون أحد الخادمين هو العقدة الرئيسية (master node)، والآخر سيكون عقدة العمل (worker node). لقد قمنا بتسمية خادمينا بشكل مناسب باسم kubernetes-master و kubernetes-worker. هذا يسهل متابعة البرنامج التعليمي. ومع ذلك، فأنت حر في اختيار hostnames التي تفضلها.

  • تأكد من إضافة مستخدم يتمتع بامتيازات sudo على كلا العقدتين اللتين سنستخدمهما لتشغيل الأوامر كما هو موضح في البرنامج التعليمي أعلاه. اتبع هذا tutorial on configuring the Linux sudoers file for instructions.

  • الاتصال بالشبكة – يجب أن تكون الخوادم في المجموعة قادرة على الاتصال. عند نشر أجهزتك الافتراضية (VMs) من CloudSigma، فسيتم توصيلها بالإنترنت باستخدام عنوان IP عام افتراضيًا. إذا كنت تعمل من شبكة محلية، فقد تضطر إلى edit your /etc/hosts في كل خادم وربطهما بشكل مناسب.

  • ستحتاج إلى تثبيت وتمكين Docker على كل من العقد. يعتمد Kubernetes على بيئة تشغيل الحاويات (container runtime) لتشغيل الحاويات في القرون (pods). على الرغم من وجود منصات حاويات أخرى للاختيار من بينها، إلا أننا سنستخدم Docker في هذا البرنامج التعليمي. سيوفر Docker بيئة التشغيل التي يحتاجها Ubuntu. يمكنك اتباع الخطوات 1 و 2 و 3 من tutorial on installing and operating Docker.

الخطوة 1: تثبيت Kubernetes

في هذه الخطوة، سنقوم بتثبيت Kubernetes. تمامًا كما فعلت مع Docker في prerequisites، يجب عليك تشغيل الأوامر في كلا العقدتين لتثبيت Kubernetes. استخدم ssh لتسجيل الدخول إلى كلا العقدتين والمتابعة. ستبدأ بتثبيت حزمة apt-transport-https التي تتيح العمل مع http و https في مستودعات Ubuntu. أيضًا، قم بتثبيت curl لأنه سيكون ضروريًا للخطوات التالية. نفذ الأمر التالي:

ثم، أضف Kubernetes signing key إلى كلا العقدتين عن طريق تنفيذ الأمر:

بعد ذلك، نقوم بإضافة Kubernetes repository كمصدر حزمة على كلا العقدتين باستخدام الأمر التالي:

بعد ذلك، قم بتحديث العقد:

  • تثبيت أدوات Kubernetes

بمجرد اكتمال التحديث، سنقوم بتثبيت Kubernetes. يتضمن ذلك تثبيت الأدوات المختلفة التي تشكل Kubernetes: kubeadm, kubelet, kubectl، و kubernetes-cni. يتم تثبيت هذه الأدوات على كلا العقدتين. سنقوم بتعريف كل أداة أدناه:

  • kubelet – هو وكيل يعمل على كل عقدة ويتعامل مع الاتصال بالعقدة الرئيسية لبدء أعباء العمل في بيئة تشغيل الحاويات. أدخل الأمر التالي لتثبيت kubelet:

  • kubeadm – جزء من مشروع Kubernetes ويساعد في تهيئة عنقود Kubernetes. أدخل الأمر التالي لتثبيت kubeadm:

  • kubectl – أداة سطر أوامر Kubernetes التي تتيح لك تشغيل الأوامر داخل عناقيد Kubernetes. نفذ الأمر التالي لتثبيت kubectl:

  • kubernetes-cni – يتيح إمكانية الاتصال بالشبكة داخل الحاويات لضمان قدرتها على الاتصال وتبادل البيانات. نفذ الأمر التالي للتثبيت:

اختياريًا، يمكنك تثبيت الأربعة جميعًا في أمر واحد:

الخطوة 2: تعطيل ذاكرة التبادل (Swap Memory)

يفشل Kubernetes في العمل في نظام يستخدم swap memory. وبالتالي، يجب تعطيلها في العقدة الرئيسية وجميع عقد العمل. نفذ الأمر التالي لتعطيل ذاكرة التبادل:

يقوم هذا الأمر بتعطيل ذاكرة التبادل حتى يتم إعادة تشغيل النظام. يجب علينا التأكد من بقائها معطلة حتى بعد إعادة التشغيل. يجب القيام بذلك على العقدة الرئيسية وجميع عقد العمل. يمكننا القيام بذلك عن طريق تعديل ملف fstab file وتعليق سطر /swapfile باستخدام #. افتح الملف باستخدام محرر النصوص nano عن طريق إدخال الأمر التالي:

داخل الملف، قم بتعليق سطر swapfile كما هو موضح في لقطة الشاشة أدناه:

install Kubernetes fstab swap disable

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

الخطوة 3: تعيين أسماء مضيفين فريدة

يجب أن تحتوي العقد الخاصة بك على أسماء مضيفين فريدة لتسهيل التعرف عليها. إذا كنت تقوم بنشر عنقود يحتوي على العديد من العقد، فيمكنك تعيين أسماء تعريفية لعقد العمل الخاصة بك مثل node-1 و node-2 وما إلى ذلك. وكما ذكرنا سابقًا، فقد قمنا بتسمية عقدنا باسم kubernetes-master و kubernetes-worker. لقد قمنا بتعيينها في وقت إنشاء الخادم. ومع ذلك، يمكنك ضبط أو تعيين الأسماء الخاصة بك إذا لم تكن قد قمت بذلك بالفعل من سطر الأوامر. لضبط اسم المضيف على العقدة الرئيسية، قم بتشغيل الأمر التالي:

على عقدة العمل، قم بتشغيل الأمر التالي:

يمكنك إغلاق جلسة الطرفية الحالية وإعادة الاتصال عبر ssh بالخادم لرؤية التغييرات.

الخطوة 4: السماح لـ Iptables برؤية حركة المرور الجسرية

لكي ترى العقد الرئيسية وعقد العمل حركة المرور الجسرية بشكل صحيح، يجب عليك التأكد من تعيين net.bridge.bridge-nf-call-iptables على القيمة 1 في التكوين الخاص بك. أولاً، تأكد من تحميل وحدة br_netfilter. يمكنك تأكيد ذلك عن طريق إصدار الأمر:

اختياريًا، يمكنك تحميلها صراحةً باستخدام الأمر:

الآن، يمكنك تشغيل هذا الأمر لتعيين القيمة إلى 1:

الخطوة 5: تغيير برنامج تشغيل Docker Cgroup

بشكل افتراضي، يتم تثبيت Docker مع cgroupfs كبرنامج تشغيل cgroup. يوصي Kubernetes بأن يعمل Docker باستخدام with systemd كبرنامج تشغيل. إذا تخطيت هذه الخطوة وحاولت تهيئة kubeadm في الخطوة التالية، فستتلقى التحذير التالي في الطرفية الخاصة بك:

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

ثم، قم بتنفيذ الأوامر التالية لـ إعادة تشغيل و تمكين Docker عند بدء تشغيل النظام:

بمجرد إعداد ذلك، يمكننا الانتقال إلى الجزء الممتع، وهو نشر عنقود Kubernetes!

الخطوة 6: تهيئة العقدة الرئيسية لـ Kubernetes

الخطوة الأولى في نشر عنقود Kubernetes هي تشغيل العقدة الرئيسية. أثناء وجودك على الطرفية الخاصة بالعقدة الرئيسية، قم بتنفيذ الأمر التالي لتهيئة kubernetes-master:

إذا قمت بتنفيذ الأمر أعلاه ولم يكن نظامك يطابق المتطلبات المتوقعة، مثل الحد الأدنى من ذاكرة الوصول العشوائي (RAM) أو وحدة المعالجة المركزية (CPU) كما هو موضح في قسم المتطلبات الأساسية، فستتلقى تحذيرًا ولن يبدأ العنقود:

install Kubernetes InitError

ملاحظة: إذا كنت تقوم بالبناء لبيئة الإنتاج، فمن الجيد دائمًا تلبية الحد الأدنى من المتطلبات ليعمل Kubernetes بسلاسة. ومع ذلك، إذا كنت تقوم بهذا البرنامج التعليمي لأغراض التعلم، فيمكنك إضافة العلامة التالية إلى أمر kubeadm init لتجاهل تحذيرات الأخطاء:
sudo kubeadm init --ignore-preflight-errors=NumCPU,Mem --pod-network-cidr=10.244.0.0/16

توضح لقطة الشاشة أدناه أن التهيئة تمت بنجاح. لقد أضفنا أيضًا علامة لتحديد شبكة الـ pod مع عنوان IP 10.244.0.0، وهو عنوان IP الافتراضي الذي يستخدمه kube-flannel. سنناقش المزيد حول شبكة الـ pod في الخطوة التالية.

install Kubernetes Kubeadm Init

في المخرجات، يمكنك رؤية أمر kubeadm join (لقد قمنا بإخفاء عنوان IP الخاص بنا) ورمز مميز فريد ستقوم بتشغيله على العقدة التابعة وجميع العقد التابعة الأخرى التي تريد ضمها إلى هذا العنقود. بعد ذلك، انسخ هذا الأمر والصقه لأنك ستستخدمه لاحقًا في العقدة التابعة.

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

لقد قمنا الآن بتهيئة العقدة الرئيسية. ومع ذلك، يتعين علينا أيضًا إعداد شبكة الـ pod على العقدة الرئيسية قبل أن نضم العقد التابعة.

الخطوة 7: نشر شبكة Pod

تسهل شبكة الـ pod الاتصال بين الخوادم وهي ضرورية للتشغيل السليم لعنقود Kubernetes. يمكنك قراءة المزيد حول شبكات عنقود Kubernetes من الوثائق الرسمية. سنستخدم شبكة الـ pod من نوع Flannel في هذا البرنامج التعليمي. Flannel هي شبكة تراكبية بسيطة تلبي متطلبات Kubernetes.

قبل أن نقوم بنشر شبكة الـ pod، نحتاج إلى التحقق من حالة جدار الحماية. إذا قمت بتمكين جدار الحماية بعد اتباع الخطوة 5 من الدرس التعليمي حول إعداد خادم Ubuntu الخاص بك، يجب عليك أولاً إضافة جدار حماية قاعدة لإنشاء استثناءات للمنفذ 6443 (المنفذ الافتراضي لـ Kubernetes). قم بتشغيل أوامر ufw التالية على كل من العقد الرئيسية والتابعة:

بعد ذلك، يمكنك تشغيل الأمرين التاليين لنشر شبكة الـ pod على العقدة الرئيسية:

قد يستغرق هذا من بضع ثوانٍ إلى دقيقة اعتمادًا على بيئتك لتحميل شبكة flannel. قم بتشغيل الأمر التالي للتأكد من أن كل شيء يعمل:

يجب أن يظهر مخرج الأمر حالة جميع الخدمات كـ running إذا كان كل شيء ناجحًا:

install Kubernetes Pod Status

يمكنك أيضًا عرض صحة المكونات باستخدام أمر get component status:

install Kubernetes Component Status

هذا الأمر له صيغة قصيرة cs:

Component Status Short

إذا رأيت حالة غير صحية، فقم بتعديل الملفات التالية واحذف السطر الموجود في (spec->containers->command) والذي يحتوي على هذه العبارة - --port=0 :

افعل الشيء نفسه مع هذا الملف:

أخيرًا، أعد تشغيل خدمة Kubernetes:

الخطوة 8: ضم العقد التابعة إلى عنقود Kubernetes

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

أولاً، قم بتسجيل الدخول إلى العقدة التابعة لك في جلسة مبنى أوامر منفصلة. ستستخدم أمر kubeadm join الذي ظهر في مبنى الأوامر الخاص بك عندما قمنا بتهيئة العقدة الرئيسية في الخطوة 6. قم بتنفيذ الأمر:

يجب أن ترى مخرجًا مشابهًا لما في لقطة الشاشة أدناه عند اكتمال الانضمام إلى العنقود:

Worker Join

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

في لقطة الشاشة لمخرج الأمر أعلاه، يمكننا أن نرى أن العقدة التابعة قد انضمت إلى العنقود:

install Kubernetes K8S Node Status

الخطوة 9: نشر تطبيق على عنقود Kubernetes

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

نفذ الأمر التالي على العقدة الرئيسية لإنشاء نشر Kubernetes لـ Nginx:

يمكنك عرض الـ deployment باستخدام أمر describe deployment :

Nginx Deployment

لجعل nginx الخدمة متاحًا عبر الإنترنت، قم بتشغيل الأمر التالي:

NodePort Svc Create

سيقوم الأمر أعلاه بإنشاء خدمة مواجهة للجمهور لنشر Nginx. وبما أن هذا nodeport ، فإن Kubernetes يخصص للخدمة منفذًا في النطاق 32000+.

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

NodePort Svc Status

يمكنك أن ترى أن المنفذ المخصص لنا هو 32264. قم بتدوين المنفذ المعروض في الطرفية لاستخدامه في الخطوة التالية.

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

يجب أن تشاهد مخرجات صفحة Nginx الافتراضية index.html:

Curl Nginx Svc

اختياريًا، يمكنك زيارة عنوان IP الخاص بعقدة العامل مع المنفذ في متصفحك وعرض صفحة الفهرس الافتراضية لـ Nginx:

install Kubernetes Nginx Webpage

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

لقد قمنا الآن باختبار العنقود بنجاح!

الخاتمة

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

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

حوسبة سعيدة!

author

Pranay Kapgate

المؤلف · CloudSigma

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

التعليقات

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