إدارة Docker Volume والشبكات: التخزين الدائم وتكوين الشبكة
أنواع Docker volume (named, bind mount, tmpfs)، إدارة الـ volumes، أوضاع شبكات Docker (bridge, host, overlay)، إنشاء شبكات مخصصة والتواصل بين الحاويات. دليل شامل.
إعداد كلاستر Kubernetes أحادي ومتعدد العقد مع K3s، استخدام kubectl، إنشاء deployments وservices، إدارة التطبيقات مع Helm. دليل Kubernetes لبيئات VPS.
Kubernetes هو المعيار الصناعي لتنسيق الحاويات. لكن تثبيت Kubernetes الكامل قد يكون مكثفاً في استهلاك الموارد ومعقداً. K3s هو توزيعة Kubernetes خفيفة من Rancher — تقدم جميع ميزات Kubernetes في ملف ثنائي واحد وتعمل بشكل ممتاز في البيئات محدودة الموارد مثل VPS.
| الميزة | Kubernetes الكامل | K3s |
|---|---|---|
| حجم الملف الثنائي | ~500MB+ | ~100MB |
| الحد الأدنى من RAM | 2GB+ | 512MB |
| وقت التثبيت | 30-60 دقيقة | 5 دقائق |
| التبعيات | كثيرة | ضئيلة |
| توافق Kubernetes | كامل | كامل |
| الاستخدام في الإنتاج | نعم | نعم |
K3s متوافق تماماً مع Kubernetes API. kubectl و Helm وأدوات Kubernetes الأخرى تعمل بسلاسة مع K3s. مثالي للبيئات الإنتاجية الصغيرة والمتوسطة.
# الحد الأدنى من المتطلبات
# CPU: نواة واحدة
# RAM: 512MB (موصى به: 1GB+)
# Disk: 5GB
# OS: Ubuntu 20.04+, Debian 11+, CentOS 8+
# تحديث النظام
apt update && apt upgrade -y
# تثبيت الأدوات المطلوبة
apt install -y curl wget
# تثبيت K3s (وضع الخادم)
curl -sfL https://get.k3s.io | sh -
# التحقق من حالة الخدمة بعد التثبيت
systemctl status k3s
# التحقق من حالة الكلاستر
kubectl get nodes
# عرض جميع الـ pods
kubectl get pods -A
# نسخ kubeconfig لـ kubectl
mkdir -p ~/.kube
cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
chmod 600 ~/.kube/config
# تعيين متغير البيئة KUBECONFIG
export KUBECONFIG=~/.kube/config
echo 'export KUBECONFIG=~/.kube/config' >> ~/.bashrc
# عرض معلومات الكلاستر
kubectl cluster-info
# تثبيت العقدة الرئيسية وحفظ التوكن
curl -sfL https://get.k3s.io | sh -
# الحصول على توكن العقدة (مطلوب للعقد العاملة)
cat /var/lib/rancher/k3s/server/node-token
# ربط العقدة العاملة بالعقدة الرئيسية
curl -sfL https://get.k3s.io | K3S_URL=https://MASTER_IP:6443 K3S_TOKEN=NODE_TOKEN sh -
# التحقق على العقدة الرئيسية من انضمام العقدة العاملة
kubectl get nodes
# عرض العقد
kubectl get nodes
kubectl get nodes -o wide
# عرض الـ pods
kubectl get pods
kubectl get pods -n kube-system
kubectl get pods -A
# عرض الـ deployments
kubectl get deployments
# عرض الـ services
kubectl get services
# عرض تفاصيل المورد
kubectl describe pod POD_NAME
kubectl describe node NODE_NAME
# عرض سجلات الـ pod
kubectl logs POD_NAME
kubectl logs -f POD_NAME
# تنفيذ أمر داخل الـ pod
kubectl exec -it POD_NAME -- /bin/bash
# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
# تطبيق الـ deployment
kubectl apply -f nginx-deployment.yaml
# التحقق من حالة الـ deployment
kubectl get deployments
kubectl rollout status deployment/nginx-deployment
# nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
type: NodePort
kubectl apply -f nginx-service.yaml
kubectl get services
# الوصول: http://SERVER_IP:30080
# تثبيت Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# إضافة مستودع Bitnami
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# تثبيت WordPress
helm install my-wordpress bitnami/wordpress \
--set wordpressUsername=admin \
--set wordpressPassword=StrongPass123! \
--set service.type=NodePort
# عرض الـ charts المثبتة
helm list
# إزالة الـ chart
helm uninstall my-wordpress
# تحديث K3s
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.28.0+k3s1 sh -
# إدارة خدمة K3s
systemctl stop k3s
systemctl start k3s
systemctl restart k3s
# عرض سجلات K3s
journalctl -u k3s -f
# إلغاء تثبيت K3s
/usr/local/bin/k3s-uninstall.sh
يوفر K3s كامل قوة Kubernetes مع الحد الأدنى من استهلاك الموارد. إنه الحل المثالي لتنسيق الحاويات على مستوى الإنتاج في بيئات VPS. مع K3s على خوادم REXE يمكنك توسيع تطبيقاتك بسهولة وضمان التوفر العالي وتطبيق ممارسات DevOps الحديثة.
K3s توزيعة خفيفة متوافقة تماماً مع Kubernetes API. الفروق: K3s ملف ثنائي واحد (~100MB) بينما يتطلب Kubernetes الكامل مكونات متعددة. K3s يمكنه استخدام SQLite (بدلاً من etcd)، يستهلك ذاكرة أقل (512MB مقابل 2GB+) ويُثبَّت بشكل أسرع بكثير. كلاهما مناسب للاستخدام في الإنتاج.
تحقق أولاً من الأحداث بـ kubectl describe pod POD_NAME. المشاكل الشائعة: 1) موارد غير كافية (تحقق بـ kubectl describe node)، 2) خطأ في سحب الصورة (اختبر بـ docker pull)، 3) PVC لا يمكن ربطه (تحقق بـ kubectl get pvc)، 4) ConfigMap/Secret مفقود. تحقق أيضاً من سجلات التطبيق بـ kubectl logs POD_NAME.
ثلاث طرق: 1) NodePort Service: يفتح منفذاً بين 30000-32767، الوصول عبر IP:PORT مباشرة. 2) LoadBalancer Service: يعمل مع Klipper LB في K3s. 3) Ingress Controller: يوفر وصولاً قائماً على النطاق لتطبيقات متعددة عبر IP واحد (موصى به). Traefik مدمج مع K3s افتراضياً.
اعرض القيم الافتراضية بـ helm show values CHART_NAME. أنشئ ملف values.yaml للتخصيص واستخدمه مع helm install -f values.yaml. بديلاً يمكن تمرير قيم فردية بـ --set key=value. استخدم helm upgrade لتحديث تثبيت موجود.
تحقق من: 1) المنفذ 6443 على العقدة الرئيسية قابل للوصول من العقدة العاملة (telnet MASTER_IP 6443)، 2) NODE_TOKEN صحيح (cat /var/lib/rancher/k3s/server/node-token)، 3) المنفذ 6443 مفتوح في جدار الحماية، 4) تحقق من سجلات خدمة k3s-agent على العقدة العاملة (journalctl -u k3s-agent -f).
أنواع Docker volume (named, bind mount, tmpfs)، إدارة الـ volumes، أوضاع شبكات Docker (bridge, host, overlay)، إنشاء شبكات مخصصة والتواصل بين الحاويات. دليل شامل.
مشغلات سجلات Docker، أمر docker logs، سجلات pods في Kubernetes، جمع السجلات المركزي (Loki, ELK Stack)، تدوير السجلات وأفضل ممارسات إدارة السجلات في بيئة الإنتاج.
أفضل ممارسات أمان Docker: مستخدم غير root، نظام ملفات للقراءة فقط، ملفات seccomp، فحص الصور، أمان Docker socket، عزل الشبكة وإدارة الأسرار.