ممارسة واستكشاف وظائف مجموعة «Kubernetes»
تتوفر العديد من الخيارات عند تشغيل «Kubernetes» محليًا. يمكنك تثبيت «Kubernetes» على الأجهزة المادية أو الأجهزة الافتراضية أو استخدام حل يستند إلى السحابة مثل خدمة «Azure Kubernetes (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
أنت الآن جاهز لتثبيت الوظائف الإضافية على المجموعة.
تحضير المجموعة
لعرض حالة المكونات الإضافية المثبتة على مجموعتك، قم بتشغيل أمر الحالة في «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 الداخلي للعقدة ونظام التشغيل الذي يعمل على العقدة وإصدار «kernel» ووقت تشغيل الحاوية.
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
. هنا، يمكنك مشاهدةregistry
kube-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 للعقدة. يشكل هذا النوع من التكوين جزءًا من الجوانب المتقدمة التي ستستكشفها في المستقبل. في الملخص، هناك إرشادات إذا اخترت إلغاء تثبيت الجهاز الظاهري وتنظيفه.