Breaking News
القائمة
Advertisement

إتقان البنية التحتية السحابية: دليلك العملي لتقنيات Kubernetes وAWS وLinux

إتقان البنية التحتية السحابية: دليلك العملي لتقنيات Kubernetes وAWS وLinux

قد يبدو إتقان الركائز الأساسية لهندسة السحابة أمراً شاقاً، لكن تفكيك الأنظمة المعقدة إلى خطوات عملية يسرّع من منحنى التعلم. يزيل دليل أساسيات DevOps هذا الغموض عن إدارة المجموعات، وتكوينات نظام التشغيل، وتجهيز الموارد السحابية لمساعدتك في بناء بنية تحتية مرنة. وسواء كنت تقوم بإعداد شبكات افتراضية أو استكشاف أخطاء إخلاء الحاويات، فإن فهم الآليات الأساسية لتقنيات Kubernetes وAWS وLinux يُعد أمراً بالغ الأهمية لأي بيئة عمل حديثة.

خدمات Kubernetes وتوجيه مسار البيانات

في بيئة Kubernetes، يتطلب كشف التطبيقات بشكل موثوق فهماً عميقاً للخدمات. يُعد النوع الافتراضي للخدمة هو ClusterIP، والذي يوفر عنوان IP افتراضياً مستقراً ويوازن مسار البيانات حصرياً عبر حاويات Pods المتطابقة داخل المجموعة باستخدام التصنيفات. أما للوصول الخارجي، فتقوم خدمة NodePort بكشف التطبيق على منفذ محدد عبر كل عقدة في بيئة Kubernetes، باستخدام نطاق منافذ يتراوح بين 30000 و32767.

عند تكوين خدمة NodePort، تتدفق البيانات عبر مسار محدد. يتطلب الأمر تحديد منفذ الحاوية (containerPort) حيث يستمع التطبيق، والمنفذ المستهدف (targetPort) الذي توجه الخدمة البيانات إليه، والمنفذ الداخلي (port)، والمنفذ الخارجي (nodePort). وفي البيئات السحابية مثل AWS وAzure وGCP، يستخدم المهندسون عادةً خدمة LoadBalancer، والتي تقوم تلقائياً بتجهيز موازن أحمال سحابي لتوجيه حركة مرور الإنترنت مباشرة إلى الخدمة ومنها إلى حاويات Pods.

Client   ↓
NodeIP:NodePort   ↓
Service Port   ↓
TargetPort   ↓
ContainerPort

إتقان جدولة Kubernetes وحدود الموارد

يُعد التحكم في مكان تشغيل حاويات Pods جانباً أساسياً لاستقرار المجموعة. يستخدم المسؤولون قيود Taints لإبعاد الحاويات عن عقد معينة، بينما تسمح ميزة التسامح مع القيود (Tolerations) لحاويات محددة بتجاهل تلك القيود. وتختلف التأثيرات: حيث يمنع تأثير NoSchedule وضع حاويات جديدة، ويعمل PreferNoSchedule كقيد مرن، بينما يقوم NoExecute بإخلاء الحاويات الحالية التي تفتقر إلى التسامح المناسب.

kubectl taint nodes <node-name> key=value:NoSchedule

على العكس من ذلك، يحدد تقارب العقد (Node Affinity) المكان الذي يجب أن تعمل فيه الحاوية. من خلال تصنيف العقدة (على سبيل المثال، disktype=ssd)، يمكنك فرض التعيين باستخدام requiredDuringSchedulingIgnoredDuringExecution (كمتطلب صارم) أو preferredDuringSchedulingIgnoredDuringExecution (كتفضيل مرن). بالإضافة إلى ذلك، يجب أن تحدد كل حاوية طلبات وحدود الموارد للحفاظ على صحة المجموعة.

resources:
  requests:
    cpu: "250m"
    memory: "256Mi"
  limits:
    cpu: "500m"
    memory: "512Mi"

تضمن الطلبات (Requests) الحد الأدنى من الموارد للجدولة، بينما تضع الحدود (Limits) سقفاً للاستهلاك الأقصى. إذا تم تجاوز حد المعالج، يتم تقييد العملية. ومع ذلك، إذا تم تجاوز حد الذاكرة، يتم إنهاء الحاوية فجأة بواسطة أداة إنهاء العمليات بسبب نفاد الذاكرة (OOMKilled).

كيفية حل تعارض الجدولة في Kubernetes

