تثبيت Kubernetes مع K3s: تنسيق الحاويات الخفيف
إعداد كلاستر Kubernetes أحادي ومتعدد العقد مع K3s، استخدام kubectl، إنشاء deployments وservices، إدارة التطبيقات مع Helm. دليل Kubernetes لبيئات VPS.
النسخ الاحتياطي لـ Docker volume، حالة الحاوية، Kubernetes persistent volume، النسخ الاحتياطي لـ K8s مع Velero، سكريبتات النسخ الاحتياطي التلقائي وتخطيط التعافي من الكوارث.
يتطلب النسخ الاحتياطي لبيئات الحاويات نهجاً مختلفاً عن النسخ الاحتياطي التقليدي للخوادم. نظراً لأن الحاويات مؤقتة، فإن ما يحتاج إلى نسخ احتياطي ليس الحاوية نفسها بل البيانات الموجودة فيها. يتناول هذا الدليل استراتيجيات نسخ احتياطي شاملة لبيئات Docker و Kubernetes.
| الاستراتيجية | مناسبة لـ | الأداة |
|---|---|---|
| نسخ احتياطي للـ volume | قاعدة البيانات، تخزين الملفات | tar, rsync |
| نسخ احتياطي للصورة | حالة التطبيق | docker save |
| لقطة | استرداد سريع | LVM, ZFS |
| نسخ احتياطي K8s | الكلاستر بأكمله | Velero |
| نسخ احتياطي بعيد | التعافي من الكوارث | Restic, Rclone |
# نسخ احتياطي للـ volume في أرشيف tar
docker run --rm \
-v VOLUME_NAME:/data \
-v $(pwd):/backup \
alpine tar czf /backup/volume-backup-$(date +%Y%m%d).tar.gz -C /data .
# مثال: نسخ احتياطي لـ MySQL volume
docker run --rm \
-v mysql-data:/data \
-v /backups:/backup \
alpine tar czf /backup/mysql-$(date +%Y%m%d-%H%M%S).tar.gz -C /data .
# استعادة الـ volume
docker run --rm \
-v mysql-data:/data \
-v /backups:/backup \
alpine tar xzf /backup/mysql-20240101-120000.tar.gz -C /data
# MySQL dump (أثناء تشغيل الحاوية)
docker exec mysql-db mysqldump \
-u root -pStrongPass123! \
--all-databases \
--single-transaction \
> /backups/mysql-dump-$(date +%Y%m%d).sql
# PostgreSQL dump
docker exec postgres-db pg_dumpall \
-U postgres \
> /backups/postgres-dump-$(date +%Y%m%d).sql
#!/bin/bash
# /usr/local/bin/docker-backup.sh
BACKUP_DIR="/backups/docker"
DATE=$(date +%Y%m%d-%H%M%S)
RETENTION_DAYS=7
mkdir -p "$BACKUP_DIR"
# نسخ احتياطي لجميع الـ volumes
for volume in $(docker volume ls -q); do
echo "نسخ احتياطي: $volume"
docker run --rm \
-v "$volume":/data \
-v "$BACKUP_DIR":/backup \
alpine tar czf "/backup/${volume}-${DATE}.tar.gz" -C /data . 2>/dev/null
done
# نسخ احتياطي لـ MySQL
if docker ps --format '{{.Names}}' | grep -q mysql; then
docker exec mysql-db mysqldump \
-u root -pStrongPass123! \
--all-databases \
--single-transaction \
> "$BACKUP_DIR/mysql-${DATE}.sql"
fi
# حذف النسخ الاحتياطية القديمة
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -name "*.sql" -mtime +$RETENTION_DAYS -delete
echo "اكتمل النسخ الاحتياطي: $DATE"
chmod +x /usr/local/bin/docker-backup.sh
# نسخ احتياطي يومي عبر cron
# 0 2 * * * /usr/local/bin/docker-backup.sh >> /var/log/docker-backup.log 2>&1
# تثبيت Restic
apt install -y restic
# تهيئة المستودع
restic init --repo /backups/restic-repo
# نسخ احتياطي للـ volume
restic backup /tmp/mysql-backup \
--repo /backups/restic-repo \
--password-file /etc/restic/password \
--tag mysql,docker
# عرض قائمة النسخ الاحتياطية
restic snapshots --repo /backups/restic-repo
# الاستعادة
restic restore SNAPSHOT_ID \
--repo /backups/restic-repo \
--target /tmp/restore
# تنظيف النسخ الاحتياطية القديمة
restic forget \
--repo /backups/restic-repo \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 3 \
--prune
# تثبيت Velero CLI
wget https://github.com/vmware-tanzu/velero/releases/download/v1.12.0/velero-v1.12.0-linux-amd64.tar.gz
tar xzf velero-v1.12.0-linux-amd64.tar.gz
mv velero-v1.12.0-linux-amd64/velero /usr/local/bin/
# نسخ احتياطي للكلاستر بأكمله
velero backup create full-backup --wait
# نسخ احتياطي لـ namespace محدد
velero backup create production-backup \
--include-namespaces production \
--wait
# عرض قائمة النسخ الاحتياطية
velero backup get
# الاستعادة من نسخة احتياطية
velero restore create --from-backup full-backup
# نسخ احتياطي يومي (الساعة 2 صباحاً)
velero schedule create daily-backup \
--schedule="0 2 * * *" \
--ttl 168h
# نسخ احتياطي أسبوعي كامل
velero schedule create weekly-backup \
--schedule="0 1 * * 0" \
--ttl 720h
#!/bin/bash
BACKUP_FILE="$1"
if tar tzf "$BACKUP_FILE" > /dev/null 2>&1; then
echo "ملف النسخ الاحتياطي صالح: $BACKUP_FILE"
else
echo "خطأ: ملف النسخ الاحتياطي تالف: $BACKUP_FILE"
exit 1
fi
docker volume create test-restore
docker run --rm \
-v test-restore:/data \
-v $(dirname $BACKUP_FILE):/backup \
alpine tar xzf "/backup/$(basename $BACKUP_FILE)" -C /data
echo "اختبار الاستعادة ناجح"
docker volume rm test-restore
يجب تشكيل استراتيجية النسخ الاحتياطي للحاويات وفقاً لمتطلبات عملك. قد يكفي النسخ الاحتياطي للـ volume مع cron للبيئات الصغيرة، بينما تتطلب كلاسترات Kubernetes الإنتاجية أدوات متخصصة مثل Velero. مع اختبارات النسخ الاحتياطي والاستعادة المنتظمة على خوادم REXE يمكنك الحفاظ على أمان بياناتك.
تُحدَّد تكرارية النسخ الاحتياطي بهدف RPO (Recovery Point Objective). نسخ احتياطي كل ساعة أو أكثر تكراراً لقواعد البيانات الحرجة، يومياً لبيانات التطبيق، أسبوعياً للمحتوى الثابت. زيادة تكرارية النسخ الاحتياطي تزيد مساحة القرص وحمل I/O — ضع هذا التوازن في الاعتبار.
لقواعد البيانات يُنصح بالنسخ الاحتياطي دون إيقاف: استخدم mysqldump --single-transaction لـ MySQL وpg_dump لـ PostgreSQL. لنسخ نظام الملفات احتياطياً قد يلزم إيقاف قصير لضمان الاتساق. للأنظمة الحرجة خذ النسخ الاحتياطية من read replica.
تحقق من حالة النسخة الاحتياطية بـ velero backup describe BACKUP_NAME. اختبر الاستعادة بانتظام في بيئة اختبار بـ velero restore create --from-backup BACKUP_NAME. يتحقق Velero أيضاً تلقائياً من سلامة النسخ الاحتياطية.
طبّق قاعدة 3-2-1: 3 نسخ، 2 وسائط مختلفة، موقع بعيد واحد. يُنصح بمزيج من القرص المحلي + تخزين S3 بعيد متوافق (MinIO, AWS S3, Backblaze B2). شفّر النسخ الاحتياطية (Restic يشفّر افتراضياً). تجنب تخزين النسخ الاحتياطية على نفس الخادم.
تحتاج نسخ شيئين احتياطياً: 1) ملفات docker-compose.yml و.env (يجب تخزينها في Git)، 2) بيانات الـ volumes (نسخ احتياطي بـ tar). لنسخ الـ stack بأكمله انسخ كل volume بشكل منفصل. للاستعادة شغّل الـ stack أولاً بـ docker-compose up ثم استعد بيانات الـ volumes.
إعداد كلاستر Kubernetes أحادي ومتعدد العقد مع K3s، استخدام kubectl، إنشاء deployments وservices، إدارة التطبيقات مع Helm. دليل Kubernetes لبيئات VPS.
أنواع Docker volume (named, bind mount, tmpfs)، إدارة الـ volumes، أوضاع شبكات Docker (bridge, host, overlay)، إنشاء شبكات مخصصة والتواصل بين الحاويات. دليل شامل.
مشغلات سجلات Docker، أمر docker logs، سجلات pods في Kubernetes، جمع السجلات المركزي (Loki, ELK Stack)، تدوير السجلات وأفضل ممارسات إدارة السجلات في بيئة الإنتاج.