Google Distributed Cloud nettest מזהה בעיות בקישוריות באובייקטים של Kubernetes באשכולות, כמו Pods, Nodes, Services וחלק מהיעדים החיצוניים. nettest לא בודק חיבורים מיעדים חיצוניים ל-Pods, לצמתים או לשירותים. במאמר הזה מוסבר איך לפרוס ולהפעיל את nettest באמצעות אחד מהמניפסטים, nettest.yaml או nettest_rhel.yaml, במאגר anthos-samples ב-GitHub. משתמשים בפקודה nettest_rhel.yaml אם מריצים את Google Distributed Cloud ב-Red HatEnterprise Linux (RHEL). משתמשים ב-nettest.yaml אם מריצים את Google Distributed Cloud ב-Ubuntu.
במסמך הזה מוסבר גם איך לפרש את היומנים שנוצרו על ידי nettest כדי לזהות בעיות בקישוריות של האשכולות.
מידע על nettest
כלי האבחון nettest מורכב מאובייקטים של Kubernetes. כל אובייקט מוגדר בקובצי המניפסט nettest בפורמט YAML.
-
cloudprober: DaemonSet ושירות שאחראים לאיסוף סטטוס החיבור לרשת, כמו שיעור השגיאות וזמן האחזור. -
echoserver: DaemonSet ושירות שאחראים על התגובה ל-cloudprober, ומספקים לו את המדדים של קישוריות הרשת. -
nettest: Pod שמכיל את הקונטיינריםprometheusו-nettest.-
prometheusאוסף מדדים מ-cloudprober. nettestשאילתותprometheusומציג את תוצאות בדיקת הרשת ביומן.
-
-
nettest-engine: ConfigMap להגדרת קונטיינרnettestב-Podnettest.
במניפסט מוגדרים גם nettest מרחב שמות וחשבון שירות ייעודי (יחד עם ClusterRole ו-ClusterRoleBinding) כדי לבודד את nettest ממשאבי אשכול אחרים.
הרצת nettest
מבצעים פריסה של nettest על ידי הרצת הפקודה הבאה למערכת ההפעלה שלכם.
כשמפעילים את nettest Pod, הבדיקה מתבצעת באופן אוטומטי. הבדיקה נמשכת כחמש דקות.
ב-Ubuntu:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/main/anthos-bm-utils/abm-nettest/nettest.yaml
ל-RHEL:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/main/anthos-bm-utils/abm-nettest/nettest_rhel.yaml
קבלת תוצאות הבדיקה
אחרי שהבדיקה מסתיימת (התהליך אמור להימשך כחמש דקות אחרי פריסת קובץ המניפסט nettest), מריצים את הפקודה הבאה כדי לראות את התוצאות: nettest
kubectl -n nettest logs nettest -c nettest
בזמן ש-nettest פועל, הוא שולח הודעות כמו הבאות אל stdout:
I0413 03:33:04.879141 1 collectorui.go:130] Listening on ":8999"
I0413 03:33:04.879258 1 prometheus.go:172] Running prometheus controller
E0413 03:33:04.879628 1 prometheus.go:178] Prometheus controller: failed to
retries probers: Get "http://127.0.0.1:9090/api/v1/targets": dial tcp 127.0.0.1:9090:
connect: connection refused
אם הפקודה nettest פועלת בהצלחה בלי לזהות כשלים בקישוריות,
מופיעה רשומת היומן הבאה:
I0211 21:58:34.689290 1 validate_metrics.go:78] Metric validation passed!
אם nettest מוצא בעיות בחיבור, הוא כותב רשומות ביומן כמו אלה:
E0211 06:40:11.948634 1 collector.go:65] Engine error: step validateMetrics failed:
"Error rate in percentage": probe from "10.200.0.3" to "172.26.115.210:80" has value 100.000000,
threshold is 1.000000
"Error rate in percentage": probe from "10.200.0.3" to "172.26.27.229:80" has value 100.000000,
threshold is 1.000000
"Error rate in percentage": probe from "192.168.3.248" to "echoserver-hostnetwork_10.200.0.2_8080"
has value 2.007046, threshold is 1.000000
למרות שסף ברירת המחדל הוא אחוז אחד (1.000000), אפשר להתעלם בבטחה משיעורי שגיאות של עד חמישה אחוזים. לדוגמה, שיעור השגיאות בקישוריות מכתובת ה-IP 192.168.3.248 אל echoserver-hostnetwork_10.200.0.2_8080 בדוגמה הקודמת הוא בערך שני אחוזים (2.007046). זו דוגמה לבעיית קישוריות שדווחה שאפשר להתעלם ממנה.
פירוש תוצאות הבדיקה
כש-nettest מסתיים ומוצא בעיה בקישוריות, מופיעה הרשומה הבאה ביומני ה-Pod של nettest:
"Error rate in percentage": probe from {src} to {dst} has value 100.000000, threshold is 1.000000
כאן, {src} ו-{dst} יכולים להיות:
echoserverכתובת ה-IP של ה-Pod: החיבור אל או מ-Pod בצומת.- כתובת ה-IP של הצומת: החיבור אל הצומת או ממנו.
- כתובת IP של השירות (פרטים מופיעים בטקסט הבא)
בנוסף, {dst} יכול להיות גם:
-
google.com: חיבור חיצוני.
dns: החיבור לשירות שאינוhostNetworkדרך DNS, כלומרechoserver-non-hostnetwork.nettest.svc.cluster.local.הפרטים של כתובת ה-IP של השירות מופיעים ברשומות של בקשות לבדיקת תקינות (probe) ביומן בפורמט JSON, כמו בדוגמה הבאה. בדוגמה הבאה של בדיקה אפשר לראות ש-
172.26.27.229:80היא הכתובת שלservice-clusterip. יש שתי בדיקות עם הערךtargets, אחת בשביל ה-Pod (pod-service-clusterip) ואחת בשביל הצומת (node-service-clusterip).probe { name: "node-service-clusterip" … targets { host_names: "172.26.27.229:80" }
אימות התיקונים
אחרי שפותרים את כל בעיות הקישוריות שדווחו, מסירים את nettest ה-Pod ומחילים מחדש את nettest המניפסט כדי להריץ מחדש את בדיקות הקישוריות.
לדוגמה, כדי להריץ מחדש את nettest ב-Ubuntu, מריצים את הפקודות הבאות:
kubectl -n nettest delete pod nettest
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/main/anthos-bm-utils/abm-nettest/nettest.yaml
לפנות nettest
כשמסיימים את הבדיקה, מריצים את הפקודות הבאות כדי להסיר את כל המשאבים של nettest:
kubectl delete namespace nettest
kubectl delete clusterroles nettest:nettest
kubectl delete clusterrolebindings nettest:nettest
המאמרים הבאים
לקבלת עזרה נוספת, אפשר לפנות אל Cloud Customer Care. אפשר גם לעיין במאמר קבלת תמיכה לקבלת מידע נוסף על מקורות מידע לתמיכה, כולל:
- דרישות לפתיחת בקשת תמיכה.
- כלים שיעזרו לכם לפתור בעיות, כמו הגדרת הסביבה, היומנים והמדדים.
- רכיבים נתמכים.