ممارسة واستكشاف وظائف مجموعة «Kubernetes»
تتوفر العديد من الخيارات عند تشغيل «Kubernetes» محليًا. يمكنك تثبيت Kubernetes على الأجهزة المادية أو الافتراضية (VM)، أو استخدام حل سحابي مثل Azure Kubernetes Service (AKS).
هدفك في هذا التدريب هو استكشاف تثبيت «Kubernetes» مع مجموعة أحادية العقد. في هذا التمرين، ستتعلم كيفية تكوين بيئة MicroK8s التي يسهل إعدادها وتفكيكها وتثبيتها. بعد ذلك، يمكنك نشر خدمة Kubernetes وتوسيع نطاقها إلى مثيلات متعددة لاستضافة موقع ويب.
إشعار
هذا التمرين اختياري ويتضمن خطوات توضح كيفية حذف وإلغاء تثبيت البرامج والموارد التي تستخدمها في التمرين.
ضع في اعتبارك أن هناك خيارات أخرى، مثل «MiniKube» ودعم «Kubernetes» في «Docker» للقيام بنفس الشيء.
ما هو «MicroK8s»؟
«MicroK8s» هو خيار لنشر مجموعة «Kubernetes» أحادية العقدة كحزمة فردية تستهدف محطات العمل وأجهزة إنترنت الأشياء (IoT). Canonical، منشئ Ubuntu Linux، الذي طور في الأصل ويحافظ حاليا على MicroK8s.
يمكنك تثبيت «MicroK8s» على أنظمة تشغيل «Linux, Windows وmacOS». ومع ذلك، تختلف إرشادات تختلف قليلاً عن كل نظام تشغيل. اختر الخيار الأكثر ملائمة للبيئة الخاصة بك.
تثبيت «MicroK8s» على «Linux»
يعتبر تثبيت «Linux» من «MicroK8s» هو خيار التثبيت الذي يحتوي على أقل عدد من الخطوات. قم بالتبديل إلى نافذة طرفية وقم بتشغيل الأوامر في الإرشادات التالية:
تثبيت تطبيق «MicroK8s» المحاذي. قد تستغرق هذه الخطوة بضع دقائق لإكمالها، وذلك بناءً على سرعة اتصال الإنترنت وسطح المكتب.
sudo snap install microk8s --classicيظهر التثبيت الناجح الرسالة التالية.
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
أنت الآن جاهز لتثبيت الوظائف الإضافية على المجموعة.
تثبيت «MicroK8s» على ويندوز
لتشغيل «MicroK8s» على «Windows»، استخدم «Multipass». «Multipass» هو مدير الجهاز الظاهري خفيف الوزن لأنظمة تشغيل «Linux, Windows وmacOS».
قم بتنزيل وتثبيت أحدث إصدار من Multipass for Windows من GitHub.
في وحدة تحكم الأوامر، قم بتشغيل الأمر "إطلاق Multipass" لتكوين وتشغيل صورة «microk8s-vm». قد تستغرق هذه الخطوة بضع دقائق لإكمالها، وذلك بناءً على سرعة اتصال الإنترنت وسطح المكتب.
multipass launch --name microk8s-vm --memory 4G --disk 40Gبعد تلقي تأكيد التشغيل ل microk8s-vm، قم بتشغيل
multipass shell microk8s-vmالأمر للوصول إلى مثيل الجهاز الظاهري.multipass shell microk8s-vmبمجرد أن تعمل المسارات المتعددة، يمكنك الوصول إلى جهاز Ubuntu الظاهري لاستضافة نظام المجموعة وتثبيت MicroK8s.
تثبيت تطبيق «MicroK8s» المحاذي. قد تستغرق هذه الخطوة بضع دقائق لإكمالها، وذلك بناءً على سرعة اتصال الإنترنت وسطح المكتب.
sudo snap install microk8s --classicيظهر التثبيت الناجح الرسالة التالية:
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
أنت الآن جاهز لتثبيت الوظائف الإضافية على المجموعة.
ثبت «MicroK8s» على «macOS»
لتشغيل «MicroK8s» على «macOS»، استخدم «Multipass». «Multipass» هو مدير الجهاز الظاهري خفيف الوزن لأنظمة تشغيل «Linux, Windows وmacOS».
لديك خياران لتثبيت «Multipass» على «macOS». إما تحميل وتثبيت أحدث إصدار من Multipass من أجل نظام التشغيل macOS من GitHub أو لتثبيت Multipass باستخدام الأمر
brew cask install multipass، استخدم Homebrew.brew install --cask multipassفي وحدة تحكم الأوامر، قم بتشغيل الأمر “إطلاق «multipass»” لتكوين وتشغيل صورة «microk8s-vm». قد تستغرق هذه الخطوة بضع دقائق لإكمالها، وذلك بناءً على سرعة اتصال الإنترنت وسطح المكتب.
multipass launch --name microk8s-vm --memory 4G --disk 40Gبعد تلقي تأكيد التشغيل ل microk8s-vm، قم بتشغيل
multipass shell microk8s-vmالأمر لإدخال مثيل الجهاز الظاهري.multipass shell microk8s-vmعند هذه النقطة، يمكنك الوصول إلى Ubuntu VM لاستضافة نظام المجموعة الخاص بك. لا يزال يجب عليك تثبيت «MicroK8s». اتبع الخطوات التالية.
تثبيت تطبيق «MicroK8s» المحاذي. قد تستغرق هذه الخطوة بضع دقائق لإكمالها، وذلك بناءً على سرعة اتصال الإنترنت وسطح المكتب.
sudo snap install microk8s --classicيظهر التثبيت الناجح الرسالة التالية:
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
أنت الآن جاهز لتثبيت الوظائف الإضافية على المجموعة.
تحضير المجموعة
لعرض حالة الوظائف الإضافية المثبتة على نظام المجموعة، قم بتشغيل status الأمر في MicroK8s. توفر هذه المكونات الإضافية العديد من الخدمات، التي قمت بتغطيتها سابقًا. ومن الأمثلة على ذلك وظيفة «DNS».
للتحقق من حالة التثبيت، قم بتشغيل
microk8s.status --wait-readyالأمر .sudo microk8s.status --wait-readyلاحظ أن هناك العديد من الوظائف الإضافية المعطلة على نظام المجموعة. لا تقلق بشأن الإضافات التي لا تتعرف عليها.
microk8s is running addons: cilium: disabled dashboard: disabled dns: disabled fluentd: disabled gpu: disabled helm3: disabled helm: disabled ingress: disabled istio: disabled jaeger: disabled juju: disabled knative: disabled kubeflow: disabled linkerd: disabled metallb: disabled metrics-server: disabled prometheus: disabled rbac: disabled registry: disabled storage: disabledمن القائمة، تحتاج إلى تمكين وظائف DNS ولوحة المعلومات والتسجيل الإضافية. فيما يلي أغراض كل وظيفة إضافية:
دالات إضافية الغرض DNS coreDNSنشر الخدمة.لوحة المعلومات kubernetes-dashboardنشر الخدمة والعديد من الخدمات الأخرى التي تدعم وظائفها. إنها «UI» تستخدم في الأغراض العامة قائمة على شبكة الإنترنت لمجموعات «Kubernetes».التسجيل نشر سجل خاص والعديد من الخدمات التي تدعم وظائفه. لتخزين حاويات خاصة، استخدم هذا السجل. لتثبيت الوظائف الإضافية، قم بتشغيل الأمر التالي.
sudo microk8s.enable dns dashboard registry
أنت الآن جاهز للوصول إلى مجموعتك باستخدام kubectl.
استكشف مجموعة «Kubernetes»
يوفر MicroK8s إصدارا من kubectl الذي يمكنك استخدامه للتفاعل مع مجموعة Kubernetes الجديدة. تسمح لك هذه النسخة من kubectl أن يكون لديك تثبيت مواز لمثيل آخر على مستوى kubectl النظام دون التأثير على وظائفه.
snap aliasقم بتشغيل الأمر إلى الاسم المستعارmicrok8s.kubectlإلىkubectl. تبسط هذه الخطوة الاستخدام.sudo snap alias microk8s.kubectl kubectlيظهر الإخراج التالي عند انتهاء الأمر بنجاح:
Added: - microk8s.kubectl as kubectl
عرض معلومات عقدة المجموعة
نذكر مما سبق وجود مجموعة «Kubernetes» خارج نطاق طائرات التحكم والعقد العاملة. دعونا نستكشف المجموعة الجديدة لنرى ما تم تثبيته.
تحقق من العقد التي يتم تشغيلها في مجموعتك.
أنت تعلم أن «MicroK8s» هو تثبيت المجموعة أحادية العقدة لذلك تتوقع رؤية عقدة واحدة فقط. ضع في الاعتبار، أنه بالرغم من ذلك تمثل هذه العقدة كلاً من طائرة التحكم والعقدة العاملة في المجموعة. قم بتأكيد هذا التكوين عن طريق تشغيل
kubectl get nodesالأمر . لاسترداد معلومات حول جميع الموارد في نظام المجموعة، قم بتشغيلkubectl getالأمر :sudo kubectl get nodesالنتيجة مشابهة للمثال التالي، والذي يوضح لك أن هناك عقدة واحدة فقط في نظام المجموعة بالاسم
microk8s-vm. لاحظ أن العقدة في حالة جاهز . يشير وضع الاستعداد إلى أنه يجوز جدولة طائرة التحكم لأحمال العمل في هذه العقدة.NAME STATUS ROLES AGE VERSION microk8s-vm Ready <none> 35m v1.17.3يمكنك الحصول على مزيد من المعلومات حول المورد المحدد المطلوب. على سبيل المثال، لنفترض أنك بحاجة إلى العثور على عنوان IP للعقدة. لجلب معلومات إضافية من خادم API، قم بتشغيل المعلمة
-o wide:sudo kubectl get nodes -o wideالنتيجة مشابهة للمثال التالي. لاحظ أنه يمكنك الآن رؤية عنوان IP الداخلي للعقدة ونظام التشغيل الذي يعمل على العقدة وإصدار النواة ووقت تشغيل الحاوية.
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME microk8s-vm Ready <none> 36m v1.17.3 192.168.56.132 <none> Ubuntu 18.04.4 LTS 4.15.0-88-generic containerd://1.2.5الخطوة التالية هي استكشاف الخدمات قيد التشغيل في مجموعتك. كما هو الحال مع العقد، للعثور على معلومات حول الخدمات التي تعمل على نظام المجموعة، قم بتشغيل
kubectl getالأمر .sudo kubectl get services -o wideالنتيجة مشابهة للمثال التالي، ولكن لاحظ أن خدمة واحدة فقط مدرجة. لقد قمت بتثبيت الوظائف الإضافية على نظام المجموعة في وقت سابق، وتتوقع أن ترى هذه الخدمات أيضا.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 37m <none>السبب في إدخال قائمة خدمة واحدة هو أن Kubernetes يستخدم مفهوما يسمى مساحات الأسماء لتقسيم نظام المجموعة منطقيا إلى مجموعات ظاهرية متعددة.
لجلب جميع الخدمات في جميع مساحات الأسماء، مرر المعلمة
--all-namespaces:sudo kubectl get services -o wide --all-namespacesالنتيجة مشابهة للمثال التالي. لاحظ أن لديك ثلاثة «namespaces» في مجموعتك. إنها مساحات الأسماء الافتراضية
container-registryو وkube-system. هنا، يمكنك مشاهدةregistrykube-dnsالمثيلات و وkubernetes-dashboardالتي قمت بتثبيتها. هناك أيضا خدمات دعم تم تثبيتها جنبا إلى جنب مع بعض الوظائف الإضافية.NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR container-registry registry NodePort 10.152.183.36 <none> 5000:32000/TCP 28m app=registry default kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 37m <none> kube-system dashboard-metrics-scraper ClusterIP 10.152.183.130 <none> 8000/TCP 28m k8s-app=dashboard-metrics-scraper kube-system heapster ClusterIP 10.152.183.115 <none> 80/TCP 28m k8s-app=heapster kube-system kube-dns ClusterIP 10.152.183.10 <none> 53/UDP,53/TCP,9153/TCP 28m k8s-app=kube-dns kube-system kubernetes-dashboard ClusterIP 10.152.183.132 <none> 443/TCP 28m k8s-app=kubernetes-dashboard kube-system monitoring-grafana ClusterIP 10.152.183.88 <none> 80/TCP 28m k8s-app=influxGrafana kube-system monitoring-influxdb ClusterIP 10.152.183.232 <none> 8083/TCP,8086/TCP 28m k8s-app=influxGrafanaالآن يمكنك مشاهدة الخدمات قيد التشغيل على المجموعة ويمكنك جدولة حمل العمل على العقدة العاملة.
تثبيت خادم الشبكة على المجموعة
تريد جدولة خادم الشبكة على المجموعة لخدمة موقع الشبكة لعملائك. يمكنك الاختيار من بين عدة خيارات. على سبيل المثال، يمكنك استخدام NGINX.
ومما سبق، يمكنك استخدام ملفات بيان «pod» لوصف «pods» ومجموعات النسخ المتماثلة، وعمليات النشر لتعريف أحمال العمل. نظرا لأنك لم تقم بتغطية هذه الملفات بالتفصيل، يمكنك تشغيل kubectl لتمرير المعلومات مباشرة إلى خادم API.
على الرغم من kubectl أن استخدام مفيد، فإن استخدام ملفات البيان هو أفضل ممارسة. تسمح لك ملفات البيان بالإعادة إلى الأمام أو التراجع عن عمليات النشر بسهولة في مجموعتك. تساعد هذه الملفات أيضا في توثيق تكوين نظام المجموعة.
لإنشاء نشر NGINX، قم بتشغيل
kubectl create deploymentالأمر . حدد اسم النشر وصورة الحاوية لإنشاء مثيل فردي لـ «pod»sudo kubectl create deployment nginx --image=nginxالنتيجة مشابهة للمثال التالي:
deployment.apps/nginx createdلجلب المعلومات حول النشر الخاص بك، قم بتشغيل
kubectl get deployments:sudo kubectl get deploymentsالنتيجة مشابهة للمثال التالي. لاحظ أن اسم النشر يطابق الاسم الذي أعطيته لي، وأن هناك عملية نشر تحمل هذا الاسم في وضع الاستعداد والتوافر.
NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 18sأنشأ النشر «pod». لجلب معلومات حول جرابات نظام المجموعة، قم بتشغيل
kubectl get podsالأمر:sudo kubectl get podsالنتيجة مشابهة للمثال التالي. لاحظ أن اسم الحاوية هو قيمة تم إنشاؤها مسبوقة باسم النشر، والجراب لديه حالة تشغيل.
NAME READY STATUS RESTARTS AGE nginx-86c57db685-dj6lz 1/1 Running 0 33s
اختبار تثبيت موقع ويب
اختبار تركيب «NGINX» عن طريق الاتصال بملقم الشبكة من خلال عنوان IP الخاص بـ «pod».
للعثور على عنوان الجراب، مرر المعلمة
-o wide:sudo kubectl get pods -o wideالنتيجة مشابهة للمثال التالي. لاحظ أنه يعيد الأمر كل من عنوان IP للعقدة واسم العقدة التي يتم جدولة حمل العمل عليها.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-86c57db685-dj6lz 1/1 Running 0 4m17s 10.1.83.10 microk8s-vm <none> <none>للوصول إلى موقع الويب، قم بتشغيل
wgetعلى IP المدرج من قبل:wget <POD_IP>النتيجة مشابهة للمثال التالي:
--2020-03-16 13:34:17-- http://10.1.83.10/ Connecting to 10.1.83.10:80... connected. HTTP request sent, awaiting response... 200 OK Length: 612 [text/html] Saving to: 'index.html' index.html 100%[==============================================================================================>] 612 --.-KB/s in 0s 2020-03-16 13:34:17 (150 MB/s) - 'index.html' saved [612/612]
توسيع نطاق نشر خادم الشبكة على المجموعة
بفرض أنك تجد فجأة زيادة في عدد المستخدمين الذين وصلوا إلى موقعك، ويبدأ تعطل الموقع بسبب التحميل. يمكنك نشر المزيد من مثيلات الموقع في مجموعتك وتقسيم التحميل عبر المثيلات.
لتغيير عدد النسخ المتماثلة في التوزيع، قم بتشغيل kubectl scale الأمر . يمكنك تحديد عدد النسخ المتماثلة التي تحتاجها واسم النشر.
لتوسيع نطاق إجمالي جرابات NGINX إلى ثلاثة، قم بتشغيل
kubectl scaleالأمر :sudo kubectl scale --replicas=3 deployments/nginxالنتيجة مشابهة للمثال التالي:
deployment.apps/nginx scaledيسمح لك أمر المقياس بتحجيم عدد المثيلات لأعلى أو لأسفل.
للتحقق من عدد pods قيد التشغيل، قم بتشغيل
kubectl getالأمر، ثم مرر المعلمة-o wideمرة أخرى:sudo kubectl get pods -o wideالنتيجة مشابهة للمثال التالي. لاحظ أنك الآن ترى ثلاثة «pods» تشغيل، كل منها بعنوان IP فريد.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-86c57db685-dj6lz 1/1 Running 0 7m57s 10.1.83.10 microk8s-vm <none> <none> nginx-86c57db685-lzrwp 1/1 Running 0 9s 10.1.83.12 microk8s-vm <none> <none> nginx-86c57db685-m7vdd 1/1 Running 0 9s 10.1.83.11 microk8s-vm <none> <none> ubuntu@microk8s-vm:~$
ستحتاج إلى تطبيق عدة تكوينات أخرى على نظام المجموعة لعرض موقعك على الويب بشكل فعال كمواقع ويب عامة. تتضمن الأمثلة تثبيت موازن التحميل وتخطيط عناوين IP للعقدة. يشكل هذا النوع من التكوين جزءًا من الجوانب المتقدمة التي ستستكشفها في المستقبل. في الملخص، هناك إرشادات إذا اخترت إلغاء تثبيت الجهاز الظاهري وتنظيفه.