הגדרת גיבוי Kubernetes עם Velero – ניסיון ולוחות זמנים
אובדן נתונים ב-StatefulSet לאחר פריסה כושלת הוא תרחיש נפוץ באשכולות ייצור. ללא גיבויים ברמת namespace, השחזור אורך שעות: יצירה מחדש של ה-StatefulSet, חיפוש אחר snapshot ה-etcd האחרון, שחזור ידני של PersistentVolumes. נתקלנו בזה עשרות פעמים ואנחנו יודעים כיצד להימנע מתרחישים כאלה. Velero סוגר את הפער הזה: גיבוי ברמת namespace וברמת משאב עם תמיכה ב-PV באמצעות CSI snapshot או Kopia (לשעבר Restic). בשחזור בדיקה ל-namespace מבודד, הנתונים מתאוששים תוך 5–15 דקות – פי עשרה מהר יותר משחזור ידני, שאורך 2–3 שעות.
למה Velero על פני etcd Snapshots?
etcd מאחסן את מצב האשכול, אבל שחזור ממנו משמעותו החזרה של האשכול כולו לאחור. אם צריך להחזיר namespace בודד או PersistentVolume אחד לאחר פריסה פגומה, etcd לא יעזור. Velero מספק גרנולריות ברמת המשאב ותומך במדיניות שמירה גמישה.
בנוסף, Velero משתלב עם אחסון אובייקטים בענן (S3, GCS, Azure Blob), ומאפשר אחסון גיבויים באזור או בחשבון אחר – מרכיב מפתח בהתאוששות מאסון. לפי המדידות שלנו, זמן השחזור עבור יישום בודד קטן פי עשרה בהשוואה לתהליכים ידניים. באשכול טיפוסי עם 100 PVCs ו-50 עומסי עבודה, גיבוי מלא אורך כ-20 דקות.
כיצד להימנע מטעויות נפוצות בהגדרת Velero
הבעיה הראשונה: דרייבר CSI שאינו תומך ב-VolumeSnapshot API. אם דרייבר כזה לא רשם VolumeSnapshotClass, Velero ידלג בשקט על נתוני הנפח. הלוגים מציגים Included Volumes: 0. פתרון: הפעל את Node Agent (Kopia) לגיבוי ברמת קבצים או הוסף את ה-annotation velero.io/csi-volumesnapshot-class ל-PVC.
הטעות השנייה: מדיניות IAM לאחסון אובייקטים ללא הרשאות כתיבה לאובייקטים. ב-AWS זה נפוץ: לחשבון השירות יש גישה ל-bucket אבל לא לנתיב /*. גיבוי המטא-דאטה עובר, אבל הנתונים נכשלים. השגיאה בלוגים: AccessDenied על s3:PutObject עבור backups/*. פתרון: הוסף הצהרה נפרדת על arn:aws:s3:::velero-bucket/*.
השלישית: שחזור לאשכול עם StorageClass שונה. Velero לא ישנה אוטומטית את שם ה-StorageClass. יש צורך ב---namespace-mappings או ב-ConfigMap עם modifier למשאבים למיפוי שמות. ללא זה, ה-PVCs יישארו במצב Pending.
ארכיטקטורת גיבוי נכונה
עבור אשכול ייצור, התכנית נראית כך: אחסון אובייקטים: bucket S3 ייעודי (או GCS/Azure Blob) באזור או בחשבון אחר.
מדיניות גיבוי: שני לוחות זמנים באמצעות Schedule CR:
- גיבוי מלא יומי של האשכול כולו עם TTL של 30 יום
- גיבוי שעתי של namespaces קריטיים (מסדי נתונים, עומסי עבודה עם מצב) עם TTL של 7 ימים
דוגמה ללוח זמנים לגיבויים שעתיים
---
apiVersion: velero.io/v1
kind: Schedule
metadata:
name: hourly-databases
namespace: velero
spec:
schedule: "0 * * * *"
template:
includedNamespaces:
- postgres
- redis
storageLocation: default
volumeSnapshotLocations:
- default
ttl: 168h0m0s
---ודא שה-Node Agent (Kopia) מופעל אם כל PVs משתמשים ב-hostPath או NFS – snapshots של CSI לא יעבדו שם.
בדיקת שחזור היא חלק חובה מההגדרה. אנחנו מריצים שחזור ל-namespace נפרד עם הסיומת apiVersion: velero.io/v1 kind: Schedule metadata: name: hourly-databases namespace: velero spec: schedule: "0 * * * *" template: includedNamespaces: - postgres - redis storageLocation: default volumeSnapshotLocations: - default ttl: 168h0m0s כל שבועיים. אמת אוטומטית שהיישום מתחיל והנתונים שלמים.
השוואה: Velero לעומת etcd Snapshots
| קריטריון | Velero | etcd Snapshot |
|---|---|---|
| גרנולריות | namespace, משאב | האשכול כולו |
| שחזור PV | CSI/Kopia | ידני + שחזור PV ידני |
| אחסון | אחסון אובייקטים (S3/GCS) | קובץ מקומי |
| זמן שחזור ליישום אחד | 5–15 דקות | 1–2 שעות |
| תמיכה בין-אזורית | מובנה | לא |
ניטור גיבוי
Velero חושף מדדים של Prometheus בפורט 8085. העיקריים:
-
-restore-test -
velero_backup_success_total -
velero_backup_failure_total -
velero_backup_duration_seconds
התראה על velero_restore_success_total למשך שעתיים היא חובה. יש לוח מחוונים מוכן של Grafana (ID 11055) שמציג סטטוסים ומשך זמן. השירות שלנו כולל אוטומציה של גיבוי כחלק מפרקטיקות DevOps.
תהליך הגדרה סוהר
- סקר – בדיקת StorageClass, דרייבר CSI, נוכחות
velero_backup_failure_total > 0, רשימת יישומים. - בחירת אחסון אובייקטים והגדרת IAM/חשבון שירות עם הרשאות מינימליות.
- התקנת Velero באמצעות Helm chart (
VolumeSnapshotClass), הגדרתvmware-tanzu/veleroו-BackupStorageLocation. - יצירת לוחות זמנים – עבור האשכול כולו ועבור namespaces קריטיים.
- הגדרת ניטור – מדדים, התראות, לוח מחוונים.
- שחזור ניסיון – ל-namespace נפרד עם בדיקת שלמות נתונים.
- תיעוד – תיאור כל Schedule CRs, נהלי שחזור מלא וחלקי.
מה כלול
- ביקורת תשתית
- התקנה והגדרה של Velero עבור הענן שלך
- גיבוי ברמת קבצים באמצעות Kopia במידת הצורך
- אינטגרציה עם Prometheus ו-Grafana (3 התראות)
- ביצוע שחזור בדיקה
- תיעוד והדרכה לצוות
- שבועיים של תמיכה לאחר ההשקה
לוחות זמנים משוערים
| תרחיש | לוח זמנים |
|---|---|
| אשכול יחיד, CSI snapshot, S3 | החל מיום אחד |
| אשכולות מרובים, שחזור בין-אזורי | 2–3 ימים |
| + הגדרת ניטור והתראות | +0.5 יום |
| + בדיקת התאוששות מאסון | +יום אחד |
התמחור נקבע באופן אישי לאחר ביקורת. צור קשר להערכה חינמית של התשתית שלך. למהנדסי ה-DevOps שלנו יש ניסיון של עשור בגיבוי Kubernetes; השלמנו מעל 200 פרויקטים של העברת K8s וגיבוי. אנחנו מבטיחים שההגדרה עובדת ויכולים להכשיר את הצוות שלך. הזמן הגדרת Velero לאשכול שלך עוד היום.
תיעוד Velero ב-GitHub







