مقدمة

لو إنت مبرمج وبتسمع عن Kubernetes (k8s) ومش فاهم بالظبط بيعمل إيه… خليني أقولك ببساطة:
k8s هو النظام اللي بيدير الحاويات (containers) بتاعتك، يعني بدل ما تدير كل container بإيدك (تشغيل، إيقاف، تحديث، إعادة تشغيل لو وقع أو وقف)، k8s بيعمل ده كله بشكل أوتوماتيكي. ممكن تعتبره زي نظام تشغيل للـ Cluster بتاعك.

اللي عمله Kubernetes في الاستضافة شبيه جدًا باللي عملته البرمجة الكائنية التوجه (OOP) في البرمجة. بدل ما بنفكر في الكود على إنه مجموعة سطور، مع الـ OOP بقينا نفكر في شكل Objects، لكل Object خصائص (Attributes) ودوال (Methods).

نفس التحول ده حصل مع Kubernetes: بدل ما نفكر في “سيرفر هشغّل عليه التطبيق” بقينا نفكر في شكل Objects زي Pod وDeployment وService. يعني بدل ما بنشغل نفسنا بتشغيل السيرفر أو إدارة تطبيقنا أو موقعنا عليه، بقينا بنسأل “أنهي Object في k8s هايحقق لي المطلوب؟”. طريقة تفكيرنا في الاستضافة اتغيرت وبقت أقرب لطريقة المبرمج في التفكير.

في المقالة دي هنعدي على أهم الـ objects اللي لازم أي مبرمج يعرفها لو محتاج يتعامل مع k8s.

🟦 Pod

  • أصغر وحدة تشغيل في k8s.
  • الـ Pod ممكن يحتوي على container واحد أو أكتر، بس أغلب الوقت بيبقى واحد.
  • كل Pod ليه IP خاص بيه، وبيشارك الـ containers اللي جواه نفس الـ network/storage.
  • مبني عشان يتدمر ويتبدّل بسهولة، عشان كده الـ IP بتاعه بيتغير طول الوقت.
  • ممكن تحدد له الموارد المطلوبة (CPU, Memory) وكمان أقصى موارد مسموح له يستهلكها.

🟩 Deployment

  • بيدير مجموعة من الـ Pods المتطابقة (نفس التطبيق ونفس الإعدادات).
  • بيضمن إن عدد النسخ (replicas) اللي إنت محدده يفضل ثابت:
    • لو واحدة من الـ Pods وقعت → الـ Deployment أوتوماتيك بيشغل Pod جديدة مكانها.
    • تقدر تشغّل كذا نسخة في نفس الوقت من نفس Pod عشان يبقى فيه توزيع حمل (load balancing) واستمرارية للخدمة.
  • بيدعم التحديث التدريجي (rolling updates) لو حبيت ترقي التطبيق من غير انقطاع في الخدمة.
  • وكمان بيدعم التراجع (rollback) لو اكتشفت خطأ في الترقية الأخيرة.

🟨 Service

  • بيربط مجموعة الـ Pods المتطابقة (اللي بيديرها الـ Deployment) ويقدّمها كأنها خدمة واحدة.
  • بيوفر IP ثابت خاص بيه، وده اللي المفروض تستخدمه أي خدمة تانية عشان تكلم التطبيق بتاعك، مش IP بتاع الـ Pods
  • ليه كمان DNS name تقدر تستخدمه بدل الـ IP، بالشكل: ..svc.cluster.local
  • عندك 3 أنواع أساسيين:
    • ClusterIP: داخلي بس (جوا الكلاستر) وماتقدرش توصل له من بره.
    • NodePort: بيفتح Port من الـ Node عشان توصل من برة.
    • LoadBalancer: بيعمل external load balancer على الـ cloud ويوجّه الطلبات من الإنترنت للـ Service.

🟧 ConfigMap و Secret

  • ConfigMap: تحط فيه إعدادات مش حساسة (زي environment variables أو ملفات config).
  • Secret: تحط فيه بيانات حساسة (زي passwords أو tokens).
  • الفكرة: الكود يبقى مستقل عن الإعدادات:
    • بدل ما تحط القيم hardcoded جوه الـ Pod.
    • استخدم ConfigMap أو Secrets لتوصيل الإعدادات للـ Pod من برّه.

🟥 Ingress

  • بيوفر Layer أعلى من الـ Service عشان يعمل routing للـ HTTP/HTTPS.
  • بيخليك تدير الـ URLs, domains, و TLS certificates.
  • مفيد جدًا لو بتبني APIs أو Web Apps، لأنك تقدر تحدد قواعد التوجيه بسهولة من غير ما تعدّل الكود نفسه.

🟩 Gateway API

  • ده الجيل الجديد من الـ resources لإدارة الـ HTTP/HTTPS traffic في Kubernetes.
  • بيوفر تحكم دقيق في التوجيه: زي التوجيه حسب الـ path، الـ host، أو حتى الـ headers.
  • بيدعم تقسيم الـ traffic بين خدمات مختلفة (مثلاً: 80% للخدمة القديمة، 20% للنسخة الجديدة من التطبيق)
  • بيدعم فلترة الـ requests و الـ responses: زي تعديل الـ headers أو إعادة كتابة الـ URL، من غير ما تعدّل الكود نفسه.
  • بيسهّل عليك إدارة الـ TLS certificates و الـ domains بشكل مرن وأبسط من الـ Ingress التقليدي.

🟪 Job و CronJob

  • Job: يشغل مهمة لمرة واحدة (مثلاً script يجهّز بيانات).
  • CronJob: نفس الفكرة بس بجدولة schedule (زي cron في Linux).

🟦 حاجات تانية مفيدة

  • Namespace: تقسيم الكلاستر لبيئات مختلفة (dev, staging, prod).
  • PersistentVolume: تخزين بيانات دائم للتطبيقات اللي محتاجة database أو ملفات.

🎯 الخلاصة

إنت كمبرمج مش محتاج تبقى خبير في إدارة كلاستر Cluster ولا مسؤول DevOps. المهم إنك تفهم إزاي تعرف الـ objects الأساسية دي وتشغل تطبيقك على بيئة Kubernetes.

تقدر تفتكر العلاقة كده:

  • Pod = حاوية container شغال
  • Deployment = إدارة وتكرار الـ Pods
  • Service = وصول ثابت للـ Pods
  • Ingress/Gateway = دخول خارجي للـ Services
  • ConfigMap/Secret = إعدادات للتطبيق
  • Job/CronJob = مهام خاصة

لو فهمت دول… إنت كده على أول الطريق مع Kubernetes. 🚀