בדף הזה מוסבר איך להשתמש ב-bmctl כדי לגבות ולשחזר אשכולות שנוצרו באמצעות Google Distributed Cloud (תוכנה בלבד) על מתכת חשופה. ההוראות האלה רלוונטיות לכל סוגי האשכולות.
מה מגובה ומה לא מגובה
תהליך הגיבוי והשחזור של bmctl נועד להגן על מצב מישור הבקרה.
המערכת מגבה את האובייקטים הבאים:
- מאגר etcd. כל משאבי Kubernetes ואובייקטים בהתאמה אישית שמגדירים את התצורה של האשכול ואת המצב שנבחר (לדוגמה, מפרטים של Pod, פריסות ו-ConfigMaps, Secrets).
- אישורי PKI. אישורים שמשמשים לתקשורת מאובטחת בתוך האשכול.
- קובצי תצורה ומניפסטים של צמתים. הגדרות שקשורות לצמתי האשכול.
המערכת לא מגבה את האובייקטים הבאים:
- מצב בזמן ריצה של קובצי pod ושל קונטיינרים. התהליכים שפועלים בפועל והמצב בזיכרון של האפליקציות בכל הצמתים (מישור הנתונים).
- אחסון נפח מתמשך. נתונים שמאוחסנים בנפחים מתמשכים לא נכללים. כל הנפחים שנוצרו על ידי ספק נפח מקומי (LVP) נשארים ללא שינוי.
מכיוון שמצב זמן הריצה הפעיל לא מגובה, אחרי שחזור, Kubernetes יוצר מחדש את הפודים על סמך המפרטים ב-etcd. עם זאת, המצב המדויק בזיכרון של האפליקציות ברגע הגיבוי אובד.
לקבלת עזרה נוספת, אפשר לפנות אל Cloud Customer Care. אפשר גם לעיין במאמר קבלת תמיכה לקבלת מידע נוסף על מקורות מידע לתמיכה, כולל המקורות הבאים:- דרישות לפתיחת בקשת תמיכה.
- כלים שיעזרו לכם לפתור בעיות, כמו הגדרת הסביבה, היומנים והמדדים.
- רכיבים נתמכים.
גיבוי אשכול
הפקודה bmctl backup cluster מוסיפה לקובץ tar את פרטי האשכול ממאגר ה-etcd ואת אישורי ה-PKI של האשכול שצוין. מאגר ה-etcd הוא מאגר הגיבוי של Kubernetes לכל נתוני האשכול, והוא מכיל את כל אובייקטי Kubernetes ואת האובייקטים המותאמים אישית שנדרשים לניהול מצב האשכול. אישורי ה-PKI משמשים לאימות באמצעות TLS. הגיבוי של הנתונים האלה מתבצע ממישור הבקרה של האשכול או מאחד ממישורי הבקרה של פריסת זמינות גבוהה (HA).
קובץ ה-tar של הגיבוי מכיל פרטי כניסה רגישים, כולל המפתחות של חשבון השירות ומפתח ה-SSH. אחסון קובצי הגיבוי במיקום מאובטח. כדי למנוע חשיפה לא מכוונת של קבצים, תהליך הגיבוי של Google Distributed Cloud משתמש רק בקבצים בזיכרון.
כדאי לגבות את האשכולות באופן קבוע כדי לוודא שנתוני התמונות העדכניים יחסית. כדאי להתאים את קצב הגיבויים בהתאם לתדירות השינויים המשמעותיים באשכולות.
הגרסה של bmctl שבה משתמשים לגיבוי אשכול חייבת להיות זהה לגרסה של האשכול המנהל.
כדי לגבות אשכול:
מוודאים שהאשכול פועל בצורה תקינה, עם אישורים תקינים וקישוריות SSH לכל הצמתים.
מטרת תהליך הגיבוי היא לתעד את האשכול במצב תקין ידוע, כדי שתוכלו לשחזר את הפעולה אם יתרחש כשל קטסטרופלי.
כדי לבדוק את האשכול, משתמשים בפקודה הבאה:
bmctl check cluster -c CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIGמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול שמתכננים לגבות. -
ADMIN_KUBECONFIG: הנתיב לקובץ kubeconfig של אשכול האדמין.
-
מריצים את הפקודה הבאה כדי לוודא שאשכול היעד לא נמצא במצב של סנכרון:
kubectl describe cluster CLUSTER_NAME -n CLUSTER_NAMESPACE --kubeconfig ADMIN_KUBECONFIGמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול שרוצים לגבות. -
CLUSTER_NAMESPACE: מרחב השמות של האשכול. כברירת מחדל, מרחבי השמות של האשכולות ב-Google Distributed Cloud הם השם של האשכול עם הקידומתcluster-. לדוגמה, אם שם האשכול הואtest, שם מרחב השמות יהיהcluster-test. -
ADMIN_KUBECONFIG: הנתיב לקובץ kubeconfig של אשכול האדמין.
-
בודקים את הקטע
Statusבפלט פקודה כדי לראות אם ישConditionsמהסוגReconciling.כפי שמוצג בדוגמה הבאה, סטטוס של
FalseעבורConditionsאלה מציין שהאשכול יציב ומוכן לגיבוי.... Status: ... Cluster State: Running ... Control Plane Node Pool Status: ... Conditions: Last Transition Time: 2023-11-03T16:37:15Z Observed Generation: 1 Reason: ReconciliationCompleted Status: False Type: Reconciling ...מריצים את הפקודה הבאה כדי לגבות את האשכול:
bmctl backup cluster -c CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIGמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול שרוצים לגבות. -
ADMIN_KUBECONFIG: הנתיב לקובץ kubeconfig של אשכול האדמין.
כברירת מחדל, קובץ ה-tar של הגיבוי נשמר בספריית סביבת העבודה (
bmctl-workspaceכברירת מחדל) בתחנת העבודה של האדמין. קובץ ה-tar נקראCLUSTER_NAME_backup_TIMESTAMP.tar.gz, כאשרCLUSTER_NAMEהוא שם האשכול שמגבים ו-TIMESTAMPהוא התאריך והשעה שבהם הגיבוי בוצע. לדוגמה, אם שם האשכול הואtestuser, קובץ הגיבוי נקראtestuser_backup_2006-01-02T150405Z0700.tar.gz.כדי לציין שם ומיקום אחרים לקובץ הגיבוי, משתמשים בדגל
--backup-file.-
התוקף של קובץ הגיבוי פג אחרי שנה, ותהליך השחזור של האשכול לא פועל עם קובצי גיבוי שתוקפם פג.
שחזור אשכול
שחזור אשכול מגיבוי הוא מוצא אחרון, וצריך להשתמש בו רק אם האשכול נכשל בצורה קטסטרופלית ואין דרך אחרת להחזיר אותו לשירות. לדוגמה, אם נתוני etcd פגומים או אם ה-Pod של etcd נמצא בלולאת קריסה.
קובץ ה-tar של הגיבוי מכיל פרטי כניסה רגישים, כולל מפתחות של חשבון השירות ומפתח ה-SSH. כדי למנוע חשיפה לא מכוונת של הקובץ, תהליך השחזור של Google Distributed Cloud משתמש רק בקבצים בזיכרון.
הגרסה של bmctl שבה משתמשים כדי לשחזר אשכול צריכה להיות זהה לגרסה של האשכול המנהל.
כדי לשחזר אשכול:
צריך לוודא שכל מכונות הצמתים שהיו זמינות לאשכול בזמן הגיבוי פועלות בצורה תקינה ושאפשר להגיע אליהן.
מוודאים שחיבור ה-SSH בין הצמתים פועל עם מפתחות ה-SSH שבהם נעשה שימוש בזמן הגיבוי.
מפתחות ה-SSH האלה משוחזרים כחלק מתהליך השחזור.
מוודאים שמפתחות חשבון השירות שבהם נעשה שימוש בזמן הגיבוי עדיין פעילים.
מפתחות חשבון השירות האלה מוחזרים לאשכול המשוחזר.
כדי לשחזר אשכול אדמין, אשכול היברידי או אשכול עצמאי, מריצים את הפקודה הבאה:
bmctl restore cluster -c CLUSTER_NAME --backup-file BACKUP_FILEמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול שמשחזרים. -
BACKUP_FILE: הנתיב והשם של קובץ הגיבוי שבו אתם משתמשים.
-
כדי לשחזר אשכול משתמשים, מריצים את הפקודה הבאה:
bmctl restore cluster -c CLUSTER_NAME --backup-file BACKUP_FILE \ --kubeconfig ADMIN_KUBECONFIGמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול שמשחזרים. -
BACKUP_FILE: הנתיב והשם של קובץ הגיבוי שבו אתם משתמשים. -
ADMIN_KUBECONFIG: הנתיב לקובץ kubeconfig של אשכול האדמין.
-
בסיום תהליך השחזור, נוצר קובץ kubeconfig חדש עבור האשכול ששוחזר.
כשהשחזור יסתיים, תצטרכו לבצע את השלבים הבאים כדי לוודא שהוא הצליח:
מריצים את הפקודות הבאות כדי לוודא שהצומת מוכן ושה-pods של המערכת פועלים עם קובץ ה-kubeconfig שנוצר:
יש שני סוגים של pods של etcd:
-
etcd-HOST_NAME, שמתאים ל-Pod הראשיetcd -
etcd-events-HOST_NAME, שמתאים ל-Podetcd-events
kubectl get pods -n kube-system --kubeconfig GENERATED_KUBECONFIG kubectl get nodes --kubeconfig GENERATED_KUBECONFIG-
כדי לוודא שה-etcd תקין, מריצים את הפקודה הבאה לכל פוד etcd:
kubectl exec ETCD_POD_NAME -n kube-system \ --kubeconfig GENERATED_KUBECONFIG \ -- /bin/sh -c 'ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt --key=/etc/kubernetes/pki/etcd/peer.key \ --cert=/etc/kubernetes/pki/etcd/peer.crt endpoint health'אם חבר etcd תקין, התגובה אמורה להיראות כך:
https://127.0.0.1:2379 is healthy: successfully committed proposal: took = 11.514177msלכל Pod
etcd-events, מריצים את הפקודה הבאה כדי לוודא שהוא תקין:etcd-eventskubectl exec ETCD_EVENTS_POD_NAME -n kube-system \ --kubeconfig GENERATED_KUBECONFIG \ -- /bin/sh -c 'ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2382 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt --key=/etc/kubernetes/pki/etcd/peer.key \ --cert=/etc/kubernetes/pki/etcd/peer.crt endpoint health'אם חבר etcd-events תקין, התגובה אמורה להיראות כך:
https://127.0.0.1:2382 is healthy: successfully committed proposal: took = 14.308148ms
פתרון בעיות
אם נתקלתם בבעיות בתהליך הגיבוי או השחזור, יכול להיות שהקטעים הבאים יעזרו לכם לפתור את הבעיה.
לקבלת עזרה נוספת, אפשר לפנות אל התמיכה של Google.
אם נגמר הזיכרון במהלך גיבוי או שחזור
יכול להיות שתקבלו הודעות שגיאה במהלך תהליך הגיבוי או השחזור, שלא ברור מהן מה הבעיה או מה צריך לעשות. אם תחנת העבודה שבה מריצים את הפקודה bmctl לא כוללת הרבה זיכרון RAM, יכול להיות שלא יהיה מספיק זיכרון כדי לבצע את תהליך הגיבוי או השחזור.
ב-Google Distributed Cloud מגרסה 1.13 ואילך אפשר להשתמש בפרמטר --use-disk בפקודת הגיבוי. כדי לשמור על הרשאות הקובץ, הפרמטר הזה משנה את ההרשאות של הקבצים, ולכן המשתמש שמריץ את הפקודה צריך להיות משתמש root (או להשתמש ב-sudo).
הרשאות חסרות לקבצים במהלך השחזור
אחרי משימת שחזור מוצלחת, יכול להיות שמחיקת bootstrap תיכשל עם הודעת שגיאה שדומה לדוגמה הבאה:
Error: failed to restore node config files: sftp: "Failure" (SSH_FX_FAILURE)
השגיאה הזו יכולה להצביע על כך שאין הרשאת כתיבה לחלק מהספריות שנדרשות לשחזור.
ב-Google Distributed Cloud מגרסה 1.14 ואילך, הודעות השגיאה לגבי הספריות שצריך להעניק להן הרשאות כתיבה ברורות יותר. צריך לוודא שיש הרשאות כתיבה בספריות שמופיעות בהודעת השגיאה, ולעדכן את ההרשאות בספריות לפי הצורך.
רענון של מפתח SSH אחרי גיבוי גורם לשיבוש בתהליך השחזור
יכול להיות שפעולות שקשורות ל-SSH במהלך תהליך השחזור ייכשלו אם מפתח ה-SSH יתעדכן אחרי הגיבוי. במקרה כזה, מפתח ה-SSH החדש לא יהיה תקף לתהליך השחזור.
כדי לפתור את הבעיה, אפשר להוסיף באופן זמני את מפתח ה-SSH המקורי, ואז לבצע את השחזור. אחרי שתהליך השחזור יסתיים, תוכלו לסובב את מפתח ה-SSH.