8 نصائح وحيل لاستخدام Kubernetes

رجل مبرمج يعمل من المنزل في مكتبه المنزلي.

في هذه المقالة، سنستكشف بعض النصائح والحيل التي من شأنها تسهيل العمل مع Kubernetes.

معظم النصائح التالية تعتمد على kubectl، الأداة القوية لسطر الأوامر التي تُتيح لك تنفيذ الأوامر على مجموعات Kubernetes.

أحدث الأخبار التقنية، مدعومة برؤى خبراء

ابقَ على اطلاع دومًا بأهم—اتجاهات المجال وأكثرها إثارة للفضول—بشأن الذكاء الاصطناعي والأتمتة والبيانات وغيرها الكثير مع نشرة Think الإخبارية. راجع بيان الخصوصية لشركة IBM.

شكرًا لك! أنت مشترك.

سيتم تسليم اشتراكك باللغة الإنجليزية. ستجد رابط إلغاء الاشتراك في كل رسالة إخبارية. يمكنك إدارة اشتراكاتك أو إلغاء اشتراكك هنا. راجع بيان خصوصية IBM لمزيد من المعلومات.

خلفية Kubernetes

1. تعيين مساحات الأسماء الافتراضية

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

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

kubectl config set-context $(kubectl config current-context) --namespace=mynamespace

فيما يلي بعض أكثر أوامر المساحة الاسمية شيوعًا وفائدة:

  • kubectl get namespaces
  • kubectl create namespace mynamespace
  • kubectl get pods --all-namespaces (إدراج جميع الحجيرات مع الحالة من جميع المساحات الاسمية).
  • kubectl get po -o wide -n <namspace1> -n <namespace2> -n <namespace3> (سيحدِّد هذا الأمر الحجيرات في كل مساحة اسمية).
  • kubectl describe namespace <namespace>
  • kubectl config view --minify | grep namespace (سيضمن هذا الأمر تعيين المساحة الاسمية بشكل صحيح للسياق الحالي لديك). 

2. اختصارات مفيدة لتوفير الوقت

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

فيما يلي اختصارات لبعض الأوامر المستخدمة بشكل متكرر. نفِّذ هذه الأوامر قبل تشغيل أوامر kubectl لتوفير بعض الوقت. مثال: ما عليك سوى الكتابة K بدلًا من كتابة kubectl:

  • الاختصار k للأمر "kubectl"
  • الاختصار kc للأمر "k config view --minify | grep name"
  • الاختصار kdp للأمر "kubectl describe pod"
  • الاختصار krh للأمر "kubectl run --help | more"
  • الاختصار ugh للأمر "kubectl get --help | more"
  • الاختصار c للأمر "clear"
  • الاختصار kd للأمر "kubectl describe pod"
  • الاختصار ke للأمر "kubectl explain"
  • الاختصار kf للأمر"kubectl create -f"
  • الاختصار kg للأمر "kubectl get pods --show-labels"
  • الاختصار kr للأمر "kubectl replace -f"
  • الاختصار kh للأمر "kubectl --help | more"
  • الاختصار krh للأمر "kubectl run --help | more"
  • الاختصار ks للأمر "kubectl get namespaces"
  • الاختصار l للأمر "ls -lrt"
  • الاختصار ll للأمر "vi ls -rt | tail -1"
  • الاختصار kga للأمر "k get pod --all-namespaces"
  • الاختصار kgaa للأمر "kubectl get all --show-labels"

 

3. تحرير YAML باستخدام vi

هناك العديد من أدوات التحرير المتاحة لكتابة ملفات YAML، لكن في كثير من الأحيان قد تحتاج إلى تعديل سريع لملف YAML تم إنشاؤه أثناء العمل على وحدة طرفية. هنا يُعَد استخدام محرر النصوص الموثوق به vi، الذي تم إنشاؤه أصلًا لنظام Unix، خيارًا ممتازًا.

محرر vi موثَّق جيدًا ويحظى بدعم قوي من مجتمع المصادر المفتوحة النشط. إحدى المشكلات في محرر vi عند إنشاء ملفات YAML هي مسألة المسافات. نحتاج إلى طريقة لوضع المسافات البادئة باستخدام علامات التبويب والمواءمة مع المسافات. استخدام علامات التبويب مقابل المسافات للمسافات البادئة تسبب دائمًا في حدوث مشكلات في بناء الجمل عند كتابة ملفات YAML (مثل الحصول على مسافتين كإعداد افتراضي عند الضغط على Enter).

ما الحل؟ إنشاء ملف ~/.vimrc بهذه الأسطر قبل كتابة ملفات YAML باستخدام محرر vi لتسهيل عملية التحرير:

  • set smarttab
  • set expandtab
  • set shiftwidth=4
  • set tabstop=4
  • set number

4. إنشاء YAML من أوامر kubectl

يمكننا إنشاء ملفات YAML معقدة من سطر الأوامر باستخدام أوامر kubectl.

يتفق معظم الأشخاص على أن العمل باستخدام ملفات YAML ليس ممتعًا، ويمكن أن تكون ملفات Kubernetes YAML مطولة جدًا ويصعب إنشاؤها من البداية. من الأسهل بكثير إنشاء ملف YAML من أوامر kubectl بدلًا من إنشاء صفحة فارغة باستخدام محرر.

