כדי לשחזר יומני ביקורת, מדדים או תוויות של מטא-נתונים שחסרים באשכולות של Google Distributed Cloud, אתם יכולים להשתמש בתיקונים הבאים לבעיות נפוצות שקשורות ליכולת התצפית. רוב הבעיות האלה נגרמות בגלל שגיאות בהרשאות או בגלל קריסות שנובעות ממחסור בזיכרון ברכיבים כמו kube-state-metrics באשכולות גדולים. חלק מהבעיות משפיעות גם על Horizontal Pod Autoscaler (HPA) ועל kubectl top.
אם אתם צריכים עזרה נוספת, תוכלו לפנות אל Cloud Customer Care.
במאמר קבלת תמיכה תוכלו לקרוא מידע נוסף על מקורות המידע לתמיכה, כולל:
- הדרישות לפתיחת בקשת תמיכה.
- כלים שיעזרו לכם לפתור בעיות, כמו יומנים ומדדים.
- רכיבים, גרסאות ותכונות נתמכים של Google Distributed Cloud ל-VMware (תוכנה בלבד).
יומני הביקורת של Cloud לא נאספים
בודקים אם יומני הביקורת של Cloud מופעלים בקטעcloudAuditLogging בהגדרות האשכול. מוודאים שמזהה הפרויקט, המיקום והמפתח של חשבון השירות מוגדרים כמו שצריך. מזהה הפרויקט צריך להיות זהה למזהה הפרויקט שמופיע בקטע gkeConnect.
אם יומני הביקורת של Cloud מופעלים, הסיבה הנפוצה ביותר לכך שהיומנים לא נאספים היא הרשאות. בתרחיש הזה, הודעות השגיאה על דחיית ההרשאה מוצגות בקונטיינר של שרת ה-proxy של יומני הביקורת של Cloud.
הקונטיינר של שרת ה-proxy של יומני הביקורת של Cloud פועל באחת מהדרכים הבאות:- פוד סטטי באשכול האדמין או באשכול העצמאי.
- כקונטיינר משני (sidecar) ב-Pod של
kube-apiserver.
אם מופיעות שגיאות שקשורות להרשאות, פעלו לפי השלבים לפתרון בעיות שקשורות להרשאות.
סיבה אפשרית נוספת היא שהפרויקט הגיע למגבלת חשבונות השירות הנתמכים. מידע נוסף זמין במאמר דליפת חשבון שירות של יומני ביקורת ב-Cloud.
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
תסמין
אין מדדים של kube-state-metrics (KSM) שזמינים ב-Cloud Monitoring.
הסיבה
התרחיש הזה סביר יותר באשכולות גדולים, או באשכולות עם כמויות גדולות של משאבים. KSM פועל כ-Deployment של רפליקה אחת ומציג כמעט את כל המשאבים באשכול, כמו Pods, Deployments, DaemonSets, ConfigMaps, Secrets ו-PersistentVolumes. המדדים נוצרים בכל אחד מאובייקטי המשאבים האלה. אם באחד מהמשאבים יש הרבה אובייקטים, כמו אשכול עם יותר מ-10,000 Pods, יכול להיות שייגמר הזיכרון של KSM (אין זיכרון פנוי).
גרסאות שהושפעו
הבעיה הזו יכולה להתרחש בכל גרסה של Google Distributed Cloud.
בגרסאות האחרונות של Google Distributed Cloud, הגדלנו את מגבלת ברירת המחדל של המעבד (CPU) והזיכרון, כך שהבעיות האלה במשאבים אמורות להיות פחות נפוצות.
תיקון ופתרון עקיף
כדי לבדוק אם הבעיה נובעת מבעיות של אין זיכרון פנוי (OOM), בצעו את הפעולות הבאות:
- משתמשים ב-
kubectl describe podאו ב-kubectl get pod -o yamlובודקים את הודעת הסטטוס של השגיאה. - בודקים את מדד צריכת הזיכרון והניצול של KSM ומוודאים אם הוא מגיע למגבלה לפני ההפעלה מחדש.
אם וידאתם שהבעיה היא אין זיכרון פנוי (OOM), אתם יכולים להשתמש באחד מהפתרונות הבאים:
מגדילים את בקשת הזיכרון ואת המגבלה של KSM.
כדי לשנות את המעבד (CPU) והזיכרון של KSM:
בגרסאות 1.16.0 ואילך של Google Distributed Cloud, Google Cloud Observability מנהל את KSM. כדי לעדכן את KSM, קראו את המאמר שינוי ברירת המחדל של בקשות ומגבלות של מעבד (CPU) וזיכרון לרכיב Stackdriver.
בגרסאות של Google Distributed Cloud מ-1.10.7 ואילך, מ-1.11.3 ואילך, מ-1.12.2 ואילך ומ-1.13 ואילך, אבל לפני 1.16.0, צריך ליצור
ConfigMapכדי לשנות את המעבד (CPU) והזיכרון:יוצרים
ConfigMapבשםkube-state-metrics-resizer-configבמרחב השמותkube-system(gke-managed-metrics-serverלגרסה 1.13 ואילך) עם ההגדרה הבאה. משנים את מספר המעבדים (CPU) והזיכרון לפי הצורך: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, מוחקים את ה-Pod של KSM באמצעות הפקודה הבאה כדי להפעיל מחדש את הפריסה של 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. - אפשר לצמצם אנכית בהתאם לעומס (scale down) את
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
אם ב-gke-metrics-agent יש בעיות של אין זיכרון פנוי (OOM) רק בצומת שבו נמצא kube-state-metrics, הסיבה היא מספר גדול של מדדי kube-state-metrics. כדי לצמצם את הבעיה, אפשר להקטין את stackdriver-operator ולשנות את KSM כך שיחשוף קבוצה קטנה של מדדים נדרשים, כפי שמפורט בסעיף הקודם.
חשוב לזכור להגדיל את stackdriver-operator אחרי שמשדרגים את האשכול ל-Google Distributed Cloud בגרסה 1.13, שבה KSM חושף כברירת מחדל מספר קטן יותר של מדדי ליבה.
gke-metric-agent. כדי לשנות את המעבד והזיכרון של כל Pods של gke-metrics-agent, מוסיפים את השדה resourceAttrOverride למשאב המותאם אישית של Stackdriver.
לולאת קריסות של stackdriver-metadata-agent
תסמין
כשמסננים מדדים ב-Cloud Monitoring, אין תווית זמינה למטא-נתונים של המערכת.
הסיבה
הסיבה הנפוצה ביותר לקריסה בלולאה של stackdriver-metadata-agent היא אירועים של אין זיכרון פנוי (OOM). האירוע הזה דומה לאירוע kube-state-metrics. למרות ש-stackdriver-metadata-agent לא מפרט את כל המשאבים, הוא עדיין מפרט את כל האובייקטים של סוגי המשאבים הרלוונטיים כמו Pods, Deployments ו-NetworkPolicy. הסוכן פועל כפריסה של רפליקה אחת, מה שמגדיל את הסיכון לאירועים של אין זיכרון פנוי (OOM) אם מספר האובייקטים גדול מדי.
הגרסה המושפעת
הבעיה הזו יכולה להתרחש בכל גרסה של Google Distributed Cloud.
בגרסאות האחרונות של Google Distributed Cloud, הגדלנו את מגבלת ברירת המחדל של המעבד (CPU) והזיכרון, כך שהבעיות האלה במשאבים אמורות להיות פחות נפוצות.
תיקון ופתרון עקיף
כדי לבדוק אם הבעיה נובעת מבעיות של אין זיכרון פנוי (OOM), בצעו את הפעולות הבאות:
- משתמשים ב-
kubectl describe podאו ב-kubectl get pod -o yamlובודקים את הודעת הסטטוס של השגיאה. - בודקים את מדד צריכת הזיכרון והניצול של
stackdriver-metadata-agentומוודאים אם הוא מגיע למגבלה לפני ההפעלה מחדש.
resourceAttrOverride של המשאב בהתאמה אישית של Stackdriver.
לולאת קריסות של metrics-server
תסמין
Horizontal Pod Autoscaler ו-kubectl top לא פועלים באשכול.
הסיבה והגרסאות המושפעות
הבעיה הזו לא נפוצה, אבל היא נגרמת בגלל שגיאות של אין זיכרון פנוי (OOM) באשכולות גדולים או באשכולות עם צפיפות גבוהה של Pods.
הבעיה הזו יכולה להתרחש בכל גרסה של Google Distributed Cloud.
תיקון ופתרון עקיף
הגדלת מגבלות המשאבים של שרת המדדים.
בגרסה 1.13 ואילך של Google Distributed Cloud, מרחב השמות של metrics-server וההגדרות שלו הועברו מ-kube-system אל gke-managed-metrics-server.
לא כל המשאבים מוסרים במהלך המחיקה של חשבון השירות של יומני הביקורת של Cloud
כשמוחקים חשבון שירות שמשמש ליומני הביקורת של Cloud, לא כל המשאבים של Google Cloudנמחקים. אם אתם מוחקים ויוצרים מחדש באופן קבוע חשבונות שירות שמשמשים ליומני הביקורת של Cloud, בסופו של דבר רישום יומני הביקורת ייכשל.
תסמין
הודעות השגיאה Permission denied (אין הרשאה) מוצגות במאגר ה-proxy של יומני הביקורת של Cloud.
כדי לוודא שהכשל ביומן הביקורת נגרם בגלל הבעיה הזו, מריצים את הפקודה הבאה:
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" מהפרויקט:
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: המיקום של האשכולות ב-Fleet. זה יכול להיות אזור ספציפי כמו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 (תוכנה בלבד).