המסמך הזה יעזור לכם לפתור בעיות שקשורות ל-Observability ב-Google Distributed Cloud. אם נתקלתם באחת מהבעיות האלה, כדאי לעיין בפתרונות ובעקרונות העבודה המוצעים.
לקבלת עזרה נוספת, אפשר לפנות אל Cloud Customer Care.
אפשר גם לעיין במאמר קבלת תמיכה לקבלת מידע נוסף על מקורות מידע לתמיכה, כולל:
- דרישות לפתיחת בקשת תמיכה.
- כלים שיעזרו לכם לפתור בעיות, כמו יומנים ומדדים.
- רכיבים, גרסאות ותכונות נתמכים של Google Distributed Cloud ל-VMware (תוכנה בלבד).
יומני ביקורת של Cloud לא נאספים
בודקים אם Cloud Audit Logs מופעל בקטעcloudAuditLogging של הגדרות האשכול. צריך לוודא שמזהה הפרויקט, המיקום ומפתח חשבון השירות מוגדרים בצורה תקינה. מזהה הפרויקט צריך להיות זהה למזהה הפרויקט שמופיע בקטע gkeConnect.
אם יומני הביקורת של Cloud מופעלים, הסיבה הנפוצה ביותר לכך שהיומנים לא נאספים היא הרשאות. בתרחיש הזה, הודעות השגיאה 'ההרשאה נדחתה' מוצגות במאגר של פרוקסי Cloud Audit Logs.
קונטיינר הפרוקסי של יומני הביקורת של Cloud פועל כאחד מהבאים:- Pod סטטי באשכול אדמין או באשכול עצמאי.
- כקונטיינר sidecar ב-
kube-apiserverPod.
אם מופיעות שגיאות שקשורות להרשאות, פועלים לפי השלבים לפתרון בעיות שקשורות להרשאות.
סיבה אפשרית נוספת היא שהפרויקט הגיע למגבלה הנתמכת של חשבונות שירות. אפשר לקרוא על כך במאמר חשבון שירות של Cloud Audit Logs הודלף.
לא נאספים מדדים של kube-state-metrics
kube-state-metrics (KSM) פועל כפריסת שכפול יחידה באשכול ומפיק מדדים כמעט בכל המשאבים באשכול. כש-KSM ו-gke-metrics-agent פועלים באותו הצומת, יש סיכון גבוה יותר להפסקת פעולה בקרב סוכני מדדים בכל הצמתים.
השמות של מדדי KSM פועלים לפי התבנית kube_<ResourceKind>, כמו kube_pod_container_info. מדדים שמתחילים ב-kube_onpremusercluster_ הם מהבקר של האשכול המקומי, ולא מ-KSM.
אם חסרים מדדים של KSM, כדאי לנסות את השלבים הבאים לפתרון בעיות:
- ב-Cloud Monitoring, בודקים את המעבד (CPU), הזיכרון ומספר ההפעלה מחדש של KSM באמצעות מדדי סיכום של API כמו
kubernetes.io/anthos/container/.... זהו צינור נפרד עם KSM. מוודאים שאין הגבלה על ה-KSM Pod בגלל מחסור במשאבים.- אם מדדי ה-API של הסיכום האלה לא זמינים ב-KSM,
gke-metrics-agentסביר להניח שגם באותו הצומת יש את אותה בעיה.
- אם מדדי ה-API של הסיכום האלה לא זמינים ב-KSM,
- באשכול, בודקים את הסטטוס והיומנים של ה-Pod של KSM ושל ה-Pod של
gke-metrics-agentבאותו הצומת עם KSM.
kube-state-metrics crash looping
תסמין
אין מדדים מ-kube-state-metrics (KSM) שזמינים מ-Cloud Monitoring.
הסיבה
התרחיש הזה סביר יותר באשכולות גדולים או באשכולות עם כמויות גדולות של משאבים. KSM פועל כפריסת רפליקה יחידה ומציג כמעט את כל המשאבים באשכול, כמו Pods, Deployments, DaemonSets, ConfigMaps, Secrets ו-PersistentVolumes. המדדים נוצרים בכל אחד מאובייקטי המשאבים האלה. אם לאחד מהמשאבים יש הרבה אובייקטים, כמו אשכול עם יותר מ-10,000 פודים, יכול להיות ש-KSM יגמר הזיכרון.
גרסאות שהושפעו
הבעיה הזו יכולה להתרחש בכל גרסה של Google Distributed Cloud.
הגדלנו את מגבלת ברירת המחדל של משאבי המעבד (CPU) והזיכרון בגרסאות האחרונות של Google Distributed Cloud, ולכן בעיות שקשורות למשאבים האלה אמורות להיות פחות נפוצות.
פתרון ופתרון עקיף
כדי לבדוק אם הבעיה נובעת מבעיות שקשורות לזיכרון, אפשר לפעול לפי השלבים הבאים:
- משתמשים ב-
kubectl describe podאו ב-kubectl get pod -o yamlובודקים את הודעת השגיאה. - בודקים את מדד צריכת הזיכרון והניצול של KSM ומוודאים שהוא מגיע למגבלה לפני ההפעלה מחדש.
אם וידאתם שהבעיה היא חוסר זיכרון, אפשר לנסות את אחד מהפתרונות הבאים:
הגדלת בקשת הזיכרון והמגבלה של KSM.
כדי לשנות את המעבד והזיכרון של KSM:
ב-Google Distributed Cloud בגרסה 1.16.0 ואילך, Google Cloud Observability מנהל את KSM. כדי לעדכן את KSM, אפשר לעיין במאמר שינוי ברירת המחדל של בקשות ומגבלות של מעבד וזיכרון לרכיב Stackdriver.
בגרסאות של Google Distributed Cloud 1.10.7 ואילך, 1.11.3 ואילך, 1.12.2 ואילך, 1.13 ואילך, אבל לפני 1.16.0, צריך ליצור
ConfigMapכדי לשנות את השימוש במעבד ובזיכרון:יוצרים
ConfigMapבשםkube-state-metrics-resizer-configבמרחב השמותkube-system(gke-managed-metrics-serverבגרסה 1.13 ואילך) עם ההגדרה הבאה. משנים את המספרים של המעבד והזיכרון לפי הצורך:apiVersion: v1 kind: ConfigMap metadata: name: kube-state-metrics-resizer-config namespace: kube-system data: NannyConfiguration: |- apiVersion: nannyconfig/v1alpha1 kind: NannyConfiguration baseCPU: 200m baseMemory: 1Gi cpuPerNode: 3m memoryPerNode: 20Mi ```אחרי שיוצרים את ConfigMap, מפעילים מחדש את הפריסה של KSM על ידי מחיקת ה-Pod של KSM באמצעות הפקודה הבאה:
kubectl -n kube-system rollout restart deployment kube-state-metrics
לגרסאות 1.9 ואילך, 1.10.6 ואילך, 1.11.2 ואילך ו-1.12.1 ואילך של Google Distributed Cloud:
- אין פתרון טוב לטווח הארוך – אם עורכים את המשאב שקשור ל-KSM, השינויים מבוטלים אוטומטית על ידי
monitoring-operator. - אפשר להקטין את מספר הרפליקות
monitoring-operatorל-0, ואז לערוך את הפריסה של KSM כדי לשנות את מגבלת המשאבים שלה. עם זאת, האשכול לא יקבל תיקוני פגיעות שמועברים על ידי גרסאות חדשות של תיקונים באמצעותmonitoring-operator. חשוב לזכור להגדיל את מספר הצמתיםmonitoring-operatorאחרי שמשדרגים את האשכול לגרסה חדשה יותר עם תיקון.
- אין פתרון טוב לטווח הארוך – אם עורכים את המשאב שקשור ל-KSM, השינויים מבוטלים אוטומטית על ידי
צריך לצמצם את מספר המדדים מ-KSM.
ב-Google Distributed Cloud 1.13, KSM חושף כברירת מחדל רק מספר קטן יותר של מדדים שנקראים מדדי ליבה. המשמעות של ההתנהגות הזו היא שהשימוש במשאבים קטן יותר בהשוואה לגרסאות קודמות, אבל אפשר לבצע את אותו התהליך כדי להקטין עוד יותר את מספר מדדי ה-KSM.
בגרסאות של Google Distributed Cloud שקודמות לגרסה 1.13, KSM משתמש בדגלים שמוגדרים כברירת מחדל. התצורה הזו חושפת מספר גדול של מדדים.
gke-metrics-agent crash looping
אם gke-metrics-agent נתקל בבעיות של חוסר זיכרון רק בצומת שבו קיים kube-state-metrics, הסיבה היא מספר גדול של מדדי kube-state-metrics. כדי לפתור את הבעיה הזו, צריך להקטין את stackdriver-operator ולשנות את KSM כך שיציג קבוצה קטנה של מדדים נדרשים, כמו שמתואר בקטע הקודם.
חשוב לזכור להגדיל את מספר המכונות stackdriver-operator אחרי שמשדרגים את האשכול ל-Google Distributed Cloud 1.13, שבו KSM חושף כברירת מחדל מספר קטן יותר של מדדי ליבה.
gke-metric-agent. אפשר לשנות את השימוש במעבד ובזיכרון של כל ה-gke-metrics-agent Pods על ידי הוספת השדה resourceAttrOverride למשאב המותאם אישית של Stackdriver.
stackdriver-metadata-agent crash looping
תסמין
כשמסננים מדדים ב-Cloud Monitoring, אין תווית מטא-נתונים של המערכת.
הסיבה
המקרה הנפוץ ביותר של לולאת קריסה ב-stackdriver-metadata-agent הוא בגלל אירועים של חוסר זיכרון. האירוע הזה דומה ל-kube-state-metrics. למרות ש-stackdriver-metadata-agent לא מציג את כל המשאבים, הוא עדיין מציג את כל האובייקטים של סוגי המשאבים הרלוונטיים, כמו Pods, Deployments ו-NetworkPolicy. הסוכן פועל כפריסה של עותק יחיד, מה שמגדיל את הסיכון לאירועים של חריגה מזיכרון אם מספר האובייקטים גדול מדי.
הגרסה שהושפעה
הבעיה הזו יכולה להתרחש בכל גרסה של Google Distributed Cloud.
הגדלנו את מגבלת ברירת המחדל של משאבי המעבד (CPU) והזיכרון בכמה גרסאות אחרונות של Google Distributed Cloud, ולכן בעיות שקשורות למשאבים האלה צריכות להיות פחות נפוצות.
פתרון ופתרון עקיף
כדי לבדוק אם הבעיה נובעת מבעיות שקשורות לזיכרון, אפשר לפעול לפי השלבים הבאים:
- משתמשים ב-
kubectl describe podאו ב-kubectl get pod -o yamlובודקים את הודעת השגיאה. - בודקים את מדד צריכת הזיכרון והשימוש בו עבור
stackdriver-metadata-agentומוודאים שהוא לא מתקרב למגבלה לפני ההפעלה מחדש.
resourceAttrOverride של המשאב המותאם אישית Stackdriver.
metrics-server crash looping
תסמין
התכונות Horizontal Pod Autoscaler ו-kubectl top לא פועלות באשכול.
הסיבה והגרסאות שהושפעו
הבעיה הזו לא נפוצה במיוחד, אבל היא נגרמת בגלל שגיאות של חוסר זיכרון באשכולות גדולים או באשכולות עם צפיפות גבוהה של Pod.
הבעיה הזו יכולה להתרחש בכל גרסה של Google Distributed Cloud.
פתרון ופתרון עקיף
הגדלת מגבלות המשאבים של שרת המדדים.
ב-Google Distributed Cloud בגרסה 1.13 ואילך, מרחב השמות של metrics-server
וההגדרה שלו הועברו מ-kube-system אל
gke-managed-metrics-server.
לא כל המשאבים מוסרים במהלך מחיקה של חשבון שירות ביומני הביקורת של Cloud
כשמוחקים חשבון שירות שמשמש ליומני הביקורת של Cloud, לא כל המשאבים Google Cloudנמחקים. אם אתם מוחקים ויוצרים מחדש באופן קבוע חשבונות שירות שמשמשים ליומני ביקורת של Cloud, בסופו של דבר יומני הביקורת יתחילו להיכשל.
תסמין
הודעות השגיאה Permission denied מוצגות במאגר של פרוקסי Cloud Audit Logs.
כדי לוודא שהבעיה הזו היא הסיבה לכשל ביומן הביקורת, מריצים את הפקודה הבאה:
curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://gkehub.googleapis.com/v1alpha/projects/PROJECT_NUMBER/locations/global/features/cloudauditlogging
מחליפים את PROJECT_NUMBER במספר הפרויקט.
בתגובה מוחזרים כל חשבונות השירות שנעשה בהם שימוש ביומני הביקורת של Cloud בפרויקט, כולל חשבונות שירות שנמחקו.
הסיבה והגרסאות שהושפעו
לא כל Google Cloud המשאבים מוסרים כשמוחקים חשבון שירות שמשמש ליומני ביקורת של Cloud, ובסופו של דבר מגיעים למגבלה של 1,000 חשבונות שירות לפרויקט.
הבעיה הזו יכולה להתרחש בכל גרסה של Google Distributed Cloud.
פתרון ופתרון עקיף
יוצרים משתנה סביבה שמכיל רשימה מופרדת בפסיקים של כל חשבונות השירות שרוצים לשמור. מקיפים כל כתובת אימייל של חשבון שירות במירכאות בודדות, ומקיפים את כל הרשימה במירכאות כפולות. אפשר להשתמש בדוגמה הבאה כנקודת התחלה:
SERVICE_ACCOUNT_EMAILS="'SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com'"מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט.-
SERVICE_ACCOUNT_NAME: השם של חשבון השירות.
הרשימה המלאה צריכה להיראות כמו בדוגמה הבאה:
"'sa_name1@example-project-12345.iam.gserviceaccount.com','sa_name2@example-project-12345.iam.gserviceaccount.com','sa_name3@example-project-12345.iam.gserviceaccount.com'"מריצים את הפקודה הבאה כדי להסיר את התכונה Cloud Audit Logs מהפרויקט:
curl -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ https://gkehub.googleapis.com/v1alpha/projects/PROJECT_NUMBER/locations/FLEET_REGION /features/cloudauditloggingמחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_NUMBER: מספר הפרויקט. -
FLEET_REGION: המיקום של החברים בצי לאשכולות. זה יכול להיות אזור ספציפי כמוus-central1אוglobal. אפשר להריץ את הפקודהgcloud container fleet memberships listכדי לאתר את המיקום של המינוי.
הפקודה הזו מוחקת לחלוטין את כל חשבונות השירות.
-
יוצרים מחדש את התכונה 'יומני ביקורת של Cloud' עם חשבונות השירות שרוצים לשמור:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ https://gkehub.googleapis.com/v1alpha/projects/PROJECT_NUMBER/locations/FLEET_REGION/features?feature_id=cloudauditlogging \ -d '{"spec":{"cloudauditlogging":{"allowlistedServiceAccounts":[$SERVICE_ACCOUNT_EMAILS]}}}'
תוויות של מטא-נתונים נעלמות מהמדדים
תסמין
לדוגמה, התווית node_name של מטא-נתונים לא מאוכלסת ב-Cloud Monitoring.
הסיבה והגרסאות שהושפעו
הבעיה הזו יכולה להתרחש בכל גרסה של Google Distributed Cloud.
פתרון ופתרון עקיף
כל שינוי שתבצעו ב-Pod יחזיר את תוויות המטא-נתונים. לדוגמה, הרצת פקודות כמו kubectl rollout restart deployment <workload_name>.
המאמרים הבאים
לקבלת עזרה נוספת, אפשר לפנות אל Cloud Customer Care.
אפשר גם לעיין במאמר קבלת תמיכה לקבלת מידע נוסף על מקורות מידע לתמיכה, כולל:
- דרישות לפתיחת בקשת תמיכה.
- כלים שיעזרו לכם לפתור בעיות, כמו יומנים ומדדים.
- רכיבים, גרסאות ותכונות נתמכים של Google Distributed Cloud ל-VMware (תוכנה בלבד).