בדף הזה מתוארות שגיאות שקשורות למערכת שאתם עשויים להיתקל בהן כשאתם משתמשים בגיבוי ל-GKE, דברים שכדאי לקחת בחשבון כשמגבים משאבים ושלבים לפתרון הבעיה.
שגיאה 100010108: הגיבוי של PersistentVolumeClaim נכשל – חסר CMEK של תוכנית גיבוי לדיסק מוצפן
השגיאה 100010108 מתרחשת כשיוצרים גיבויים של נפחים בהיקף אזורי, ונדרש CMEK של תוכנית הגיבוי כי אשכול GKE מפנה לדיסק מוצפן.
הסבר על השגיאה
כשיוצרים גיבויים של נפחים בהיקף אזורי, חובה להשתמש במפתח CMEK של תוכנית הגיבוי אם אשכול GKE מפנה לדיסק מוצפן כלשהו. זו דרישה מחמירה לגיבויים של נפח אחסון בהיקף אזורי. אם דיסק המקור מוצפן, אפשר ליצור תמונת מצב של הדיסק רק אם מספקים מפתח CMEK של תוכנית גיבוי. אם תוכנית הגיבוי שלכם לא כוללת את הגדרת ה-CMEK הזו, יצירת תמונת המצב תיכשל ותוצג הודעת שגיאה דומה לזו:
failed to create snapshot as disk "pvc-1" is encrypted with CMEK "projects/proj1/locations/us-east1/keyRings/keyring1/cryptoKeys/key1/cryptoKeyVersions/1", but no Backup Plan CMEK is provided. Please add CMEK to the Backup Plan.
שלבים לפתרון בעיות
- מזהים את הגדרת ה-CMEK החסרה: הודעת השגיאה מאשרת שה-PVC שמגבים מוצפן, אבל בהגדרות של תוכנית הגיבוי חסר מפתח הצפנה.
- הוספת מפתח CMEK לתוכנית הגיבוי: מעדכנים את הגדרות תוכנית הגיבוי כדי לכלול מפתח הצפנה בניהול הלקוח (CMEK). המפתח הזה ישמש להצפנת נתוני הגיבוי, כולל גיבויים של נפחים בהיקף אזורי.
- מוודאים שההרשאות מתאימות: בודקים שלסוכן השירות של Backup for GKE (
service-PROJECT_NUMBER@gcp-sa-gkebackup.s3ns-system.iam.gserviceaccount.com) מוקצה התפקידroles/cloudkms.cryptoKeyEncrypterDecrypterעבור ה-CMEK שנוסף. - בדיקה מחדש של פעולת הגיבוי: אחרי שמעדכנים את תוכנית הגיבוי עם CMEK ומעניקים הרשאות, מנסים שוב את פעולת הגיבוי.
שגיאה 100020102: מצב הרשאה מחמיר – הגיבוי של CRD נכשל – גרסת API לא נתמכת v1beta1
השגיאה 100020102 מתרחשת כשמנסים לגבות CustomResourceDefinition שהוחל במקור כגרסה apiextensions.k8s.io/v1beta1, אבל הגיבוי נכשל כי חסרה סכימה מבנית שנדרשת בגרסת apiextensions.k8s.io/v1 של ה-API. השגיאה הזו מובילה להודעת השגיאה הבאה:
Strict permissive mode - Failed to backup CRD - Unsupported v1beta1 API Version.
השגיאה הזו מתרחשת כי גרסת apiextensions.k8s.io/v1 API הוסרה ב-Google Kubernetes Engine גרסה 1.22. מידע נוסף על הסרת ה-API ב-GKE גרסה 1.22 זמין במאמר הסרות של API ב-GKE v1.22.
התנהגות של פעולת גיבוי במצב לא מתירני
במצב לא מתירני, או בתוכנית גיבוי מחמירה, פעולת הגיבוי נכשלת אם היא נתקלת במשאב שלא ניתן לגבות, כמו CustomResourceDefinition שנוצר באמצעות v1beta1 API. השגיאה הזו מתרחשת כי למשאב חסרה סכימת המבנה שנדרשת על ידי API v1. הנוכחות של CustomResourceDefinition נחשבת לשגיאה קריטית כי יכול להיות שהיא לא תשוחזר בצורה תקינה לאשכול חדש יותר.
כדי לפתור את השגיאה, פועלים לפי ההוראות הבאות:
מריצים את הפקודה
kubectl get crdכדי לזהות אתCustomResourceDefinitionהבעייתי:kubectl get crd CRD_NAMEמחליפים את
CRD_NAMEבשם שלCustomResourceDefinitionמהודעת השגיאה.בפלט של YAML, מאתרים את התנאים הבאים כדי לוודא שההמרה של
CustomResourceDefinitionמ-vbeta1API ל-v1API בוצעה בצורה תקינה:
spec.versions: מאתרים את התנאיspec.versionsעל ידי עיון בכל גרסה שמופיעה בשדהspec.versions. אם חסר השדהschema.openAIV3Schemaבאחד מה-spec.versions, לא מוגדרת סכימה מבנית ל-CustomResourceDefinitionבגרסה הזו.
status.conditions: מאתרים את התנאיstatus.conditionsעל ידי חיפוש התנאיtype:NonStructuralSchema. אם הערך שלstatus.conditions'sstatusהואtrue, זה מאשר באופן מפורש שהסכימה לא מבנית.
כדי לשדרג את
CustomResourceDefinitionלגרסהv1של API, צריך לבצע את השלבים הבאים:עורכים את
CustomResourceDefinitionהקיים כדי להתאים אותו לתקןv1. לשם כך, מוסיפים סכימה מבנית שמגדירה כל שדה ואת הסוג שלו במשאב המותאם אישית. מידע נוסף על הוספת סכימה מבנית זמין במאמר הגדרת סכימה מבנית.מחילים את המניפסט התואם
v1על האשכול.
אם השדרוג יושלם בהצלחה, צריך לנסות שוב את פעולת הגיבוי. אם לא, אפשר להשתמש באחת מהשיטות הבאות כדי לפתור את הבעיה:
אם לא נעשה שימוש ב-
CustomResourceDefinitionבאשכול, מוחקים אותו על ידי הרצת הפקודהkubectl delete crd.CustomResourceDefinitionkubectl delete crd CRD_NAMEמחליפים את
CRD_NAMEבשם שלCustomResourceDefinitionשרוצים למחוק.מפעילים מצב מתירני בתוכנית הגיבוי, שמאפשר ל-Backup for GKE לדלג על המשאב – כולל
CustomResourceDefinitionsבגרסתv1beta1של ה-API – ולהמשיך עם שאר פעולת הגיבוי. מידע נוסף על הפעלת מצב הרשאה זמין במאמר הפעלת מצב הרשאה בתוכנית גיבוי.
לנסות שוב לבצע את פעולת הגיבוי. אם הפעולה ממשיכה להיכשל, אפשר לפנות אל Cloud Customer Care לקבלת עזרה נוספת.
שגיאה 100040102: מרחב השמות לא נמצא
השגיאה 100040102 מתרחשת כשניסיון לבצע פעולת גיבוי נכשל כי לא ניתן למצוא במערכת את מרחב השמות שצוין בהיקף הגיבוי. סוכן הגיבוי ל-GKE לא הצליח לאתר מרחבי שמות אחד או יותר שצוינו במפורש בשדה selectedNamespaces בהגדרות BackupPlan. כדי להשתמש בגיבוי ל-GKE, כל מרחבי השמות שצוינו צריכים להיות קיימים באשכול בזמן הפעלת פעולת הגיבוי. אם לא נמצא מרחב השמות, מוצגת הודעת השגיאה הבאה:
Namespace [NAMESPACE_NAME] is not found.
כדי לפתור את הבעיה, צריך לפעול לפי ההוראות הבאות:
כדי לוודא שהמרחב לשמות הוזן בצורה נכונה, בודקים את הרשימה
selectedNamespacesבהגדרות שלBackupPlan.כדי לוודא שמרחב השמות שמופיע בהודעת השגיאה קיים, מריצים את הפקודה
kubectl get namespace:kubectl get namespace NAMESPACE_NAMEמחליפים את
NAMESPACE_NAMEבשם של מרחב השמות שמופיע בהודעת השגיאה.אם מרחב השמות לא קיים, מוצגת הודעה שמרחב השמות לא נמצא, למשל
Error from server (NotFound): namespaces "[NAMESPACE_NAME]" not found.מתקנים את
BackupPlan. אם יש שגיאת כתיב במרחב השמות, צריך לעדכן אתBackupPlanעם השם הנכון של מרחב השמות. אם מרחב השמות באמת לא קיים יותר ואין צורך לגבות אותו, צריך להסיר אותו מהרשימהselectedNamespacesבהגדרות שלBackupPlan.אחרי שתבצעו את התיקונים הנדרשים ב-
BackupPlan, נסו שוב לבצע את פעולת הגיבוי והתחילו גיבוי חדש.
אם הפעולה ממשיכה להיכשל, פנו אל Cloud Customer Care לקבלת עזרה נוספת.