במדריך הזה נסביר איך להגדיר בדיקות פעילות למיקרו-שירותים של אפליקציות שנפרסו ב-Google Kubernetes Engine (GKE) באמצעות Prometheus בקוד פתוח.
במדריך הזה נעשה שימוש ב-Prometheus בקוד פתוח. עם זאת, בכל אשכול GKE Autopilot נפרס באופן אוטומטי השירות המנוהל ל-Prometheus, שהואGoogle Cloudפתרון מנוהל מלא, מרובה עננים וחוצה פרויקטים למדדי Prometheus. השירות המנוהל ל-Prometheus מאפשר לכם לנטר את עומסי העבודה שלכם ולשלוח התראות לגביהם באופן גלובלי באמצעות Prometheus, בלי שתצטרכו לנהל ולהפעיל את Prometheus באופן ידני בהיקף גדול.
אפשר גם להשתמש בכלים של קוד פתוח כמו Grafana כדי להציג בתצוגה חזותית את המדדים שנאספו על ידי Prometheus.
מטרות
- יוצרים אשכול.
- פורסים את Prometheus.
- פורסים את האפליקציה לדוגמה, Bank of Anthos.
- הגדרת בדיקות תקינות (liveness probes) של Prometheus.
- הגדרת התראות ב-Prometheus.
- הגדרת Alertmanager לקבלת התראה בערוץ Slack.
- מבצעים סימולציה של הפסקת שירות כדי לבדוק את Prometheus.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אתם יכולים להשתמש במחשבון התמחור.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.
Roles required to create a project
To create a project, you need the Project Creator role (
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles. -
Verify that billing is enabled for your Google Cloud project.
Enable the GKE API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.
Roles required to create a project
To create a project, you need the Project Creator role (
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles. -
Verify that billing is enabled for your Google Cloud project.
Enable the GKE API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.- מתקינים את Helm CLI
הכנת הסביבה
במדריך הזה משתמשים ב-Cloud Shell כדי לנהל משאבים שמתארחים ב-Google Cloud.
מגדירים את משתני הסביבה שמוגדרים כברירת מחדל:
gcloud config set project PROJECT_ID gcloud config set compute/region CONTROL_PLANE_LOCATIONמחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud. -
CONTROL_PLANE_LOCATION: האזור של Compute Engine במישור הבקרה של האשכול. במדריך הזה, האזור הואus-central1. בדרך כלל, כדאי לבחור אזור שקרוב אליכם.
-
משכפלים את המאגר לדוגמה שבו נעשה שימוש במדריך הזה:
git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git cd bank-of-anthos/יוצרים אשכול:
gcloud container clusters create-auto CLUSTER_NAME \ --release-channel=CHANNEL_NAME \ --location=CONTROL_PLANE_LOCATIONמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם לאשכול החדש. -
CHANNEL_NAME: השם של ערוץ הפצה.
-
פריסת Prometheus
מתקינים את Prometheus באמצעות תרשים Helm לדוגמה:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install tutorial prometheus-community/kube-prometheus-stack \
--values extras/prometheus/oss/values.yaml \
--wait
הפקודה הזו מתקינה את Prometheus עם הרכיבים הבאים:
- Prometheus Operator: דרך פופולרית לפריסה ולהגדרה של Prometheus בקוד פתוח.
- Alertmanager: מטפל בהתראות שנשלחות משרת Prometheus ומנתב אותן לאפליקציות, כמו Slack.
- Blackbox exporter: מאפשר ל-Prometheus לבדוק נקודות קצה באמצעות HTTP, HTTPS, DNS, TCP, ICMP ו-gRPC.
פריסת Bank of Anthos
פורסים את האפליקציה לדוגמה Bank of Anthos:
kubectl apply -f extras/jwt/jwt-secret.yaml
kubectl apply -f kubernetes-manifests
התראות ב-Slack
כדי להגדיר התראות ב-Slack, צריך ליצור אפליקציית Slack, להפעיל את התכונה Incoming Webhooks באפליקציה ולהתקין את האפליקציה בסביבת עבודה של Slack.
יצירת אפליקציית Slack
מצטרפים למרחב עבודה ב-Slack, או על ידי הרשמה באמצעות כתובת האימייל או באמצעות הזמנה שנשלחה על ידי אדמין ב-Workspace.
נכנסים ל-Slack באמצעות שם סביבת העבודה ופרטי הכניסה לחשבון Slack.
-
- בתיבת הדו-שיח יצירת אפליקציה, לוחצים על מאפס.
- מציינים שם לאפליקציה ובוחרים את סביבת העבודה שלכם ב-Slack.
- לחצו על Create App.
- בקטע הוספת תכונות ופונקציות, לוחצים על Incoming Webhooks (הודעות webhook נכנסות).
- לוחצים על המתג הפעלת Webhooks לשיחות נכנסות.
- בקטע Webhook URLs for Your Workspace (כתובות URL של Webhook לסביבת העבודה), לוחצים על Add New Webhook to Workspace (הוספת Webhook חדש לסביבת העבודה).
- בדף ההרשאה שנפתח, בוחרים ערוץ לקבלת התראות.
- לוחצים על אישור.
- Webhook לאפליקציית Slack מוצג בקטע Webhook URLs for Your Workspace (כתובות webhook למרחב העבודה). שומרים את כתובת ה-URL למועד מאוחר יותר.
הגדרת Alertmanager
יוצרים סוד של Kubernetes כדי לאחסן את ה-webhook URL:
kubectl create secret generic alertmanager-slack-webhook --from-literal webhookURL=SLACK_WEBHOOK_URL
kubectl apply -f extras/prometheus/oss/alertmanagerconfig.yaml
מחליפים את SLACK_WEBHOOK_URL בכתובת ה-URL של ה-webhook מהקטע הקודם.
הגדרת Prometheus
בודקים את קובץ המניפסט הבא:
קובץ המניפסט הזה מתאר בדיקות פעילות של Prometheus וכולל את השדות הבאים:
-
spec.jobName: שם המשימה שהוקצה למדדים שנאספו. -
spec.prober.url: כתובת ה-URL של השירות של blackbox exporter. זה כולל את יציאת ברירת המחדל של הכלי blackbox exporter, שמוגדרת בתרשים Helm. -
spec.prober.path: הנתיב לאיסוף המדדים. -
spec.targets.staticConfig.labels: התוויות שהוקצו לכל המדדים שחולצו מהיעדים. spec.targets.staticConfig.static: רשימת המארחים לבדיקה.
-
מחילים את המניפסט על האשכול. השתמשת בתרשים Helm של קהילת Prometheus, ולכן השתנו היציאה והשם של שירות Blackbox exporter. כדי לתקן את כתובת ה-URL שמוגדרת בהגדרות הקשיחות במניפסט שהורדתם לפני שמחילים אותו, מריצים את הפקודה הבאה
sed:sed```sh sed -i 's/tutorial-kube-prometheus-blackbox-exporter:19115/tutorial-prometheus-blackbox-exporter:9115/g' extras/prometheus/oss/probes.yaml kubectl apply -f extras/prometheus/oss/probes.yaml ```- בודקים את קובץ המניפסט הבא:
קובץ המניפסט הזה מתאר
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: התוויות שרוצים להוסיף או להחליף.
מחילים את המניפסט על האשכול. הערה: לפני שמריצים את הפקודה הבאה, בודקים את הקובץ
rules.yamlכדי לוודא שאין שגיאות בביטויי PromQL או בהגדרות ההתראות, ומתקנים אותן.kubectl apply -f extras/prometheus/oss/rules.yaml
סימולציה של הפסקת שירות
כדי לדמות הפסקת חשמל, משנים את קנה המידה של הפריסה
contactsלאפס:kubectl scale deployment contacts --replicas 0אמורה להופיע הודעת התראה בערוץ של סביבת העבודה ב-Slack. יכול להיות שיחלפו עד 5 דקות עד ש-GKE ישנה את קנה המידה של הפריסה.
שחזור הפריסה של
contacts:kubectl scale deployment contacts --replicas 1הודעה על פתרון ההתראה אמורה להופיע בערוץ שלכם בסביבת העבודה ב-Slack. יכול להיות שיחלפו עד 5 דקות עד ש-GKE ישנה את קנה המידה של הפריסה.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
מחיקת משאבים בודדים
מחיקת משאבי Kubernetes:
kubectl delete -f kubernetes-manifestsמסירים את Prometheus:
helm uninstall tutorialמוחקים את אשכול GKE:
gcloud container clusters delete CLUSTER_NAME --quiet
המאמרים הבאים
- Google Cloud השירות המנוהל ל-Prometheus הוא פתרון גלובלי לניהול מדדים שמבוסס על Prometheus, מנוהל באופן מלא ומוטמע כברירת מחדל בכל אשכולות Autopilot.
- כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.