סדרת המדריכים הזו מיועדת לאדמינים ולמפעילים בתחום ה-IT שרוצים לפרוס, להריץ ולנהל סביבות אפליקציות מודרניות שפועלות ב-Google Kubernetes Engine (GKE). בסדרת המדריכים הזו תלמדו איך להגדיר מעקב והתראות, לשנות את גודל עומסי העבודה ולבצע סימולציה של כשל, והכול באמצעות אפליקציית המיקרו-שירותים לדוגמה של Cymbal Bank:
- יצירת אשכול ופריסת אפליקציה לדוגמה
- מעקב באמצעות השירות המנוהל של Google Cloud ל-Prometheus (המדריך הזה)
- התאמה לעומסי עבודה
- סימולציה של כשל
- ניהול שינויים באופן מרכזי
סקירה כללית ומטרות
אפליקציית הדוגמה Cymbal Bank שבה נעשה שימוש בסדרת המדריכים הזו מורכבת ממספר מיקרו-שירותים שפועלים באשכול GKE. בעיות באחד מהשירותים האלה עלולות לגרום לחוויה לא טובה ללקוחות הבנק, למשל חוסר אפשרות לגשת לאפליקציה של הבנק. ככל שתקבלו מידע על בעיות בשירותים מוקדם יותר, כך תוכלו להתחיל לפתור את הבעיות מהר יותר.
במדריך הזה תלמדו איך לעקוב אחרי עומסי עבודה באשכול GKE באמצעות השירות המנוהל של Google Cloud ל-Prometheus ו-Cloud Monitoring. תלמדו איך לבצע את המשימות הבאות:
יוצרים webhook של Slack עבור Alertmanager.
מגדירים את Prometheus כדי לעקוב אחרי הסטטוס של אפליקציה לדוגמה שמבוססת על מיקרו-שירותים.
מדמים הפסקת חשמל ובודקים את ההתראות שנשלחות באמצעות ה-webhook של Slack.
עלויות
אם מפעילים את GKE ומפריסים את אפליקציית הדוגמה Cymbal Bank בסדרת הדרכות הזו, יחויבו עלויות לכל אשכול עבור GKE ב- Google Cloud , כמו שמופיע בדף התמחור, עד להשבתת GKE או למחיקת הפרויקט.
אתם גם אחראים לעלויות אחרות Google Cloud שנצברו בזמן הפעלת אפליקציית הדוגמה Cymbal Bank, כמו חיובים על מכונות וירטואליות ב-Compute Engine ועל Cloud Monitoring.
לפני שמתחילים
כדי ללמוד איך לנטר את עומסי העבודה, צריך להשלים את המדריך הראשון כדי ליצור אשכול GKE שמשתמש ב-Autopilot ולפרוס את אפליקציית הדוגמה Cymbal Bank שמבוססת על מיקרו-שירותים.
מומלץ להשלים את סדרת המדריכים הזו ליצירת אפליקציות שניתן להרחיב את השימוש בהן. במהלך ההתקדמות בסדרת ההדרכות, תרכשו מיומנויות חדשות ותשתמשו ב Google Cloud מוצרים ובשירותים נוספים.
כדי להציג דוגמה לאופן שבו אפשר להשתמש בשירות מנוהל של Google Cloud ל-Prometheus כדי ליצור הודעות לפלטפורמת תקשורת, במדריך הזה נשתמש ב-Slack. בפריסות ייצור משלכם, אתם יכולים להשתמש בכלי התקשורת המועדף של הארגון כדי לעבד ולשלוח הודעות כשיש בעיה באשכול GKE.
להצטרף למרחב עבודה ב-Slack, או על ידי הרשמה באמצעות כתובת האימייל או באמצעות הזמנה שנשלחה על ידי אדמין ב-Workspace.
יצירת אפליקציית Slack
חלק חשוב בהגדרת המעקב הוא לוודא שתקבלו התראה כשמתרחשים אירועים שדורשים פעולה, כמו הפסקות שירות. דוגמה נפוצה לכך היא שליחת התראות לכלי תקשורת כמו Slack, שבו אתם משתמשים במדריך הזה. ב-Slack יש תכונת וווב-הוקס (webhooks) שמאפשרת לאפליקציות חיצוניות, כמו פריסות הייצור שלכם, ליצור הודעות. אתם יכולים להשתמש בכלים אחרים לתקשורת בארגון כדי לעבד ולשלוח הודעות כשיש בעיה באשכול GKE.
אשכולות GKE שמשתמשים ב-Autopilot כוללים מופע של השירות המנוהל של Google Cloud ל-Prometheus. המופע הזה יכול ליצור התראות כשמשהו קורה לאפליקציות שלכם. אחר כך אפשר להשתמש ב-webhook של Slack כדי לשלוח הודעה לסביבת העבודה שלכם ב-Slack, וכך תקבלו התראות מיידיות כשיש בעיה.
כדי להגדיר התראות ב-Slack על סמך התראות שנוצרו על ידי Prometheus, צריך ליצור אפליקציית Slack, להפעיל את התכונה Incoming Webhooks באפליקציה ולהתקין את האפליקציה בסביבת עבודה של Slack.
נכנסים ל-Slack באמצעות שם סביבת העבודה ופרטי הכניסה לחשבון Slack.
-
- בתיבת הדו-שיח יצירת אפליקציה, לוחצים על מאפס.
- מציינים שם אפליקציה ובוחרים את סביבת העבודה שלכם ב-Slack.
- לחצו על Create App.
- בקטע הוספת תכונות ופונקציונליות, לוחצים על Incoming Webhooks (הודעות webhook נכנסות).
- לוחצים על המתג הפעלת וווב-הוקים לשיחות נכנסות.
- בקטע Webhook URLs for Your Workspace (כתובות URL של Webhook לסביבת העבודה), לוחצים על Add New Webhook to Workspace (הוספת Webhook חדש לסביבת העבודה).
- בדף ההרשאה שנפתח, בוחרים ערוץ לקבלת התראות.
- לוחצים על אישור.
- Webhook לאפליקציית Slack מוצג בקטע Webhook URLs for Your Workspace. שומרים את כתובת ה-URL למועד מאוחר יותר.
הגדרת Alertmanager
ב-Prometheus, Alertmanager מעבד אירועי מעקב שהפריסות שלכם יוצרות. Alertmanager יכול לדלג על אירועים כפולים, לקבץ אירועים קשורים ולשלוח התראות, כמו באמצעות webhook של Slack. בסעיף הזה מוסבר איך להגדיר את Alertmanager לשימוש ב-webhook החדש של Slack. בקטע הבא של המדריך, הגדרת Prometheus, מוסבר איך מציינים את האופן שבו רוצים ש-Alertmanager יעבד אירועים כדי לשלוח אותם.
כדי להגדיר את Alertmanager כך שישתמש ב-webhook של Slack, מבצעים את השלבים הבאים:
משנים את הספריות למאגר Git שכולל את כל קובצי המניפסט לדוגמה של Cymbal Bank מהמדריך הקודם:
cd ~/bank-of-anthos/אם צריך, משנים את מיקום הספרייה למיקום שבו שיבטתם בעבר את המאגר.
מעדכנים את קובץ ה-YAML לדוגמה של Alertmanager עם כתובת ה-URL של ה-webhook של אפליקציית Slack:
sed -i "s@SLACK_WEBHOOK_URL@SLACK_WEBHOOK_URL@g" "extras/prometheus/gmp/alertmanager.yaml"מחליפים את
SLACK_WEBHOOK_URLבכתובת ה-URL של ה-webhook מהקטע הקודם.כדי להשתמש באופן דינמי בכתובת ה-webhook הייחודית שלכם ב-Slack בלי לבצע שינויים בקוד האפליקציה, אתם יכולים להשתמש ב-Kubernetes Secret. קוד האפליקציה קורא את הערך של הסוד הזה. באפליקציות מורכבות יותר, היכולת הזו מאפשרת לשנות או להחליף ערכים מסיבות שקשורות לאבטחה או לתאימות.
יוצרים סוד של Kubernetes עבור Alertmanager באמצעות מניפסט לדוגמה של YAML שמכיל את ה-webhook URL של Slack:
kubectl create secret generic alertmanager \ -n gmp-public \ --from-file=extras/prometheus/gmp/alertmanager.yamlPrometheus יכול להשתמש בexporters כדי לקבל מדדים מאפליקציות בלי לבצע שינויים בקוד. הכלי Prometheus blackbox exporter מאפשר לכם לבדוק נקודות קצה כמו HTTP או HTTPS. הכלי הזה מתאים למקרים שבהם לא רוצים או לא יכולים לחשוף את הפעולות הפנימיות של האפליקציה ל-Prometheus. ה-Prometheus blackbox exporter יכול לפעול בלי לבצע שינויים בקוד אפליקציה כדי לחשוף מדדים ל-Prometheus.
פורסים את כלי הייצוא של Prometheus blackbox באשכול:
kubectl apply -f extras/prometheus/gmp/blackbox-exporter.yaml
הגדרת Prometheus
אחרי שמגדירים את Alertmanager כך שישתמש ב-webhook של Slack, צריך להגדיר ב-Prometheus מה לעקוב ב-Cymbal Bank, ואילו סוגי אירועים אתם רוצים ש-Alertmanager ישלח לכם לגביהם התראות באמצעות ה-webhook של Slack.
באפליקציית הדוגמה Cymbal Bank שבה משתמשים במדריכים האלה, יש מיקרו-שירותים שונים שפועלים באשכול GKE. בעיה אחת שכדאי לדעת עליה בהקדם האפשרי היא אם אחד מהשירותים של Cymbal Bank הפסיק להגיב לבקשות בצורה רגילה, מה שעשוי להצביע על כך שהלקוחות לא יכולים לגשת לאפליקציה. אתם יכולים להגדיר את Prometheus כך שיגיב לאירועים על סמך המדיניות של הארגון שלכם.
Probes
אתם יכולים להגדיר בדיקות של Prometheus למשאבים שאתם רוצים לעקוב אחריהם. הבדיקות האלה יכולות ליצור התראות על סמך התגובה שהן מקבלות. באפליקציית הדוגמה של Cymbal Bank, אפשר להשתמש בבדיקות HTTP שבודקות קודי תגובה ברמה 200 מהשירותים. תגובה ברמה HTTP 200 מציינת שהשירות פועל בצורה תקינה ויכול להגיב לבקשות. אם יש בעיה והבדיקה לא מקבלת את התגובה הצפויה, אפשר להגדיר כללים של Prometheus שמפיקים התראות ש-Alertmanager מעבד ומבצע פעולות נוספות.
יוצרים כמה בדיקות Prometheus כדי לעקוב אחרי סטטוס ה-HTTP של המיקרו-שירותים השונים באפליקציית הדוגמה Cymbal Bank. דוגמה למניפסט:
כפי שמוצג בקובץ המניפסט הזה, מומלץ שכל בדיקת חיות (liveness probe) של
PodMonitoringPrometheus תנטר כל פריסה בנפרד.כדי ליצור את בקשות הבדיקה של Prometheus, מחילים את המניפסט על האשכול:
kubectl apply -f extras/prometheus/gmp/probes.yaml
כללים
מערכת Prometheus צריכה לדעת מה אתם רוצים לעשות על סמך התגובה שמתקבלת מהבדיקות שיצרתם בשלבים הקודמים. אתם מגדירים את התגובה הזו באמצעות כללי Prometheus.
במדריך הזה יוצרים כללי Prometheus כדי ליצור התראות בהתאם לתגובה לבדיקת הפעילות. לאחר מכן, Alertmanager מעבד את הפלט של הכללים האלה כדי ליצור התראות באמצעות ה-webhook של Slack.
ליצור כללים שמפיקים אירועים על סמך התגובה לבדיקות הפעילות. בדוגמה הבאה אפשר לראות קובץ manifest:
קובץ המניפסט הזה מתאר
PrometheusRuleוכולל את השדות הבאים:-
spec.groups.[*].name: השם של קבוצת הכללים. -
spec.groups.[*].interval: התדירות שבה מתבצעת הערכה של הכללים בקבוצה. -
spec.groups.[*].rules[*].alert: שם ההתראה. -
spec.groups.[*].rules[*].expr: ביטוי PromQL להערכה. -
spec.groups.[*].rules[*].for: משך הזמן שצריך להמתין להתראות לפני שהן נחשבות כהתראות שמופעלות. -
spec.groups.[*].rules[*].annotations: רשימה של הערות להוספה לכל התראה. ההגדרה הזו תקפה רק לכללי התראה. -
spec.groups.[*].rules[*].labels: התוויות שרוצים להוסיף או להחליף.
-
כדי ליצור את הכללים, מחילים את המניפסט על האשכול:
kubectl apply -f extras/prometheus/gmp/rules.yaml
סימולציה של הפסקת שירות
כדי לוודא שהבדיקות, הכללים וההגדרות של Alertmanager ב-Prometheus נכונים, כדאי לבדוק שהתראות נשלחות כשמתגלה בעיה. אם לא תבדקו את התהליך הזה, יכול להיות שלא תדעו על הפסקת שירות בייצור אם משהו ישתבש.
כדי לדמות הפסקה של אחד מהמיקרו-שירותים, משנים את קנה המידה של
contactsDeployment לאפס. אם אין מקרים של השירות, אפליקציית הדוגמה של Cymbal Bank לא יכולה לקרוא את הפרטים ליצירת קשר של הלקוחות:kubectl scale deployment contacts --replicas 0יכול להיות שיחלפו עד 5 דקות עד ש-GKE יקטין את קנה המידה של הפריסה.
בודקים את הסטטוס של הפריסות באשכול ומוודאים ש
contactsהפריסה מצטמצמת בצורה נכונה:kubectl get deploymentsבדוגמת הפלט הבאה, הפריסה
contactsצומצמה בהצלחה ל-0מופעים:NAME READY UP-TO-DATE AVAILABLE AGE balancereader 1/1 1 1 17m blackbox-exporter 1/1 1 1 5m7s contacts 0/0 0 0 17m frontend 1/1 1 1 17m ledgerwriter 1/1 1 1 17m loadgenerator 1/1 1 1 17m transactionhistory 1/1 1 1 17m userservice 1/1 1 1 17mאחרי שהפריסה
contactsמצטמצמת לאפס, בדיקת ה-Prometheus מדווחת על קוד שגיאת HTTP. שגיאת ה-HTTP הזו יוצרת התראה עבור Alertmanager, ואז המערכת מעבדת אותה.בודקים אם בערוץ שלכם במרחב העבודה ב-Slack מופיעה הודעה על הפסקת שירות עם טקסט שדומה לדוגמה הבאה:
[FIRING:1] ContactsUnavailable Severity: Warning :warning: Summary: Contacts Service is unavailable Namespace: default Check Contacts pods and it's logsבמקרה של הפסקת שירות אמיתית, אחרי שתקבלו את ההתראה ב-Slack, תתחילו לפתור את הבעיה ולשחזר את השירותים. במדריך הזה, נדמה את התהליך הזה ונשחזר את הפריסה של
contactsעל ידי הקטנת מספר הרפליקות:kubectl scale deployment contacts --replicas 1יכול להיות שיחלפו עד 5 דקות עד שהפריסה תתרחב ועד שהבדיקה של Prometheus תקבל תגובת HTTP 200. כדי לבדוק את הסטטוס של הפריסות, משתמשים בפקודה
kubectl get deployments.כשמתקבלת תגובה תקינה לבדיקה של Prometheus, Alertmanager מנקה את האירוע. בערוץ בסביבת העבודה שלכם ב-Slack אמורה להופיע הודעה על פתרון ההתראה, כמו בדוגמה הבאה:
[RESOLVED] ContactsUnavailable Severity: Warning :warning: Summary: Contacts Service is unavailable Namespace: default Check Contacts pods and it's logs
הסרת המשאבים
מומלץ להשלים את סדרת המדריכים הזו של Cymbal Bank לפי הסדר. במהלך ההתקדמות בסדרת ההדרכות, תרכשו מיומנויות חדשות ותשתמשו ב Google Cloud מוצרים ובשירותים נוספים.
אם אתם רוצים לקחת הפסקה לפני שתמשיכו למדריך הבא, ולא רוצים לצבור חיובים ב Google Cloud חשבון שלכם על המשאבים שבהם השתמשתם במדריך הזה, אתם יכולים למחוק את הפרויקט שיצרתם.
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
במדריך הבא מוסבר איך להרחיב את הפריסות ב-GKE.