בדף הזה מוסבר איך לפתור בעיות שקשורות למדדי מערכת באשכולות Google Kubernetes Engine (GKE).
מדדים מהאשכול לא מופיעים ב-Cloud Monitoring
מוודאים שהפעלתם את Monitoring API ואת Logging API בפרויקט. כדאי גם לוודא שאפשר לראות את הפרויקט בסקירה הכללית של Cloud Monitoring במסוףGoogle Cloud .
אם הבעיה נמשכת, כדאי לבדוק את הסיבות האפשריות הבאות:
האם הפעלתם מעקב באשכול?
המעקב מופעל כברירת מחדל באשכולות שנוצרו מ Google Cloud המסוף ומ-Google Cloud CLI, אבל אפשר לוודא זאת בלחיצה על פרטי האשכול במסוף Google Cloud או בהרצת הפקודה הבאה:
gcloud container clusters describe CLUSTER_NAMEהפלט של הפקודה הזו צריך לכלול את
SYSTEM_COMPONENTSברשימה שלenableComponentsבמקטעmonitoringConfig, בדומה לדוגמה הבאה:monitoringConfig: componentConfig: enableComponents: - SYSTEM_COMPONENTSאם הניטור לא מופעל, מריצים את הפקודה הבאה כדי להפעיל אותו:
gcloud container clusters update CLUSTER_NAME --monitoring=SYSTEMכמה זמן עבר מאז שהאשכול נוצר או מאז שהפעלתם את המעקב?
יכול להיות שיעברו עד שעה לפני שמדדים של אשכול חדש יתחילו להופיע ב-Cloud Monitoring.
האם
heapsterאוgke-metrics-agent(OpenTelemetry Collector) פועלים באשכול במרחב השמותkube-system?יכול להיות שהתזמון של עומסי העבודה ב-Pod הזה נכשל כי יש מעט מדי משאבים באשכול. כדי לבדוק אם Heapster או OpenTelemetry פועלים, מריצים את הפקודה
kubectl get pods --namespace=kube-systemובודקים אם יש Pods עםheapsterאוgke-metrics-agentבשם.האם רמת הבקרה של האשכול יכולה לתקשר עם הצמתים?
התקשורת הזו חיונית ל-Cloud Monitoring. כדי לבדוק אם מישור הבקרה מתקשר עם הצמתים, מריצים את הפקודה הבאה:
kubectl logs POD_NAMEאם הפקודה הזו מחזירה שגיאה, יכול להיות שמנהרות ה-SSH גורמים לבעיה. כדי לראות את השלבים לפתרון הבעיה, אפשר לעיין במאמר בנושא פתרון בעיות ב-SSH.
זיהוי ותיקון בעיות הרשאות בכתיבת מדדים
ב-GKE נעשה שימוש בחשבונות שירות של IAM שמצורפים לצמתים כדי להריץ משימות מערכת כמו רישום ביומן ומעקב. לפחות, חשבונות השירות של הצמתים צריכים לקבל את התפקיד Kubernetes Engine Default Node Service Account (roles/container.defaultNodeServiceAccount) בפרויקט. כברירת מחדל, GKE משתמש בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine, שנוצר באופן אוטומטי בפרויקט, כחשבון השירות של הצומת.
אם בארגון שלכם נאכף iam.automaticIamGrantsForDefaultServiceAccounts אילוץ מדיניות הארגון, יכול להיות שחשבון השירות שמשמש כברירת מחדל ב-Compute Engine בפרויקט שלכם לא יקבל באופן אוטומטי את ההרשאות הנדרשות ל-GKE.
כדי לזהות את הבעיה, בודקים אם יש שגיאות
401בעומס העבודה של ניטור המערכת באשכול:[[ $(kubectl logs -l k8s-app=gke-metrics-agent -n kube-system -c gke-metrics-agent | grep -cw "Received 401") -gt 0 ]] && echo "true" || echo "false"אם הפלט הוא
true, עומס העבודה של המערכת חווה שגיאות 401, שמצביעות על חוסר הרשאות. אם הפלט הואfalse, צריך לדלג על שאר השלבים ולנסות הליך אחר לפתרון בעיות.
כדי להעניק את התפקיד roles/container.defaultNodeServiceAccount לחשבון השירות שמוגדר כברירת המחדל של Compute Engine, מבצעים את השלבים הבאים:
המסוף
- נכנסים לדף Welcome:
- בשדה מספר הפרויקט, לוחצים על העתקה ללוח.
- נכנסים לדף IAM:
- לוחצים על Grant access.
- בשדה New principals, מציינים את הערך הבא:
מחליפים אתPROJECT_NUMBER-compute@developer.gserviceaccount.comPROJECT_NUMBERבמספר הפרויקט שהעתקתם. - בתפריט Select a role בוחרים בתפקיד Kubernetes Engine Default Node Service Account.
- לוחצים על Save.
gcloud
- איך מוצאים את Google Cloud מספר הפרויקט:
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
מחליפים את
PROJECT_IDבמזהה הפרויקט.הפלט אמור להיראות כך:
12345678901
- מקצים את התפקיד
roles/container.defaultNodeServiceAccountלחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/container.defaultNodeServiceAccount"
מחליפים את
PROJECT_NUMBERבמספר הפרויקט מהשלב הקודם.
מוודאים שיש לסוכן המדדים מספיק זיכרון
אם ניסיתם את השלבים הקודמים לפתרון בעיות והמדדים עדיין לא מופיעים, יכול להיות שאין מספיק זיכרון לסוכן המדדים.
ברוב המקרים, הקצאת ברירת המחדל של משאבים לסוכן המדדים של GKE מספיקה. עם זאת, אם ה-DaemonSet קורס שוב ושוב, אפשר לבדוק את סיבת הסיום באמצעות ההוראות הבאות:
אחזור השמות של ה-Pods של סוכן המדדים של GKE:
kubectl get pods -n kube-system -l component=gke-metrics-agentמוצאים את ה-Pod עם הסטטוס
CrashLoopBackOff.הפלט אמור להיראות כך:
NAME READY STATUS RESTARTS AGE gke-metrics-agent-5857x 0/1 CrashLoopBackOff 6 12mתאר את ה-Pod עם הסטטוס
CrashLoopBackOff:kubectl describe pod POD_NAME -n kube-systemמחליפים את
POD_NAMEבשם של ה-Pod מהשלב הקודם.אם הסיבה לסיום הפעולה של ה-Pod היא
OOMKilled, לסוכן נדרש זיכרון נוסף.הפלט אמור להיראות כך:
containerStatuses: ... lastState: terminated: ... exitCode: 1 finishedAt: "2021-11-22T23:36:32Z" reason: OOMKilled startedAt: "2021-11-22T23:35:54Z"מוסיפים תווית צומת לצומת שבו סוכן המדדים נכשל. אפשר להשתמש בתווית צומת קבועה או זמנית. מומלץ לנסות להוסיף עוד 20MB. אם הסוכן ממשיך לקרוס, אפשר להריץ את הפקודה הזו שוב, ולהחליף את התווית של הצומת בתווית שמבקשת כמות גדולה יותר של זיכרון נוסף.
כדי לעדכן מאגר צמתים עם תווית קבועה, מריצים את הפקודה הבאה:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --node-labels=ADDITIONAL_MEMORY_NODE_LABEL \ --location=COMPUTE_LOCATIONמחליפים את מה שכתוב בשדות הבאים:
-
NODEPOOL_NAME: השם של מאגר הצמתים. -
CLUSTER_NAME: השם של האשכול הקיים. -
ADDITIONAL_MEMORY_NODE_LABEL: אחת מהתוויות הנוספות של צומת הזיכרון. אפשר להשתמש באחד מהערכים הבאים:- כדי להוסיף 10MB:
cloud.google.com/gke-metrics-agent-scaling-level=10 - כדי להוסיף 20MB:
cloud.google.com/gke-metrics-agent-scaling-level=20 - כדי להוסיף 50MB:
cloud.google.com/gke-metrics-agent-scaling-level=50 - כדי להוסיף 100MB:
cloud.google.com/gke-metrics-agent-scaling-level=100 - כדי להוסיף 200MB:
cloud.google.com/gke-metrics-agent-scaling-level=200 - כדי להוסיף 500MB:
cloud.google.com/gke-metrics-agent-scaling-level=500
- כדי להוסיף 10MB:
-
COMPUTE_LOCATION: המיקום של Compute Engine של האשכול.
אפשרות אחרת היא להוסיף תווית זמנית לצומת שלא תישמר אחרי שדרוג באמצעות הפקודה הבאה:
kubectl label node/NODE_NAME \ ADDITIONAL_MEMORY_NODE_LABEL --overwriteמחליפים את מה שכתוב בשדות הבאים:
-
NODE_NAME: השם של הצומת של סוכן המדדים המושפע. -
ADDITIONAL_MEMORY_NODE_LABEL: אחת מהתוויות הנוספות של צומת הזיכרון. אפשר להשתמש באחד מהערכים מהדוגמה הקודמת.
-
המאמרים הבאים
אם נתקלתם בבעיה שקשורה לסוכן Cloud Logging, תוכלו לעיין בתיעוד לפתרון בעיות.
אם לא מצאתם פתרון לבעיה שלכם במסמכים, תוכלו לקבל עזרה נוספת במאמר בנושא קבלת תמיכה, כולל עצות בנושאים הבאים:
- פתיחת בקשת תמיכה באמצעות פנייה אל Cloud Customer Care.
- קבלת תמיכה מהקהילה על ידי פרסום שאלות ב-StackOverflow ושימוש בתג
google-kubernetes-engineכדי לחפש בעיות דומות. אפשר גם להצטרף לערוץ Slack#kubernetes-engineכדי לקבל תמיכה נוספת מהקהילה. - פתיחת דיווחים על בעיות או בקשות להוספת תכונות באמצעות הכלי הציבורי למעקב אחר בעיות.