בדף הזה מוסבר איך לפתור בעיות שקשורות למדדי מערכת באשכולות 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 (חשבון השירות שמשמש כברירת מחדל לצומת ב-Kubernetes Engine).
- לוחצים על Save.
gcloud
- איך מוצאים את Google Cloud מספר הפרויקט:
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
מחליפים את
PROJECT_IDבמזהה הפרויקט.הפלט אמור להיראות כך:
12345678901
- מקצים לחשבון השירות של Compute Engine שמוגדר כברירת מחדל את התפקיד
roles/container.defaultNodeServiceAccount: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כדי לקבל תמיכה נוספת מהקהילה. - פתיחת דיווחים על בעיות או בקשות להוספת תכונות באמצעות הכלי הציבורי למעקב אחר בעיות.