📖 ما هو Kubernetes؟
منصة تنسيق الحاويات
Kubernetes (أو K8s) نظام مفتوح المصدر من Google لإدارة الحاويات. يتعامل مع النشر، التوسع، والاستعادة التلقائية. يدير مئات الحاويات عبر عدة خوادم كوحدة واحدة.
📦
Pod
أصغر وحدة في K8s. يحتوي حاوية واحدة أو أكثر تتشارك الشبكة والتخزين.
🎯
Deployment
يُعرّف الحالة المطلوبة للتطبيق. يدير Pods ويتعامل مع التحديثات.
🔗
Service
يعرّف كيفية الوصول للـ Pods. يوفر IP ثابت و Load Balancing.
🚪
Ingress
يدير الوصول الخارجي للتطبيقات عبر HTTP/HTTPS مع SSL.
🚀 الأوامر الأساسية
kubectl cluster-info
kubectl get nodes
kubectl get pods
kubectl get pods -n kube-system
kubectl get svc
kubectl get deployments
kubectl logs -f my-pod
kubectl exec -it my-pod -- /bin/sh
kubectl describe pod my-pod
📋 Deployment YAML
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"
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- port: 80
targetPort: 3000
type: ClusterIP
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
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
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
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
✅ أفضل الممارسات
🎯
1. حدد دائماً resource limits و requests
2. استخدم Namespaces لعزل البيئات
3. فعّل Health Checks (liveness & readiness)
4. استخدم Helm لإدارة التطبيقات المعقدة
5. لا تضع Secrets في YAML — استخدم Vault أو External Secrets
6. فعّل RBAC للتحكم بالصلاحيات