يتجلى فهم هذه المفاهيم بشكل أفضل من خلال استكشاف الأخطاء وإصلاحها في سيناريوهات واقعية. تخيل موقفاً تفشل فيه جدولة حاوية Pod لأن عقدة التحكم (control-plane) تحتوي على قيد Taint، وعقدة العمل الوحيدة المتاحة تفتقر إلى الذاكرة الكافية للموارد التي تطلبها الحاوية. علاوة على ذلك، تتطلب الحاوية صراحةً قرص SSD عبر محدد العقد (nodeSelector).

  • الخطوة 1: قم بتصنيف عقدة العمل المستهدفة لتلبية متطلبات المحدد باستخدام الأمر: kubectl label node worker1 disk=ssd.
  • الخطوة 2: حلّل قيود الموارد وحدد أن الحاوية تطلب ذاكرة أكبر مما يمكن لعقدة العمل توفيره فعلياً.
  • الخطوة 3: قلّل طلب الذاكرة الخاص بالحاوية في ملف البيان (Manifest). بمجرد التعديل، سيجد المجدول العقدة مناسبة وينشر الحاوية بنجاح.

أوامر Linux الأساسية ومتغيرات البيئة

تعتمد ممارسات DevOps الفعالة بشكل كبير على إتقان نظام Linux. يتطلب التنقل في نظام الملفات أوامر مثل mkdir <folder_name> لإنشاء أدلة، وcd للتنقل، وpwd لطباعة مسار الدليل الحالي، وls لسرد المحتويات. وللحذف، يقوم أمر rm -rf <folder_name> بإزالة الأدلة ومحتوياتها بشكل متكرر وقسري، رغم أنه يجب استخدامه بحذر شديد.

تُعد إدارة متغيرات البيئة أمراً بالغ الأهمية أيضاً. يمكنك عرض جميع المتغيرات باستخدام env، أو التحقق من متغير معين باستخدام echo $VARIABLE_NAME، أو تعيين متغير مؤقت باستخدام export VARIABLE_NAME=value. لجعل المتغيرات دائمة، يجب إضافة أمر التصدير إلى ملفات تكوين الصدفة (Shell) مثل ~/.profile أو ~/.bashrc أو ~/.zshrc.

export PS1="\u@\h:\w\$ "

يمكنك أيضاً تخصيص موجه الأوامر (Terminal Prompt) الخاص بك عن طريق تعديل متغير PS1. في المثال أعلاه، يمثل \u اسم المستخدم، و\h اسم المضيف، و\w الدليل الحالي، بينما يعرض \$ رمز الموجه القياسي.

تجهيز موارد AWS EC2 وVPC وS3

بالانتقال إلى الطبقة السحابية، توفر منصة AWS البنية التحتية الأساسية لهذه المجموعات. يتضمن إطلاق مثيل EC2 اختيار صورة جهاز أمازون (AMI)، مثل إصدار Ubuntu Quick Start أو Windows Server. بالنسبة لأعباء العمل الصغيرة واختبارات الطبقة المجانية، يُعد طراز t3.micro مناسباً للغاية. يتطلب تكوين الإطلاق أيضاً إعداد زوج مفاتيح، والشبكات، ومساحة التخزين، ومجموعة الأمان.

تعمل هذه المثيلات داخل شبكة سحابية افتراضية خاصة (VPC)، والتي تعمل كشبكة افتراضية معزولة. يتم تعريف كل شبكة VPC بواسطة كتلة CIDR (على سبيل المثال، بصيغة 10.0.0.0/16) والتي تملي نطاق عناوين IP الخاص بها. من المهم ملاحظة أن شبكات VPC هي موارد إقليمية، مما يعني أنها موجودة بالكامل داخل منطقة AWS واحدة. وإلى جانب الحوسبة والشبكات، توفر خدمات مثل Amazon S3 تخزين الكائنات الضروري لإكمال البنية السحابية الأساسية.

لماذا تتطلب التجريدات السحابية فهماً أعمق لنظام التشغيل

يسلط التقاطع بين جدولة Kubernetes، وبيئات Linux، وتجهيز موارد AWS الضوء على حقيقة حاسمة في ممارسات DevOps الحديثة: التجريد لا يلغي الحاجة إلى المعرفة التأسيسية. عندما تتعطل حاوية Pod بسبب خطأ OOMKilled، فإن مجرد إعادة تشغيلها عبر لوحة تحكم Kubernetes غير كافٍ. يجب على المهندس أن يفهم كيف تدير نواة Linux حدود الذاكرة وكيف يتم تجهيز مثيل AWS EC2 الأساسي لحل عنق الزجاجة بشكل دائم.

علاوة على ذلك، فإن الاعتماد على موازنات الأحمال السحابية والتوسع التلقائي يمكن أن يخلق شعوراً زائفاً بالأمان. وكما اتضح من سيناريو تعارض الجدولة، يمكن لقيد Taint واحد تم تكوينه بشكل خاطئ أو طلب ذاكرة مبالغ فيه أن يوقف عمليات النشر بالكامل. يظل إتقان سطر الأوامر وفهم مسار البيانات الدقيق من كتلة VPC CIDR وصولاً إلى منفذ الحاوية هو شبكة الأمان المطلقة لموثوقية البنية التحتية.

هل أعجبك هذا المقال؟
Advertisement

عمليات البحث الشائعة