حول المحتوى:
أساسيات Kubernetes للمطورين: مفاهيم Pods, Services, Deployments، كتابة ملفات YAML بسيطة، ونشر تطبيق ويب صغير مع شرح لأدوات محلية مثل Minikube وKind.
إذا كنت كمطور بدأت تستخدم الحاويات (Containers) عبر Docker، فغالبًا ستسمع كثيرًا عن Kubernetes. هذه المنصة أصبحت المعيار الفعلي لإدارة وتشغيل التطبيقات المعتمدة على الحاويات في البيئات الكبيرة (والصغيرة أيضًا). في هذا المقال سنقدّم مقدمة عملية إلى Kubernetes للمطورين، ونشرح المفاهيم الأساسية مثل Pods, Services, Deployments، وكيف تكتب ملفات YAML بسيطة، مع مثال عملي لنشر تطبيق ويب صغير باستخدام أدوات محلية مثل Minikube وKind.
إذا لم تكن مرتاحًا بعد مع مفهوم الحاويات، يمكنك الرجوع إلى مقالنا عن تعلم الدوكر: شرح أساسيات التعامل مع الحاويات ثم العودة إلى هذه المقدمة.
Kubernetes (أو K8s) هي منصة مفتوحة المصدر لإدارة وتشغيل التطبيقات داخل حاويات. يمكن اعتباره نظام تشغيل لمراكز البيانات، يتولى:
من منظور مطور، Kubernetes للمطورين يعني: كيف تكتب ملفات تعريف لتطبيقك (YAML)، وتتعامل مع الأوامر الأساسية، وتفهم ما يحدث عندما تنشر نسخة جديدة من التطبيق.
قبل أن نبدأ بالمفاهيم، نحتاج Cluster محلي للتجربة. أشهر خيارين:
Minikube أداة تقوم بإنشاء Cluster واحد-العقدة (Single-node) على جهازك. مناسب جدًا للتجربة والتعلم.
minikube start kubectl get nodes Kind يعمل عبر Docker؛ ينشئ Kubernetes Cluster داخل حاويات دوكر. إذا كان لديك Docker مثبت مسبقًا، غالبًا سيكون تثبيته بسيطًا.
kind create cluster kubectl cluster-info في باقي المقال سنستخدم الأوامر بصيغة عامة تنطبق على Minikube وKind وأي Cluster آخر.
الـ Pod هو أصغر كيان يمكن لـ Kubernetes تشغيله. يحتوي على حاوية واحدة أو أكثر تعمل معًا وتشارك:
في أغلب التطبيقات البسيطة، يكون Pod = حاوية واحدة تحتوي تطبيق الويب أو الخدمة.
الـ Deployment هو الطريقة الموصى بها لتشغيل Pods وإدارتها. هو تعريف يحدد:
عندما تنشئ Deployment، يقوم Kubernetes بإنشاء ReplicaSet يتولى المحافظة على عدد الـ Pods وفق المطلوب. إذا تعطل Pod، يتم إنشاء Pod جديد تلقائيًا.
الـ Service يوفر عنوانًا ثابتًا (Stable IP / DNS) للوصول إلى Pods المتغيرة. لأن Pods تُنشأ وتُحذف وتتغير عناوينها، تحتاج طبقة ثابتة أمامها.
هناك أنواع مختلفة من Services، أبرزها:
تعريفات Kubernetes غالبًا تُكتب في ملفات بصيغة YAML. الفكرة بسيطة:
كمطور، ستتعامل بشكل شبه دائم مع هذه الملفات. تعديل صغير في الـ YAML قد يعني إصدار جديد من تطبيقك، وهذا يشبه مفهوم GitOps الذي شرحناه في مقال GitOps باختصار: كيف تجعل Git مدير البنية التحتية.
لنفرض أن لدينا تطبيق ويب بسيط جدًا يعمل عبر حاوية Docker منشورة على Docker Hub، مثل:
docker.io/library/nginx:latest سنعتبره تطبيقنا الأول على Kubernetes، وننشئ له Deployment وService.
أنشئ ملف باسم deployment.yaml بالمحتوى التالي (يمكن تعديل الاسم والصورة لاحقًا):
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-first-app
labels:
app: my-first-app
spec:
replicas: 2
selector:
matchLabels:
app: my-first-app
template:
metadata:
labels:
app: my-first-app
spec:
containers:
- name: my-first-app
image: nginx:latest
ports:
- containerPort: 80
شرح سريع لأهم الأسطر من منظور Kubernetes للمطورين:
من داخل نفس المجلد:
kubectl apply -f deployment.yaml تحقق من الـ Pods:
kubectl get pods يجب أن ترى اثنين من الـ Pods بالأسماء التي تبدأ بـ my-first-app-... وحالة Running.
الآن التطبيق يعمل داخل Cluster، لكن لا يوجد طريقة للوصول إليه من المتصفح (من خارج Cluster) إلا إذا أنشأنا Service.
أنشئ ملف جديد باسم service.yaml:
apiVersion: v1
kind: Service
metadata:
name: my-first-app-service
spec:
selector:
app: my-first-app
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30080
ماذا يعني ذلك؟
طبّق Service:
kubectl apply -f service.yaml ثم تحقق:
kubectl get services ستجد my-first-app-service مع المنافذ المحددة. الآن يمكنك فتح المتصفح على:
minikube ip http://<minikube-ip>:30080kubectl port-forward svc/my-first-app-service 8080:80 ثم زيارة http://localhost:8080. بعد أن قمت بتشغيل أول تطبيق، ستحتاج لمجموعة أوامر أساسية للتعامل اليومي:
kubectl get pods
kubectl get deployments
kubectl get services kubectl describe pod <pod-name>
kubectl describe deployment my-first-app kubectl logs <pod-name> kubectl delete -f deployment.yaml
kubectl delete -f service.yaml لنفرض أن لديك نسخة جديدة من التطبيق منشورة كصورة Docker جديدة مثل:
myuser/my-first-app:v2 لتحديث التطبيق في Kubernetes:
containers:
- name: my-first-app
image: myuser/my-first-app:v2 kubectl apply -f deployment.yaml kubectl rollout status deployment/my-first-app Kubernetes سيقوم بعمل Rolling Update: تشغيل النسخ الجديدة تدريجيًا وإيقاف القديمة مع الحفاظ على التوافر (Availability) قدر الإمكان.
من أفضل الممارسات في استخدام Kubernetes للمطورين:
k8s/.k8s/dev للبيئة التطويرية.k8s/stage للبيئة التجريبية.k8s/prod للبيئة الإنتاجية.هذا الأسلوب يمهّد لتبنّي أسلوب GitOps الذي يربط بين كود التطبيق وبنية التشغيل كما شرحنا بتفصيل أكثر في مقال GitOps باختصار: كيف تجعل Git مدير البنية التحتية.
kubectl create namespace lab
kubectl config set-context --current --namespace=lab ثم نفّذ كل التجارب داخل هذا الـ namespace. kubectl get events --sort-by=.metadata.creationTimestamp يساعدك كثيرًا في تشخيص مشاكل النشر. Kubernetes للمطورين لم يعد رفاهية في كثير من الفرق، بل أصبح جزءًا من بيئة العمل الطبيعية، خصوصًا مع انتشار المعمارية المعتمدة على الخدمات المصغّرة (Microservices) والحاويات. ما تحتاجه كبداية:
بعد إتقان هذه الأساسيات، يمكنك التوسع نحو موضوعات أكثر تقدمًا مثل Ingress، Autoscaling، إدارة التخزين، والمراقبة (Monitoring)، وربط ذلك مع CI/CD وGitOps. الأهم هو أن تبدأ بتجربة عملية على جهازك، تنشر أول تطبيق، وتتعلم من الأخطاء خطوة بخطوة.
أساسيات Kubernetes للمطورين: مفاهيم Pods, Services, Deployments، كتابة ملفات YAML بسيطة، ونشر تطبيق ويب صغير مع شرح لأدوات محلية مثل Minikube وKind.
مساحة اعلانية