ممارسة واستكشاف وظائف مجموعة «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» هو خيار التثبيت الذي يحتوي على أقل عدد من الخطوات. قم بالتبديل إلى نافذة طرفية وقم بتشغيل الأوامر في الإرشادات التالية:

  1. تثبيت تطبيق «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».

  1. قم بتنزيل وتثبيت أحدث إصدار من Multipass for Windows من GitHub.

  2. في وحدة تحكم الأوامر، قم بتشغيل الأمر "إطلاق Multipass" لتكوين وتشغيل صورة «microk8s-vm». قد تستغرق هذه الخطوة بضع دقائق لإكمالها، وذلك بناءً على سرعة اتصال الإنترنت وسطح المكتب.

    multipass launch --name microk8s-vm --memory 4G --disk 40G
    
  3. بعد تلقي تأكيد التشغيل ل microk8s-vm، قم بتشغيل multipass shell microk8s-vm الأمر للوصول إلى مثيل الجهاز الظاهري.

    multipass shell microk8s-vm
    

    بمجرد أن تعمل المسارات المتعددة، يمكنك الوصول إلى جهاز Ubuntu الظاهري لاستضافة نظام المجموعة وتثبيت MicroK8s.

  4. تثبيت تطبيق «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».

  1. لديك خياران لتثبيت «Multipass» على «macOS». إما تحميل وتثبيت أحدث إصدار من Multipass من أجل نظام التشغيل macOS من GitHub أو لتثبيت Multipass باستخدام الأمر brew cask install multipass، استخدم Homebrew.

    brew install --cask multipass
    
  2. في وحدة تحكم الأوامر، قم بتشغيل الأمر “إطلاق «multipass»” لتكوين وتشغيل صورة «microk8s-vm». قد تستغرق هذه الخطوة بضع دقائق لإكمالها، وذلك بناءً على سرعة اتصال الإنترنت وسطح المكتب.

    multipass launch --name microk8s-vm --memory 4G --disk 40G
    
  3. بعد تلقي تأكيد التشغيل ل microk8s-vm، قم بتشغيل multipass shell microk8s-vm الأمر لإدخال مثيل الجهاز الظاهري.

    multipass shell microk8s-vm
    

    عند هذه النقطة، يمكنك الوصول إلى Ubuntu VM لاستضافة نظام المجموعة الخاص بك. لا يزال يجب عليك تثبيت «MicroK8s». اتبع الخطوات التالية.

  4. تثبيت تطبيق «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».

  1. للتحقق من حالة التثبيت، قم بتشغيل 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
    
  2. من القائمة، تحتاج إلى تمكين وظائف DNS ولوحة المعلومات والتسجيل الإضافية. فيما يلي أغراض كل وظيفة إضافية:

    دالات إضافية الغرض
    Dns coreDNS نشر الخدمة.
    لوحة المعلومات kubernetes-dashboard نشر الخدمة والعديد من الخدمات الأخرى التي تدعم وظائفها. إنها «UI» تستخدم في الأغراض العامة قائمة على شبكة الإنترنت لمجموعات «Kubernetes».
    التسجيل نشر سجل خاص والعديد من الخدمات التي تدعم وظائفه. لتخزين حاويات خاصة، استخدم هذا السجل.

    لتثبيت الوظائف الإضافية، قم بتشغيل الأمر التالي.

    sudo microk8s.enable dns dashboard registry
    

أنت الآن جاهز للوصول إلى مجموعتك باستخدام kubectl.

استكشف مجموعة «Kubernetes»

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

  1. snap alias قم بتشغيل الأمر إلى الاسم المستعار microk8s.kubectl إلى kubectl. تبسط هذه الخطوة الاستخدام.

    sudo snap alias microk8s.kubectl kubectl
    

    يظهر الإخراج التالي عند انتهاء الأمر بنجاح:

    Added:
      - microk8s.kubectl as kubectl
    

عرض معلومات عقدة المجموعة

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

  1. تحقق من العقد التي يتم تشغيلها في مجموعتك.

    أنت تعلم أن «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
    
  2. الخطوة التالية هي استكشاف الخدمات قيد التشغيل في مجموعتك. كما هو الحال مع العقد، للعثور على معلومات حول الخدمات التي تعمل على نظام المجموعة، قم بتشغيل 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 أن استخدام مفيد، فإن استخدام ملفات البيان هو أفضل ممارسة. تسمح لك ملفات البيان بالإعادة إلى الأمام أو التراجع عن عمليات النشر بسهولة في مجموعتك. تساعدك هذه الملفات أيضًا على توثيق تكوين المجموعة.

  1. لإنشاء نشر NGINX، قم بتشغيل kubectl create deployment الأمر . حدد اسم النشر وصورة الحاوية لإنشاء مثيل فردي لـ «pod»

    sudo kubectl create deployment nginx --image=nginx
    

    النتيجة مشابهة للمثال التالي:

    deployment.apps/nginx created
    
  2. لجلب المعلومات حول النشر الخاص بك، قم بتشغيل kubectl get deployments:

    sudo kubectl get deployments
    

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

    NAME    READY   UP-TO-DATE   AVAILABLE   AGE
    nginx   1/1     1            1           18s
    
  3. أنشأ النشر «pod». لجلب معلومات حول جرابات نظام المجموعة، قم بتشغيل kubectl get pods الأمر:

    sudo kubectl get pods
    

    النتيجة مشابهة للمثال التالي. لاحظ أن اسم الحاوية هو قيمة تم إنشاؤها مسبوقة باسم النشر، والجراب لديه حالة تشغيل.

    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-86c57db685-dj6lz   1/1     Running   0          33s
    

اختبار تثبيت موقع ويب

اختبار تركيب «NGINX» عن طريق الاتصال بملقم الشبكة من خلال عنوان IP الخاص بـ «pod».

  1. للعثور على عنوان الجراب، مرر المعلمة -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>
    
  2. للوصول إلى موقع الويب، قم بتشغيل 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 الأمر . يمكنك تحديد عدد النسخ المتماثلة التي تحتاجها واسم النشر.

  1. لتوسيع نطاق إجمالي جرابات NGINX إلى ثلاثة، قم بتشغيل kubectl scale الأمر :

    sudo kubectl scale --replicas=3 deployments/nginx
    

    النتيجة مشابهة للمثال التالي:

    deployment.apps/nginx scaled
    

    يسمح لك أمر المقياس بتحجيم عدد المثيلات لأعلى أو لأسفل.

  2. للتحقق من عدد 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 للعقدة. يشكل هذا النوع من التكوين جزءًا من الجوانب المتقدمة التي ستستكشفها في المستقبل. في الملخص، هناك إرشادات إذا اخترت إلغاء تثبيت الجهاز الظاهري وتنظيفه.