☸️

Kubernetes (K8s)

منصة تنسيق الحاويات على نطاق واسع. المعيار الصناعي لإدارة أعباء عمل الإنتاج.

متقدم CNCF Production

📖 ما هو Kubernetes؟

منصة تنسيق الحاويات

Kubernetes (أو K8s) نظام مفتوح المصدر من Google لإدارة الحاويات. يتعامل مع النشر، التوسع، والاستعادة التلقائية. يدير مئات الحاويات عبر عدة خوادم كوحدة واحدة.

📦

Pod

أصغر وحدة في K8s. يحتوي حاوية واحدة أو أكثر تتشارك الشبكة والتخزين.

🎯

Deployment

يُعرّف الحالة المطلوبة للتطبيق. يدير Pods ويتعامل مع التحديثات.

🔗

Service

يعرّف كيفية الوصول للـ Pods. يوفر IP ثابت و Load Balancing.

🚪

Ingress

يدير الوصول الخارجي للتطبيقات عبر HTTP/HTTPS مع SSL.

🏗️ هيكلية Kubernetes

🧠

Control Plane

عقل K8s — يدير الكلاستر: API Server, etcd, Scheduler, Controller Manager.

👷

Worker Nodes

الخوادم التي تشغّل الحاويات: kubelet, kube-proxy, Container Runtime.

💾

etcd

قاعدة بيانات مفتاح-قيمة تخزن حالة الكلاستر بالكامل.

📋

kubectl

أداة سطر الأوامر للتحكم في K8s. كل التفاعل يمر عبر API Server.

🚀 الأوامر الأساسية

Terminal — kubectl Basics
# فحص الكلاستر kubectl cluster-info kubectl get nodes # عرض Pods kubectl get pods kubectl get pods -n kube-system # عرض Services kubectl get svc # عرض Deployments kubectl get deployments # سجلات Pod kubectl logs -f my-pod # الدخول لـ Pod kubectl exec -it my-pod -- /bin/sh # وصف مورد (للتشخيص) kubectl describe pod my-pod

📋 Deployment YAML

deployment.yml
apiVersion: apps/v1 kind: Deployment metadata: name: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myuser/myapp:latest ports: - containerPort: 3000 resources: requests: memory: "128Mi" cpu: "250m" limits: memory: "256Mi" cpu: "500m"
service.yml
apiVersion: v1 kind: Service metadata: name: myapp-service spec: selector: app: myapp ports: - port: 80 targetPort: 3000 type: ClusterIP
Terminal — تطبيق الملفات
# تطبيق kubectl apply -f deployment.yml kubectl apply -f service.yml # التوسع kubectl scale deployment myapp --replicas=5 # تحديث الصورة kubectl set image deployment/myapp myapp=myuser/myapp:v2 # التراجع عن تحديث kubectl rollout undo deployment/myapp

📦 Helm — مدير حزم Kubernetes

Terminal — Helm Commands
# تثبيت Helm curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash # إضافة repository helm repo add bitnami https://charts.bitnami.com/bitnami # تثبيت حزمة helm install my-release bitnami/nginx # عرض الحزم المثبتة helm list # ترقية helm upgrade my-release bitnami/nginx # إلغاء التثبيت helm uninstall my-release

🔧 ConfigMaps & Secrets

config.yml
apiVersion: v1 kind: ConfigMap metadata: name: app-config data: APP_ENV: "production" APP_PORT: "3000" LOG_LEVEL: "info" --- apiVersion: v1 kind: Secret metadata: name: app-secret type: Opaque data: DB_PASSWORD: c2VjcmV0MTIz # base64 encoded

أفضل الممارسات

🎯 1. حدد دائماً resource limits و requests
2. استخدم Namespaces لعزل البيئات
3. فعّل Health Checks (liveness & readiness)
4. استخدم Helm لإدارة التطبيقات المعقدة
5. لا تضع Secrets في YAML — استخدم Vault أو External Secrets
6. فعّل RBAC للتحكم بالصلاحيات
السابق: قواعد البيانات التالي: البنية التحتية كـ Code