مستوى المقال: متوسط — بنفترض إنك تعرف Kubernetes basics (Pods, Deployments, PV/PVC) وعملت kubectl apply قبل كده. لو لسه مبتدئ تماماً، ابدأ بمقال GitOps مع ArgoCD الأول.
لو cluster الإنتاج بتاعك عليه 24 microservice و18 PersistentVolume وحصلت كارثة etcd، رجوعك للحياة بدون backup حقيقي هياخد يومين على الأقل. Velero v1.14 بيعمل snapshot كامل للـ namespace في 9 دقايق ويرجّعه بأمر واحد على cluster جديد.
Velero: نسخ احتياطي لـ Kubernetes cluster واسترجاعه فعلياً في دقايق
المشكلة باختصار
الـ cluster مش بس YAML files مرفوعة على Git. فيه data جوّا PostgreSQL، تنزيلات على MinIO، Redis dumps، secrets اتعملت يدوياً، وعشرات الـ ConfigMaps اللي اتعدّلت ومحدش عارف فين النسخة الأصلية. لو حد عمل kubectl delete namespace production بالغلط (حصل فعلاً في GitLab 2017)، الـ git repo بتاعك مش هيرجّعلك الـ data.
الـ managed snapshots بتاعت GKE/EKS بتعمل snapshot للـ disks، لكن مش بتعرف ربطها بالـ Kubernetes objects. يعني هترجّع 18 disk مش عارف أي PVC ينتمي لمين. ده اللي Velero بيحلّه.
تخيّل المشهد ده (للمبتدئ)
تخيّل إنك بتشتغل أمين مكتبة فيها 24 رف كتب مرتبين بدقة. كل رف فيه كتب مرتبة بترتيب معين، وعلى بعض الكتب مذكرات يدوية كتبها القراء. لو حصل حريق، إنت محتاج أكتر من إنك "تعرف فيه 24 رف وأنواع الكتب". إنت محتاج صورة كاملة: ترتيب الكتب، المذكرات، حتى المكان الفاضي بين كل كتاب. الـ git repo بتاع Kubernetes بيقولك "فيه 24 deployment ومن النوع ده"، لكن مش بيسجل المذكرات (الـ ConfigMaps المُعدَّلة يدوياً) ولا محتوى الكتب (الـ PostgreSQL data جوّا الـ PVC). Velero هو الكاميرا اللي بتصوّر الرف بكل تفاصيله.
بنفس الفكرة، لما الحريق يحصل، إنت مش بتفتح الـ git وتقول "ابني المكتبة من تاني". إنت بتقول "ارجع المكتبة بالظبط زي ما كانت يوم الجمعة 8 مايو الساعة 2 الصبح".
التعريف العلمي
Velero (سابقاً Heptio Ark) أداة open-source من VMware Tanzu، انضمت لـ CNCF Sandbox في 2020، بتعمل اتنين عمليات في نفس الوقت:
- Resource backup: بتقرأ كل الـ Kubernetes API objects في namespace محدد (Deployments, Services, ConfigMaps, Secrets, CRDs, ServiceAccounts, RoleBindings) وبتحفظهم كـ tarball على object storage (S3, GCS, Azure Blob, MinIO).
- Volume snapshot: بتعمل snapshot للـ PersistentVolumes عبر CSI VolumeSnapshot APIs (الطريقة الحديثة في Kubernetes 1.20+) أو File System Backup عبر Kopia/Restic للـ storage مش بيدعم native snapshots.
الـ control loop اللي بيتحرك ده اسمه BackupController وبيتفاعل مع BackupStorageLocation CRD. وقت الـ restore، Velero بيعمل reverse: يقرأ الـ tarball، يعيد إنشاء الـ resources بالترتيب الصح (Namespaces ← CRDs ← CustomResources ← PVs ← PVCs ← Pods)، ويربط الـ volumes بالـ snapshots.