ستعمل الأوامر التالية على إنشاء ملف YAML بالاسم yamlfile . بمجرد إنشاء ملف YAML من أوامر kubectl هذه، يمكنك تعديله بناءً على متطلباتك واستخدامه بدلًا من الكتابة من الصفر:

  • kubectl run busybox --image=busybox --dry-run=client -o yaml --
    restart=Never > yamlfile.yaml
    
    kubectl create job my-job --dry-run=client -o yaml --image=busybox -- date>yamlfile.yaml
    
  • kubectl get -o yaml deploy/nginx > 1.yaml(Ensure that you
    have a deployment named as nginx)
    
  • kubectl run busybox --image=busybox --dry-run=client -o yaml 
    --restart=Never -- /bin/sh -c "while true; do echo hello; echo 
    hello again;done" > yamlfile.yaml
    
  • kubectl run wordpress --image=wordpress –-expose –-port=8989 -
    -restart=Never -o yaml
    
  • kubectl run test --image=busybox --restart=Never --dry -
    run=client -o yaml -- bin/sh -c 'echo test;sleep 100' > 
    yamlfile.yaml (لاحِظ أن --bin تأتي في النهاية. سيؤدي هذا إلى إنشاء ملف yaml).
    

(لاحِظ أن --bin  تأتي في النهاية. سيؤدي هذا إلى إنشاء ملف yaml).

هناك فكرة جيدة أخرى لإنشاء ملف YAML وهي الحصول على الملف مباشرةً من الإنترنت باستخدام الأمر wget . 

5. التبديل بين مساحات Kubernetes الاسمية

في النصيحة 1، تعلَّمنا بعض الأوامر المفيدة لاستخدام مساحات Kubernetes الاسمية وحفظها حتى لا تضطر إلى إضافتها إلى كل أمر. دعنا نوسِّع النصيحة لتسهيل التبديل بين المساحات الاسمية وسياقات kubectl.

هناك العديد من الأدوات التي يمكن أن تساعد، لكننا نفضل استخدام kubectx لإدارة السياقات وkubens لإدارة المساحات الاسمية. يمكنك العثور على تفاصيل حول kubectx وkubens هنا.

إليك طريقة تنزيل ملفات النسخ التنفيذية لنظام Linux لكلٍّ من kubectx وkubens:

  • wget https://github.com/ahmetb/kubectx/releases/download/v0.9.0/kubectx_v0.9.0_linux_x86_64.tar.gz
    
  • wget https://github.com/ahmetb/kubectx/releases/download/v0.9.0/kubens_v0.9.0_linux_x86_64.tar.gz
    

ثم تستخرجها باستخدام الأوامر التالية:

  • tar -xvf kubectx_v0.9.0_linux_x86_64.tar.gz
    
  • tar -xvf kubens_v0.9.0_linux_x86_64.tar.gz
    

أخيرًا، انقلها إلى مسار PATH الخاص بك:

  • sudo mv kubectx /usr/local/bin
  • sudo mv kubens /usr/local/bin

بمجرد التثبيت، يمكنك ببساطة استخدام kubens لإدراج المساحات الاسمية والتبديل بينها:

بمجرد التثبيت، يمكنك ببساطة استخدام kubens لإدراج المساحات الاسمية والتبديل بينها:

عند العمل مع عدة مجموعات، يجعل kubectx التبديل بين السياقات سهلًا:

عند العمل مع عدة مجموعات، يجعل kubectx التنقل بين السياقات سهلًا

6. الإكمال التلقائي للأوامر في Shell

هل تعلم أن kubectl يوفر ميزة الإكمال التلقائي لإصدارَي BASH وZSH؟ هذا التكوين اختياري.

لنفترض أنك تعرف مفاهيم Kubernetes ولديك بعض التجربة في استخدام kubectl، ولكن ربما لا تجيد حفظ الأوامر. أولًا تقوم بتثبيت إكمال bash، ثم تمكين الإكمال التلقائي لأوامر kubectl. يمكنك العثور على جميع التفاصيل في صفحة الوثائق "تثبيت وإعداد kubectl" الخاصة بالبيئة.

فيما يلي خيارات التكوين مع ميزة الإكمال التلقائي:

فيما يلي خيارات التكوين مع ميزة الإكمال التلقائي:

الآن، اضغط على Tab واستمتِع بالإكمال التلقائي!

7. عرض استخدام الموارد

يُعَد الأمر top من أكثر الأدوات شهرة لمراقبة العمليات وموارد النظام. ويوفر واجهة بسيطة تعتمد على الأحرف وإمكانية الوصول السريع إلى المعلومات الأساسية.

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

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

استخدام الموارد لكل حجيرة:

استخدام الموارد لكل حجيرة:

وأمر watch المفيد يُتيح لك عرض نتيجة أي أمر على فترات زمنية محددة دون الحاجة إلى تشغيله مرارًا وتكرارًا. المثال التالي يوضح كيفية تشغيله كل خمس ثوانٍ (الافتراضي هو ثانيتان): 

