مقدمة في Kubernetes: الأساسيات
تعرّف على المفاهيم الأساسية في Kubernetes وبنيته المعمارية، وكيف يُحدث ثورة في نشر التطبيقات المعبأة في حاويات.
InSkillCoach
ما هو Kubernetes؟
Kubernetes (K8s) هو منصة مفتوحة المصدر صُمّمت لأتمتة نشر التطبيقات المعبأة في حاويات وتوسيع نطاقها وتشغيلها. طوّرته Google في الأصل، وتتولى صيانته اليوم مؤسسة Cloud Native Computing Foundation (CNCF).
يدير Kubernetes حاويات Docker (أو بيئات تشغيل الحاويات الأخرى) تلقائيًا، فيجمعها في وحدات منطقية لتسهيل إدارتها واكتشافها. كما يوفّر نهجًا تصريحيًا (declarative) لتحديد الحالة المرغوبة لبنيتك التحتية.
لماذا Kubernetes؟
المزايا الرئيسية
- الأتمتة: انشر التطبيقات وحدّثها دون انقطاع في الخدمة.
- قابلية التوسع: اضبط عدد الحاويات تلقائيًا بحسب الحمل.
- التوافر العالي: وزّع الحاويات على عدة عقد لتجنب نقاط الفشل الأحادية.
- قابلية النقل: شغّل تطبيقاتك بالطريقة نفسها في بيئات مختلفة (التطوير والاختبار والإنتاج).
- توفير التكاليف: حسّن استخدام الموارد وقلّل تكاليف البنية التحتية.
حالات الاستخدام
- تطبيقات الخدمات المصغّرة (microservices)
- التطبيقات السحابية الأصلية (cloud-native)
- عمليات النشر المعقدة
- البيئات متعددة السحابات (multi-cloud)
- التطبيقات التي تتطلب توافرًا عاليًا
البنية المعمارية لـ Kubernetes
يعتمد Kubernetes بنية العميل والخادم (client-server) مع المكونات التالية:
مكونات مستوى التحكم (Control Plane)
- API Server: نقطة الدخول لجميع الأوامر والاتصالات.
- etcd: قاعدة بيانات موزعة تخزّن جميع بيانات الإعدادات.
- Scheduler: يحدد العقد التي ينبغي أن تشغّل كل pod.
- Controller Manager: يدير مختلف المتحكمات (controllers) التي تنظّم حالة العنقود.
- Cloud Controller Manager: يتكامل مع الخدمات السحابية (موازنات الحمل والأقراص وغيرها).
مكونات العقد (Nodes)
- Kubelet: وكيل يعمل على كل عقدة ويؤمّن الاتصال بمستوى التحكم.
- Container Runtime: البرنامج الذي يشغّل الحاويات (Docker وcontainerd وCRI-O).
- Kube-proxy: يدير قواعد الشبكة والاتصالات.
- Pods: أصغر وحدة قابلة للنشر في Kubernetes، وتحتوي على حاوية واحدة أو أكثر.
المفاهيم الأساسية
Pods
الـ pod هو أصغر وحدة قابلة للنشر في Kubernetes. يمكن أن يحتوي على حاوية واحدة أو أكثر تتشارك ما يلي:
- فضاء أسماء للشبكة (network namespace)
- فضاء أسماء IPC
- فضاء أسماء UTS
- فضاء أسماء PID (اختياري)
- تخزين مشترك (volumes)
Services
الـ service هو تجريد يحدد مجموعة منطقية من الـ pods وسياسة للوصول إليها. تشمل أنواع الخدمات:
- ClusterIP: يعرض الخدمة على عنوان IP داخلي للعنقود
- NodePort: يعرض الخدمة على منفذ كل عقدة
- LoadBalancer: يعرض الخدمة خارجيًا عبر موازن حمل
- ExternalName: يربط الخدمة باسم DNS خارجي
عمليات النشر (Deployments)
يوفّر الـ Deployment تحديثات تصريحية للـ pods والـ ReplicaSets. وهو يتيح:
- تحديد عدد النسخ المتماثلة (replicas) المطلوبة
- تحديث الـ pods بصورة تدريجية
- الرجوع إلى إصدار سابق عند حدوث مشكلة
ConfigMaps وSecrets
- ConfigMaps: تخزّن بيانات غير سرية على شكل أزواج مفتاح-قيمة
- Secrets: تخزّن بيانات حساسة (كلمات المرور والرموز المميزة (tokens) والمفاتيح)
Volumes
تتيح الـ volumes الحفاظ على بيانات الحاويات بشكل دائم. يدعم Kubernetes أنواعًا كثيرة من الـ volumes:
- الأقراص المحلية (emptyDir وhostPath)
- الأقراص السحابية (AWS EBS وGCP Persistent Disk)
- أقراص الشبكة (NFS وCeph)
الخطوات الأولى مع Kubernetes
تثبيت minikube
Minikube أداة تتيح لك تشغيل Kubernetes محليًا:
# Installation de minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# Démarrage de minikube
minikube start
تثبيت kubectl
kubectl هي أداة سطر الأوامر للتفاعل مع Kubernetes:
# Installation de kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
الأوامر الأساسية
# Vérifier la version de kubectl
kubectl version
# Lister les nœuds
kubectl get nodes
# Lister les pods
kubectl get pods
# Lister les services
kubectl get services
# Créer un déploiement
kubectl create deployment hello-world --image=gcr.io/google-samples/hello-app:1.0
# Exposer un service
kubectl expose deployment hello-world --type=LoadBalancer --port=8080
# Décrire un pod
kubectl describe pod <pod-name>
# Voir les logs d'un pod
kubectl logs <pod-name>
# Exécuter une commande dans un pod
kubectl exec -it <pod-name> -- /bin/bash
الخاتمة
أصبح Kubernetes المعيار الصناعي لتنسيق الحاويات (container orchestration). وقدرته على أتمتة نشر التطبيقات المعبأة في حاويات وتوسيع نطاقها وتشغيلها تجعله أداة لا غنى عنها لفرق DevOps الحديثة.
في المقالات القادمة، سنتناول مواضيع أكثر تقدمًا، مثل:
- إنشاء عمليات نشر معقدة
- إدارة الأسرار والإعدادات
- المراقبة (monitoring) وتسجيل السجلات (logging)
- الأمان في Kubernetes
- التكامل مع CI/CD
ترقّبوا المقالات القادمة لمعرفة المزيد عن هذه المواضيع!
نبذة عن InSkillCoach
خبير في التدريب والتقنيات
مدرّب متخصص في التقنيات المتقدمة والذكاء الاصطناعي، تدعمه شركة GNeurone Inc.
الشهادات:
- AWS Certified Solutions Architect – Professional
- شهادات Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
التعليقات
التعليقات مدعومة عبر GitHub Discussions
سجّل الدخول باستخدام GitHub للمشاركة في النقاش