בדף הזה מתוארות שגיאות שקשורות למערכת שיכולות להתרחש כשמשתמשים בגיבוי ל-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). המפתח הזה ישמש להצפנת נתוני הגיבוי, כולל גיבויים של נפחים בהיקף אזורי.
- מוודאים שיש הרשאות מתאימות: מוודאים שלסוכן השירות של "גיבוי ל-GKE" (
service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com) הוקצה התפקידroles/cloudkms.cryptoKeyEncrypterDecrypterל-CMEK שנוסף. - בדיקה מחדש של פעולת הגיבוי: אחרי שמעדכנים את תוכנית הגיבוי עם CMEK ומעניקים הרשאות, מנסים שוב את פעולת הגיבוי.
שגיאה 100020102: CustomResourceDefinition – יש סכימה לא תקינה – גרסת API v1beta1 לא נתמכת
השגיאה 100020102 מתרחשת כשניסיון לגבות CustomResourceDefinition שהוחל במקור כגרסה apiextensions.k8s.io/v1beta1 נכשל, כי חסרה לו הסכימה המבנית שנדרשת בגרסת ה-API apiextensions.k8s.io/v1. השגיאה הזו מובילה להודעת השגיאה הבאה: CustomResourceDefinition - has an invalid schema. The resource was
originally applied as v1beta1, which has been removed from Kubernetes 1.22+.
השגיאה הזו מתרחשת כי גרסת ה-API של apiextensions.k8s.io/v1beta1 הוסרה בגרסה 1.22 של Google Kubernetes Engine. למידע נוסף על הסרת ה-API בגרסה 1.22 של GKE, קראו את המאמר הסרות של API ב-GKE בגרסה 1.22.
התנהגות של פעולת גיבוי במצב לא מתירני
במצב לא מתירני או בתוכנית גיבוי מחמירה, פעולת הגיבוי נכשלת אם המערכת נתקלת במשאב שלא ניתן לגבות, כמו CustomResourceDefinition שנוצר באמצעות v1beta1 API. השגיאה הזו מתרחשת כי למשאב חסרה סכימת המבנה שנדרשת על ידי v1 API. הנוכחות של CustomResourceDefinition נחשבת לשגיאה קריטית כי יכול להיות שהיא לא תשוחזר בצורה תקינה לאשכול חדש יותר.
כדי לפתור את השגיאה, פועלים לפי ההוראות הבאות:
מריצים את הפקודה
kubectl get crdכדי לזהות את ה-CustomResourceDefinitionהבעייתי:kubectl get crd CRD_NAMEמחליפים את
CRD_NAMEבשם שלCustomResourceDefinitionמהודעת השגיאה.בפלט של YAML, מאתרים את התנאים הבאים כדי לוודא שההמרה של
CustomResourceDefinitionמ-vbeta1API ל-v1API בוצעה בצורה תקינה:
spec.versions: מאתרים את התנאיspec.versionsעל ידי עיון בכל גרסה שמופיעה בשדהspec.versions. אם באחד מהערכים שלspec.versionsחסר השדהschema.openAIV3Schema, לא מוגדרת סכימה מבנית לגרסה הזו שלCustomResourceDefinition.
status.conditions: מאתרים את התנאיstatus.conditionsעל ידי חיפוש התנאיtype:NonStructuralSchema. אם הערך שלstatus.conditionsstatusהואtrue, זה מאשר במפורש שהסכימה לא מבנית.
כדי לשדרג את
CustomResourceDefinitionלגרסהv1של API, פועלים לפי השלבים הבאים:כדי לערוך את ה-
CustomResourceDefinitionהקיים כך שיתאים לתקןv1, צריך להוסיף סכימה מבנית שמגדירה כל שדה ואת הסוג שלו במשאב בהתאמה אישית. מידע נוסף על הוספת סכימה מבנית זמין במאמר הגדרת סכימה מבנית.מחילים את המניפסט התואם של
v1על האשכול.
אם השדרוג יושלם בהצלחה, צריך לנסות שוב את פעולת הגיבוי. אם לא, אפשר להשתמש באחת מהשיטות הבאות כדי לפתור את הבעיה:
אם לא משתמשים ב-
CustomResourceDefinitionבאשכול, מוחקים אתCustomResourceDefinitionבאמצעות הפקודהkubectl delete crd.kubectl delete crd CRD_NAMEמחליפים את
CRD_NAMEבשם שלCustomResourceDefinitionשרוצים למחוק.מפעילים מצב מתירני בתוכנית הגיבוי, שמאפשר ל-"גיבוי ל-GKE" לדלג על המשאב – כולל
CustomResourceDefinitionsבגרסת ה-API שלv1beta1– ולהמשיך בשאר פעולת הגיבוי. מידע נוסף על הפעלת מצב הרשאה זמין במאמר הפעלת מצב הרשאה בתוכנית גיבוי.
מנסים שוב לבצע את פעולת הגיבוי. אם הפעולה ממשיכה להיכשל, פנו אל Cloud Customer Care לקבלת עזרה נוספת.
שגיאה 100020103: השאילתה למשאבי ה-API נכשלה
השגיאה 100020103 מתרחשת כש-Backup for GKE לא מצליח לגלות שירותי API מותאמים אישית או מצטברים של Kubernetes לפני יצירת גיבוי, וכתוצאה מכך מוצגת הודעת השגיאה Failed to query API resources. Please check if any API service
is unavailable by using 'kubectl get apiservice'. זה קורה אם שירות API מצטבר מוגדר בצורה שגויה, או אם שירותי הגיבוי וה-pods שלו לא תקינים או שלא ניתן להגיע אליהם. במצב לא מתירני, או בתוכנית גיבוי מחמירה, אם שירות הגיבוי ל-GKE נתקל ב-APIService לא זמין, הוא מפסיק את פעולת הגיבוי כדי למנוע תיעוד של מצב לא שלם או לא עקבי של האשכול.
כדי לפתור את השגיאה, פועלים לפי ההוראות הבאות:
מריצים את הפקודה הבאה כדי לזהות שירותי API שלא זמינים:
kubectl get apiserviceבפלט, מחפשים שירותי API שבהם העמודה
AVAILABLEהיאFalse.כדי לבדוק את הפרטים של ה-
APIServiceשנכשל, מריצים את הפקודה הבאה:kubectl describe apiservice APISERVICE_NAMEמחליפים את הערך
APISERVICE_NAMEבשם של שירות ה-API שנכשל, לדוגמה,v1beta1.custom.metrics.k8s.io.בפלט, בודקים את השדה
Serviceבקטעspec.serviceואת הקטעConditionsכדי לזהות את השירות התומך, את מרחב השמות שלו ואת הסיבה לכשל (למשל, נקודות קצה חסרות או יציאת יעד לא נגישה).כדי לפתור את השגיאה, אפשר להשתמש באחת מהשיטות הבאות:
שחזור שירות תומך: כדי לוודא שלשירות התומך יש נקודות קצה מוכנות, מריצים את הפקודה הבאה:
kubectl get endpoints -n NAMESPACE SERVICE_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
NAMESPACE: מרחב השמות של שירות תומך. -
SERVICE_NAME: השם של שירות הגיבוי.
מוודאים שה-Pods שתומכים בשירות קיימים ושמצבם הוא
Running. לפתור בעיות שגורמות לקריסה של קבוצות Pod, לכשלים בשליפת תמונות או לבעיות בהגדרות של מדיניות רשת ב-Kubernetes שמונעות מתעבורת הנתונים להגיע לשירות התומך.-
מחיקת
APIServiceיתום: אםAPIServiceשייך לאפליקציה, לאופרטור של אפליקציות או לכלי מעקב שהוסרו או שכבר לא נמצאים בשימוש, מוחקים אתAPIServiceהלא פעיל:kubectl delete apiservice APISERVICE_NAMEמחליפים את
APISERVICE_NAMEבשם של שירות ה-API היתום.הפעלת מצב מתירני: אם אתם לא יכולים לתקן או להסיר מיד את שירות ה-API שלא זמין, הפעילו מצב מתירני בתוכנית הגיבוי. כשהמצב המתירני מופעל, הגיבוי ל-GKE ממשיך בפעולת הגיבוי. עם זאת, משאבים ששייכים לקבוצת ה-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 לקבלת עזרה נוספת.