watch kubectl top node -n 5

ملاحظة: يجب تنزيل أمر watch ليناسب بيئتك.

تحتاج أيضًا مجموعة Kubernetes الخاصة بك إلى تشغيل Heapster لكي يعمل أمر top، وإلا ستظهر لك الرسالة التالية: "Error from server (NotFound): the server could not find the requested resource (get services http:heapster:)".

8. توسيع قدرات kubectl وإنشاء أوامرك الخاصة باستخدام المخرجات الأولية

يوفر أمر kubectl عرضًا مختصرًا للموارد المخزنة لدى apiserver. هناك العديد من الحقول الأخرى المخزنة لدى apiserver والتي لا يتم عرضها. يمكنك استخدام الأمر kubectl get مع مخرجات الموارد الأولية لإنشاء التصور والأوامر الخاصة بك. 

يمكنك طباعة الموارد الأولية بتنسيق JSON باستخدام الأمر التالي:

kubectl get deployments -o json

يمكنك أيضًا استدعاء الموارد مباشرةً باستخدام استدعاء API:

kubectl get --raw=/apis/apps/v1/deployments

يمكنك أيضًا دمج المخرجات مع أدوات مثل jq لتقديم تصورات مختلفة، أو تصفية النتائج، أو تمريرها إلى أدوات أخرى لأتمتة متقدمة. 

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

 

kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] 
| {name: .metadata.name, replicas: .status.replicas, available:
 (.status.availableReplicas // 0), unavailable:
 (.status.unavailableReplicas // 0)} | select (.unavailable > 0)'

فيما يلي شرح سريع للأمر أعلاه:

  • أولًا، نستدعي واجهة برمجة تطبيقات Kubernetes لإرجاع جميع عمليات النشر. الناتج الافتراضي هو JSON. قد يكون من الصعب تصور بنية مستند JSON، لكن يمكنك استخدام jq للحصول على فهم أوضح كما في المثال أدناه.

    kubectl get --raw=/apis/apps/v1/deployments | jq .

  • لاحِظ أن مستند الاستجابة يحتوي على مصفوفة من العناصر لكل عملية نشر. نريد فحص حقل الحالة في نهاية هذه المصفوفة بالكامل. يوضِّح الأمر أدناه كيفية طباعة البيانات المطلوبة فقط مع استخدام القيمة الافتراضية 0 عند عدم توفُّر الحقل.

     

    kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] |
    {name: .metadata.name, replicas: .status.replicas, available:
     (.status.availableReplicas // 0), unavailable: 
    (.status.unavailableReplicas // 0)}'
    
  • الجزء الأخير من العملية هو استخدام وظيفة select لعرض عمليات النشر التي تحتوي على نسخ غير متاحة فقط.

     

    kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] | 
    {name: .metadata.name, replicas: .status.replicas, available:
     (.status.availableReplicas // 0), unavailable: 
    (.status.unavailableReplicas // 0)} | select (.unavailable > 0)'
    

تنفيذي

نأمل أن تجد بعض هذه النصائح والحيل مفيدة أثناء عملك مع Kubernetes. أعلمنا إذا كانت لديك نصيحة مفضلة أو نصيحة خاصة ترغب في مشاركتها.

لا تنسَ الاطِّلاع على IBM Cloud Kubernetes Service وتطبيق هذه النصائح والحيل عمليًا.

هل تريد الحصول على تجربة عملية مجانية باستخدام Kubernetes؟ استفِد من IBM CloudLabs، وهي منصة تفاعلية جديدة تقدِّم برامج تعليمية حول Kubernetes مع شهادة معتمدة - دون تكلفة أو حاجة إلى تكوين.

مؤلف

Ravi Saraswathi

IBM Chief Architect

IBM Blog

Marcelo Borges

Lead Cloud Solution Architect

حلول ذات صلة
مراقبة Kubernetes - IBM Instana

ملاحظة ومراقبة وإصلاح مجموعة Kubernetes بأكملها تلقائيًا لتحسين أداء وتوفّر تطبيقك.

استكشف IBM Instana
خدمات الاستشارات السحابية 

تسريع نمو ومرونة الأعمال—حدِّث تطبيقاتك باستمرار على أي منصة باستخدام خدماتنا السحابية والاستشارات التي نقدِّمها.

استكشاف الخدمات الاستشارية ذات الصلة بتقنيات السحابة
حلول الحاويات

حلول الحاويات تقوم بتشغيل وتوسيع نطاق أحمال التشغيل التي تعمل ضمن حاويات بأمان وابتكار مفتوح المصدر ونشر سريع.

استكشف الحاويات
اتخِذ الخطوة التالية

يوفر IBM Instana Observability قابلية الملاحظة المؤتمتة لـ Kubernetes وقدرات مراقبة أداء التطبيقات (APM) المصممة لمراقبة مجموعة تطبيقات Kubernetes التي تستخدمها بالكامل - بدءًا من العقد والحجيرات وصولاً إلى الحاويات والتطبيقات لجميع توزيعات Kubernetes.

استكشف IBM Instana Observability استمتع بتجربة Instana