בדף הזה מוסבר איך להשתמש ב-bmctl כדי לגבות ולשחזר אשכולות שנוצרו באמצעות Google Distributed Cloud (תוכנה בלבד) ב-bare metal. ההוראות האלה רלוונטיות לכל סוגי האשכולות.
תהליך הגיבוי והשחזור של bmctl לא כולל נפחים מתמשכים. כרכים שנוצרו על ידי מנהל הקצאות (provisioner) הכרכים המקומי (LVP) לא ישתנו.
- דרישות לפתיחת בקשת תמיכה.
- כלים שיעזרו לכם לפתור בעיות, כמו הגדרת הסביבה, היומנים והמדדים.
- רכיבים נתמכים.
גיבוי אשכול
הפקודה bmctl backup cluster מוסיפה את פרטי האשכול ממאגר ה-etcd ואת אישורי ה-PKI לאשכול שצוין לקובץ tar. מאגר 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 פגומים או ש-etcd Pod נמצא בלולאת קריסה.
קובץ ה-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 חדש עבור האשכול ששוחזר.
כשהשחזור יסתיים, תצטרכו לפעול לפי השלבים הבאים כדי לוודא שהוא הצליח:
מריצים את הפקודות הבאות כדי לוודא שהצומת מוכן ושהפודים של המערכת פועלים עם קובץ ה-kubeconfig שנוצר:
יש שני סוגים של פודים של etcd:
-
etcd-HOST_NAME, שמתאים לקפסולה הראשית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-events:kubectl 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.
אם נגמר הזיכרון במהלך גיבוי או שחזור
יכול להיות שתקבלו הודעות שגיאה במהלך תהליך הגיבוי או השחזור, שלא ברור מהן מה הבעיה או מה צריך לעשות כדי לפתור אותה. אם אין הרבה זיכרון RAM בתחנת העבודה שבה מריצים את הפקודה bmctl, יכול להיות שלא יהיה מספיק זיכרון כדי לבצע את תהליך הגיבוי או השחזור.
ב-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.