בדף הזה מוסבר איך לפתור בעיות שקשורות למדדי המערכת באשכולות של 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:
- בשדה Project number, לוחצים על Copy to clipboard.
- נכנסים לדף 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 קורס שוב ושוב, אפשר לבדוק את הסיבה לסיום הפעולה באמצעות ההוראות הבאות:
משיגים את השמות של הפודים של סוכן המדדים של 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כדי לקבל תמיכה מהקהילה. - דיווח על בעיות או שליחת בקשות להוספת תכונות באמצעות הכלי הציבורי Issue Tracker.