איסוף והצגה של מדדי מצב של kube

בדף הזה מוסבר איך להגדיר אשכול Google Kubernetes Engine ‏ (GKE) כדי לשלוח קבוצה נבחרת של מצבי kube, כולל מדדים של Pod ו-Deployments, ל-Cloud Monitoring באמצעות השירות המנוהל של Google Cloud ל-Prometheus. בנוסף, בדף הזה מוסבר איך המדדים האלה מעוצבים כשהם נכתבים ב-Monitoring, ואיך לשלוח שאילתות לגבי מדדים.

לפני שמתחילים

לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:

  • מפעילים את ממשק ה-API של Google Kubernetes Engine.
  • הפעלת Google Kubernetes Engine API
  • אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.

דרישות

כדי לאסוף מדדים של מצב kube, אשכול GKE צריך לעמוד בדרישות הבאות:

  • האשכול צריך להריץ את הגרסאות הבאות על סמך המדד שרוצים להפעיל:
    • כדי להפעיל את חבילת המדדים JobSet, האשכול צריך לפעול בגרסה 1.32.1-gke.1357001 ואילך. החל מגרסה 1.32.1-gke.1357001, חבילת המדדים JobSet מופעלת כברירת מחדל באשכולות GKE Standard ו-Autopilot שנוצרו לאחרונה.
    • המדד kube_jobset_restarts זמין באשכולות מגרסה 1.32 החל מגרסה 1.32.4-gke.1767000 ובאשכולות מגרסה 1.33 החל מגרסה 1.33.0-gke.1868000.
    • כדי להפעיל חבילות מדדים אחרות שמתוארות בדף הזה, צריך להריץ באשכול GKE 1.27.2-gke.1200 או גרסה מתקדמת יותר. החל מגרסה 1.29.2-gke.2000 באשכולות GKE Standard ומגרסה 1.27.4-gke.900 באשכולות GKE Autopilot, חבילת המדדים של מצב Kube מופעלת כברירת מחדל.
  • צריך להפעיל את מדדי המערכת באשכול.
  • צריך להפעיל באשכול את האיסוף המנוהל של השירות המנוהל של Google Cloud ל-Prometheus. איסוף מנוהל של השירות המנוהל של Google Cloud ל-Prometheus מופעל כברירת מחדל באשכולות חדשים.

הגדרת האיסוף של מדדי מצב kube

אפשר להפעיל את Kube State Metrics באמצעות המסוף ( Google Cloud ),‏ ה-CLI של gcloud או Terraform:

המסוף

אפשר להפעיל את המדדים של מצב kube מהכרטיסייה Observability (יכולת צפייה) עבור אשכול או פריסה באשכול. אפשר גם לראות תצוגה מקדימה של התרשימים והמדדים הזמינים לפני שמפעילים את חבילת המדדים.

בכרטיסייה Observability (יכולת צפייה) של אשכול, אפשר לסנן את קבוצת התרשימים של מדדי מצב kube לפי שני הפריטים הבאים:

  • מצב עומסי העבודה: כולל את המדדים של משאבי Pods,‏ Deployments,‏ StatefulSets,‏ DaemonSets ו-HorizontalPodAutoscaler.
  • אחסון > מתמשך: כולל את המדדים של נפחי אחסון מתמיד ודרישות נפח אחסון מתמיד.

אפשר להפעיל את אחת מקבוצות המדדים או את שתיהן.

כדי להפעיל את מדדי מצב ה-kube מהכרטיסייה Observability (יכולת צפייה) עבור אשכול, מבצעים את הפעולות הבאות:

  1. נכנסים לדף Kubernetes clusters במסוף Google Cloud .

    כניסה אל Kubernetes clusters

    אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Kubernetes Engine.

  2. לוחצים על שם האשכול ואז על הכרטיסייה Observability (יכולת תצפית).

  3. בוחרים באפשרות Workloads State או באפשרות Storage > Persistent מרשימת התכונות.

  4. לוחצים על הפעלת החבילה.

    אם חבילת המדדים של מצב ה-kube כבר מופעלת, יוצג לכם במקום זאת סט של תרשימים של מדדי מצב ה-kube.

כדי להפעיל את kube state metrics מהכרטיסייה Observability עבור פריסה, מבצעים את הפעולות הבאות:

  1. במסוף Google Cloud , עוברים לדף Workloads:

    עוברים אל עומסי עבודה

    אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Kubernetes Engine.

  2. לוחצים על שם הפריסה ואז על הכרטיסייה Observability.

  3. בוחרים באפשרות Kube State מתוך רשימת התכונות.

  4. לוחצים על הפעלת החבילה. החבילה מופעלת לכל האשכול.

    אם חבילת המדדים של מצב ה-kube כבר מופעלת, יוצגו לכם קבוצה של תרשימים של מדדים מ-Pods, מ-Deployments ומ-Horizontal Pod Autoscalers.

כדי להגדיר את מדדי מצב ה-kube מהכרטיסייה פרטים של האשכול:

  1. נכנסים לדף Kubernetes clusters במסוף Google Cloud .

    כניסה אל Kubernetes clusters

    אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Kubernetes Engine.

  2. לוחצים על שם האשכול.

  3. בשורה Features עם התווית Cloud Monitoring, לוחצים על סמל Edit.

  4. בתיבת הדו-שיח Edit Cloud Monitoring שמופיעה, מוודאים שהאפשרות Enable Cloud Monitoring מסומנת.

  5. בתפריט הנפתח רכיבים, בוחרים את רכיבי kube state שמהם רוצים לאסוף מדדים.

  6. לוחצים על OK.

  7. לוחצים על שמירת השינויים.

gcloud

עדכון האשכול כדי לאסוף מדדים:

gcloud container clusters update CLUSTER_NAME \
    --location=COMPUTE_LOCATION \
    --enable-managed-prometheus \
    --monitoring=SYSTEM,DAEMONSET,DEPLOYMENT,HPA,POD,STATEFULSET,STORAGE

מחליפים את מה שכתוב בשדות הבאים:

הערכים שסופקו לדגל monitoring מחליפים כל הגדרה קודמת.

Terraform

כדי להגדיר את איסוף המדדים של מצב ה-kube באמצעות Terraform, אפשר לעיין בבלוק monitoring_config ב במאגר Terraform של google_container_cluster. מידע כללי על שימוש ב- Google Cloud עם Terraform זמין במאמר Terraform עם Google Cloud.

מכסה

המדדים של Kube State צורכים את המכסה Time series ingestion requests per minute של Cloud Monitoring API. לפני שמפעילים את kube state metrics, כדאי לבדוק את השימוש המקסימלי האחרון במכסה הזו. אם יש לכם הרבה אשכולות באותו פרויקט או שאתם כבר מתקרבים למגבלת המכסה הזו, אתם יכולים לבקש להגדיל את מכסת הפרויקט לפני הפעלת חבילת הניטור.

תמחור

המדדים של מצב Kube משתמשים בשירות המנוהל של Google Cloud ל-Prometheus כדי לטעון מדדים ל-Cloud Monitoring. החיובים על הטמעת המדדים האלה ב-Cloud Monitoring מבוססים על מספר הדגימות שהוטמעו.

מידע נוסף זמין במאמר בנושא תמחור של Cloud Monitoring.

פורמט המדד

כל מדדי מצב ה-kube של Kubernetes שנכתבים ל-Cloud Monitoring משתמשים בסוג המשאב prometheus_target. לכל שם מדד יש קידומת prometheus.googleapis.com/ וסיומת שמציינת את סוג המדד של Prometheus, כמו /gauge,‏ /histogram או /counter. אחרת, כל שם של מדד זהה לשם המדד שמוצג על ידי Kubernetes בקוד פתוח.

ייצוא מ-Cloud Monitoring

אפשר לייצא את מדדי מצב ה-kube מ-Cloud Monitoring באמצעות Cloud Monitoring API. מכיוון שכל מדדי מצב ה-kube נקלטים באמצעות השירות המנוהל של Google Cloud ל-Prometheus, אפשר לשלוח שאילתות על מדדי מצב ה-kube באמצעות שפת השאילתות של Prometheus‏ (PromQL). אפשר גם לשלוח שאילתות לגביהם באמצעות שפת שאילתת מעקב (MQL).

שאילתות לגבי מדדים

כששולחים שאילתות על מדדי מצב של kube, השם שבו משתמשים תלוי אם משתמשים ב-PromQL או בתכונות שמבוססות על Cloud Monitoring, כמו MQL או Metrics Explorer ממשק מבוסס-תפריט.

בטבלאות הבאות של מדדי מצב kube מוצגות שתי גרסאות של כל שם מדד:

  • שם המדד ב-PromQL: כשמשתמשים ב-PromQL בדפי Cloud Monitoring במסוף Google Cloud או בשדות PromQL ב-Cloud Monitoring API, צריך להשתמש בשם המדד ב-PromQL.
  • שם המדד ב-Cloud Monitoring כשמשתמשים בתכונות אחרות של Cloud Monitoring, צריך להשתמש בשם המדד ב-Cloud Monitoring שמופיע בטבלאות שבהמשך. לשם הזה צריך להוסיף את הקידומת prometheus.googleapis.com/, שלא מופיעה ברשומות שבטבלה.

מדדי אחסון

שמות המדדים של Cloud Monitoring בטבלה הזו חייבים להתחיל בקידומת prometheus.googleapis.com/. התחילית הזו הושמטה מהערכים בטבלה.

שם המדד ב-PromQL
שם המדד ב-Cloud Monitoring
‫Kind, Type, Unit
Monitored resources
Required GKE version
תיאור
תוויות
kube_persistentvolume_capacity_bytes
kube_persistentvolume_capacity_bytes/gauge
GAUGEDOUBLEBy
prometheus_target
1.27.2-gke.1200
קיבולת נפח אחסון מתמיד בבייטים. נדגמים כל 30 שניות.

persistentvolume: persistentvolume.
kube_persistentvolume_claim_ref
kube_persistentvolume_claim_ref/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מידע על הפניה לדרישת נפח אחסון מתמיד. נדגמים כל 30 שניות.

claim_name: claim_name. ‫
name: שם. ‫
persistentvolume: persistentvolume.
kube_persistentvolume_info
kube_persistentvolume_info/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מידע על persistentvolume. נדגמים כל 30 שניות.

csi_driver: csi_driver. ‫
csi_volume_handle: csi_volume_handle. ‫
local_fs: local_fs. ‫
local_path: local_path. ‫
persistentvolume: persistentvolume. ‫
storageclass: storageclass.
kube_persistentvolume_status_phase
kube_persistentvolume_status_phase/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
השלב מציין אם נפח זמין, קשור לתלונה או שוחרר על ידי תלונה. נדגמים כל 30 שניות.

persistentvolume: persistentvolume. ‫
phase: שלב.
kube_persistentvolumeclaim_info
kube_persistentvolumeclaim_info/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מידע על דרישת נפח אחסון מתמיד. נדגמים כל 30 שניות.

persistentvolumeclaim: persistentvolumeclaim. ‫
storageclass: storageclass. ‫
volumename: שם הכרך.
kube_persistentvolumeclaim_resource_requests_storage_bytes
kube_persistentvolumeclaim_resource_requests_storage_bytes/gauge
GAUGEDOUBLEBy
prometheus_target
1.27.2-gke.1200
הקיבולת של נפח האחסון שנדרש על ידי דרישת נפח האחסון המתמיד. נדגמים כל 30 שניות.

persistentvolumeclaim: persistentvolumeclaim.
kube_persistentvolumeclaim_status_phase
kube_persistentvolumeclaim_status_phase/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
השלב שבו נמצאת כרגע דרישת נפח האחסון המתמיד. נדגמים כל 30 שניות.

persistentvolumeclaim: persistentvolumeclaim. ‫
phase: שלב.

מידע נוסף זמין במאמרים בנושא מדדים של PersistentVolume ומדדים של PersistentVolumeClaim.

מדדים של Pod

‫Pod הוא קבוצה של קונטיינר אחד או יותר עם מפרט לגבי אופן ההפעלה של הקונטיינרים, שמשתפים אחסון ומשאבי רשת.

טבלה של מדדי Pod

מדדי ה-Pod מאפשרים לכם לעקוב אחרי ההתנהגות של ה-Pods ולקבל התראות לגביה. בטבלה הבאה מפורטים המדדים שזמינים בחבילת המדדים של kube state.

שמות המדדים של Cloud Monitoring בטבלה הזו חייבים להתחיל בקידומת prometheus.googleapis.com/. התחילית הזו הושמטה מהערכים בטבלה.

שם המדד ב-PromQL
שם המדד ב-Cloud Monitoring
‫Kind, Type, Unit
Monitored resources
Required GKE version
תיאור
תוויות
kube_pod_container_status_ready
kube_pod_container_status_ready/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מתאר אם בדיקת המוכנות של המאגרים הצליחה. נדגמים כל 30 שניות.

container: container. ‫
pod: צוות. ‫
uid: uid.
kube_pod_container_status_waiting_reason
kube_pod_status_container_status_waiting_reason/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מתאר את הסיבה לכך שהמאגר נמצא כרגע במצב המתנה. נדגמים כל 30 שניות.

container: container. ‫
pod: צוות. ‫
reason: סיבה. ‫
uid: uid.
kube_pod_status_phase
kube_pod_status_phase/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
השלב הנוכחי של ה-Pod. נדגמים כל 30 שניות.

phase: phase. ‫
pod: צוות. ‫
uid: uid.
kube_pod_status_unschedulable
kube_pod_status_unschedulable/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מתאר את הסטטוס של הפוד שלא ניתן לתזמן אותו. נדגמים כל 30 שניות.

pod: pod. ‫
uid: uid.

מידע נוסף זמין במאמר מדדים של Pod.

דוגמאות לשאילתות על מדדים של Pod

כדי לקבוע אם יש לכם Pods שלא ניתן לתזמן, משתמשים בביטוי הבא של PromQL:

sum(kube_pod_status_unschedulable{cluster="CLUSTER", namespace="NAMESPACE"})

כדי לקבל התראה על מספר מסוים של פודים שלא ניתן לתזמן במרחב שמות, אפשר להשתמש בביטוי PromQL הבא:

sum(kube_pod_status_unschedulable{cluster="CLUSTER", namespace="NAMESPACE"}) > LIMIT

אפשר להשתמש במדד kube_pod_container_status_waiting_reason כדי ליצור התראה על מאגר תקוע במצב המתנה ספציפי, באמצעות ביטוי PromQL כמו זה:

max_over_time(kube_pod_container_status_waiting_reason{reason="REASON", cluster="CLUSTER", namespace="NAMESPACE"}[5m]) >= 1

הערך של REASON מציין את מצב ההמתנה של מאגר התגים, לדוגמה:

  • CrashLoopBackOff
  • ImagePullBackOff
  • ContainerCreating

כדי ליצור התראה על קונטיינר שנתקע באחד ממצבי ההמתנה, משתמשים בביטוי PromQL הבא:

max_over_time(kube_pod_container_status_waiting_reason{cluster="CLUSTER", namespace="NAMESPACE"}[5m]) >= 1

כדי לקבוע כמה קונטיינרים נכשלים בבדיקות המוכנות, משתמשים בביטוי PromQL הבא

sum(kube_pod_container_status_ready) by (pod, container) == 0

חלק מהשאילתות והביטויים של ההתראות בקטע הזה הותאמו מקובץ kubernetes-apps.yaml במאגר התרשימים של Prometheus community Kubernetes Helm ב-GitHub.

מדריכים אינטראקטיביים

מדדי מצב של Kube משמשים גם בחוברות ההדרכה האינטראקטיביות של GKE לפתרון בעיות של תרמילים שלא ניתן לתזמן או של תרמילים שמתרסקים בלולאה. מידע נוסף על מצבי הכשל האלה זמין במאמרי פתרון הבעיות הבאים:

אם חבילת המדדים של מצב ה-kube לא מופעלת, הדרך העיקרית לזהות בעיות בתזמון של פודים היא לשלוח שאילתה לגבי אירועי יומן של 'תזמון שנכשל'. אחרי שמפעילים את חבילת המדדים של kube state, אפשר להשתמש במדד kube_pod_status_unschedulable, שמשרת את אותה מטרה אבל קל יותר לצבור אותו ולשרטט אותו. בעזרת המדד הזה אפשר לראות כמה פודים לא ניתנים לתזמון ומתי הבעיה התחילה.

באופן דומה, מדד המערכת של GKE‏ kubernetes.io/container/restart_count יכול לעזור לכם לזהות תרמילים (Pods) שנמצאים בלולאת קריסה. המדד kube_pod_container_status_waiting_reason גם מפרט את ה-Pods שנמצאים בלולאת קריסה, והוא גם מאפשר לכם לקבוע אם ה-Pods תקועים במצבי המתנה אחרים מלבד CrashLookBackOff, כמו ImagePullBackOff ו-ContainerCreating.

כדי לעיין במדריכים האינטראקטיביים:

  1. במסוף Google Cloud , עוברים לדף  Dashboards:

    מעבר אל מרכזי בקרה

    אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Monitoring.

  2. כדי לסנן את רשימת לוחות הבקרה, לוחצים על הקטגוריה G​C​P.
  3. לוחצים על השם של לוח הבקרה 'GKE Interactive Playbook' ברשימה.

מדדי פריסה

‫Deployment הוא בקר שמעדכן את מצב המשאבים כמו Pods, כדי לנהל אירועים כמו השקות והשבתות.

טבלה של מדדי הפריסה

מדדי הפריסה מאפשרים לעקוב אחרי התנהגות הבקר ולקבל התראות לגביה. בטבלה הבאה מפורטים המדדים שזמינים בחבילת kube state metrics:

שמות המדדים של Cloud Monitoring בטבלה הזו חייבים להתחיל בקידומת prometheus.googleapis.com/. התחילית הזו הושמטה מהערכים בטבלה.

שם המדד ב-PromQL
שם המדד ב-Cloud Monitoring
‫Kind, Type, Unit
Monitored resources
Required GKE version
תיאור
תוויות
kube_deployment_spec_replicas
kube_deployment_spec_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מספר הפודים הרצוי לפריסה. נדגמים כל 30 שניות.

deployment: deployment.
kube_deployment_status_replicas_available
kube_deployment_status_replicas_available/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מספר העותקים הזמינים לכל פריסה. נדגמים כל 30 שניות.

deployment: deployment.
kube_deployment_status_replicas_updated
kube_deployment_status_replicas_updated/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מספר העותקים המשוכפלים המעודכנים לכל פריסה. נדגמים כל 30 שניות.

deployment: deployment.

מידע נוסף זמין במאמר בנושא מדדי פריסה.

שאילתות לדוגמה למדדי פריסה

אפשר ליצור תרשימים ומדיניות התראות לפריסות ספציפיות על ידי סינון מדדי הפריסה לפי אשכול, מרחב שמות ושם הפריסה.

לדוגמה, כדי להשוות בין מספר הרפליקות הזמינות לבין מספר הרפליקות הצפוי בפריסה יחידה, אפשר להשתמש בשאילתות PromQL הבאות כדי לשרטט את שני המדדים בתרשים יחיד:

kube_deployment_spec_replicas{cluster="CLUSTER", namespace="NAMESPACE", deployment=DEPLOYMENT"}
וגם
kube_deployment_status_replicas_available{cluster="CLUSTER", namespace="NAMESPACE", deployment=DEPLOYMENT"}

כדי לקבל התראה על פריסה שנכשלה או נתקעה, אפשר להשתמש בביטוי PromQL הבא:

(
  kube_deployment_spec_replicas{cluster="CLUSTER", namespace="NAMESPACE", deployment="DEPLOYMENT"}
    >
  kube_deployment_status_replicas_available{cluster="CLUSTER", namespace="NAMESPACE", deployment="DEPLOYMENT"}
) and (
  changes(kube_deployment_status_replicas_updated{cluster="CLUSTER", namespace="NAMESPACE", deployment="DEPLOYMENT"}[10m])
    ==
  0
)

חלק מהשאילתות והביטויים של ההתראות בקטע הזה הותאמו מקובץ kubernetes-apps.yaml במאגר התרשימים של Prometheus community Kubernetes Helm ב-GitHub.

מדדים של StatefulSet

‫StatefulSet הוא בקר שמנהל את הפריסה וההתאמה לעומס (scaling) של קבוצת Pods לאפליקציות עם שמירת מצב. הבקר הזה מנהל את הסדר והייחודיות של ה-Pods.

טבלה של מדדים של StatefulSet

המדדים של StatefulSet מאפשרים לעקוב אחרי ההתנהגות של בקר ולשלוח התראות לגביה. בטבלה הבאה מפורטים המדדים שזמינים בחבילת kube state metrics:

שמות המדדים של Cloud Monitoring בטבלה הזו חייבים להתחיל בקידומת prometheus.googleapis.com/. התחילית הזו הושמטה מהערכים בטבלה.

שם המדד ב-PromQL
שם המדד ב-Cloud Monitoring
‫Kind, Type, Unit
Monitored resources
Required GKE version
תיאור
תוויות
kube_statefulset_replicas
kube_statefulset_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מספר הפודים הרצויים עבור StatefulSet. נדגמים כל 30 שניות.

statefulset: statefulset.
kube_statefulset_status_replicas_ready
kube_statefulset_status_replicas_ready/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מספר הרפליקות המוכנות לכל StatefulSet. נדגמים כל 30 שניות.

statefulset: statefulset.
kube_statefulset_status_replicas_updated
kube_statefulset_status_replicas_updated/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מספר הרפליקות המעודכנות לכל StatefulSet. נדגמים כל 30 שניות.

statefulset: statefulset.

מידע נוסף זמין במאמר בנושא מדדים של StatefulSet.

דוגמאות לשאילתות על מדדים של StatefulSet

אפשר ליצור תרשימים ומדיניות התראות עבור כל StatefulSet בנפרד על ידי סינון מדדי StatefulSet לפי אשכול, מרחב שמות ושם ה-StatefulSet.

לדוגמה, כדי להשוות בין מספר הרפליקות הזמינות לבין מספר הרפליקות הצפוי ב-StatefulSet יחיד, אפשר להשתמש בשאילתות PromQL הבאות כדי לשרטט את שני המדדים בתרשים יחיד:

kube_statefulset_replicas{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}
וגם
kube_statefulset_status_replicas_ready{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}

כדי לקבל התראה על פריסה שנכשלה או נעצרה של StatefulSet, אפשר להשתמש בביטוי הבא של PromQL:

(
  kube_statefulset_replicas{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}
    >
  kube_statefulset_status_replicas_ready{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}
) and (
  changes(kube_statefulset_status_replicas_updated{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}[10m])
    ==
  0
)

חלק מהשאילתות והביטויים של ההתראות בקטע הזה הותאמו מקובץ kubernetes-apps.yaml במאגר התרשימים של Prometheus community Kubernetes Helm ב-GitHub.

מדדים של DaemonSet

‫DaemonSet הוא בקר שמבטיח שקבוצה מסוימת של צמתים תריץ עותק של Pod. לדוגמה, כשמוסיפים צמתים לאשכול, ה-DaemonSet מוסיף פודים לצמתים. הבקר הזה שימושי כדי לוודא שתהליכים מסוימים יפעלו בכל צומת.

טבלה של מדדי DaemonSet

המדדים של DaemonSet מאפשרים לכם לעקוב אחרי ההתנהגות של בקר ולשלוח התראות על התנהגות חריגה. בטבלה הבאה מפורטים המדדים שזמינים בחבילת kube state metrics:

שמות המדדים של Cloud Monitoring בטבלה הזו חייבים להתחיל בקידומת prometheus.googleapis.com/. התחילית הזו הושמטה מהערכים בטבלה.

שם המדד ב-PromQL
שם המדד ב-Cloud Monitoring
‫Kind, Type, Unit
Monitored resources
Required GKE version
תיאור
תוויות
kube_daemonset_status_desired_number_scheduled
kube_daemonset_status_desired_number_scheduled/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מספר הצמתים שבהם צריך להפעיל את פוד ה-daemon. נדגמים כל 30 שניות.

daemonset: daemonset.
kube_daemonset_status_number_misscheduled
kube_daemonset_status_number_misscheduled/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מספר הצמתים שמריצים פוד של שירות רקע (daemon), אבל לא אמורים להריץ אותו. נדגמים כל 30 שניות.

daemonset: daemonset.
kube_daemonset_status_number_ready
kube_daemonset_status_number_ready/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מספר הצמתים שצריכים להריץ את פוד ה-daemon, ושצריכים להריץ פוד daemon אחד או יותר ולהיות מוכנים. נדגמים כל 30 שניות.

daemonset: daemonset.
kube_daemonset_status_updated_number_scheduled
kube_daemonset_status_updated_number_scheduled/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מספר הצמתים שבהם פועל פוד הדמון המעודכן. נדגמים כל 30 שניות.

daemonset: daemonset.

מידע נוסף זמין במאמר בנושא מדדים של DaemonSet.

דוגמאות לשאילתות לגבי מדדים של DaemonSet

אפשר ליצור תרשימים ומדיניות התראות עבור DaemonSet ספציפי על ידי סינון מדדים של DaemonSet לפי אשכול, מרחב שמות ושם ה-DaemonSet.

לדוגמה, כדי להשוות בין מספר הרפליקות הזמינות לבין מספר הרפליקות הצפוי ב-DaemonSet יחיד, אפשר להשתמש בשאילתות PromQL הבאות כדי לשרטט את שני המדדים בתרשים יחיד:

kube_daemonset_status_updated_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonsetset=DAEMONSET"}
וגם
kube_daemonset_status_desired_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset=DAEMONSET"}

כדי לקבל התראה על פריסה של DaemonSet שנכשלה או נעצרה, אפשר להשתמש בביטוי PromQL הבא:

(
  (
    kube_daemonset_status_number_misscheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"}
      !=
    0
  ) or (
    kube_daemonset_status_updated_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"}
      !=
    kube_daemonset_status_desired_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"}
  )
) and (
  changes(kube_daemonset_status_updated_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"}[5m])
    ==
  0
)

חלק מהשאילתות והביטויים של ההתראות בקטע הזה הותאמו מקובץ kubernetes-apps.yaml במאגר התרשימים של Prometheus community Kubernetes Helm ב-GitHub.

מדדים של HorizontalPodAutoscaler

‫HorizontalPodAutoscaler‏ (HPA) הוא בקר שמשנה באופן תקופתי את מספר הפודים בעומס עבודה, כמו Deployment או StatefulSet, בתגובה למדד מסוים כמו ניצול המעבד (CPU) או הזיכרון. שינוי מספר הפודים שזמינים לעומס עבודה מאפשר לעומס העבודה להמשיך להגיב ביעילות.

מידע נוסף על HPA זמין במאמר הצגת פרטים על Horizontal Pod Autoscaler.

טבלה של מדדי HPA

המדדים של HorizontalPodAutoscaler מאפשרים לכם לעקוב אחרי ההתנהגות של בקר המשאבים ולהגדיר התראות לגביה. בטבלה הבאה מפורטים המדדים שזמינים בחבילת kube state metrics:

שמות המדדים של Cloud Monitoring בטבלה הזו חייבים להתחיל בקידומת prometheus.googleapis.com/. התחילית הזו הושמטה מהערכים בטבלה.

שם המדד ב-PromQL
שם המדד ב-Cloud Monitoring
‫Kind, Type, Unit
Monitored resources
Required GKE version
תיאור
תוויות
kube_horizontalpodautoscaler_spec_max_replicas
kube_horizontalpodautoscaler_spec_max_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
המגבלה העליונה למספר הפודים שאפשר להגדיר באמצעות קנה מידה אוטומטי, לא יכולה להיות קטנה מ-MinReplicas. נדגמים כל 30 שניות.

horizontalpodautoscaler: horizontalpodautoscaler
kube_horizontalpodautoscaler_spec_min_replicas
kube_horizontalpodautoscaler_spec_min_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
הגבול התחתון למספר הפודים שאפשר להגדיר באמצעות קנה המידה האוטומטי, ברירת מחדל היא 1. נדגמים כל 30 שניות.

horizontalpodautoscaler: horizontalpodautoscaler
kube_horizontalpodautoscaler_spec_target_metric
kube_horizontalpodautoscaler_spec_target_metric/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מפרטי המדדים שבהם נעשה שימוש במנגנון המידרוג האוטומטי כשמחשבים את מספר הרפליקות הרצוי. נדגמים כל 30 שניות.

horizontalpodautoscaler: horizontalpodautoscaler ‫
metric_name: metric_name. ‫
metric_target_type: metric_target_type.
kube_horizontalpodautoscaler_status_condition
kube_horizontalpodautoscaler_status_condition/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
המצב של המידרוג האוטומטי הזה. נדגמים כל 30 שניות.

condition: מצב. ‫
horizontalpodautoscaler: horizontalpodautoscaler. ‫
namespace: מרחב שמות.
status: סטטוס.
kube_horizontalpodautoscaler_status_current_replicas
kube_horizontalpodautoscaler_status_status_current_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מספר הרפליקות הנוכחי של הפודים שמנוהלים על ידי קנה המידה האוטומטי הזה. נדגמים כל 30 שניות.

horizontalpodautoscaler: horizontalpodautoscaler
kube_horizontalpodautoscaler_status_desired_replicas
kube_horizontalpodautoscaler_status_desired_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
מספר הרפליקות הרצוי של הפודים שמנוהלים על ידי קנה המידה האוטומטי הזה. נדגמים כל 30 שניות.

horizontalpodautoscaler: horizontalpodautoscaler

מידע נוסף זמין במאמר בנושא מדדים של Horizontal Pod Autoscaler.

דוגמאות לשאילתות על מדדי HPA

לדוגמה, כדי לקבוע אם ה-HPA מתקרב למספר המקסימלי של רפליקות, אפשר לשרטט את היחס הבא:

kube_horizontalpodautoscaler_status_current_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"} /
kube_horizontalpodautoscaler_spec_max_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"}

אם ה-HPA פועל עם המספר המקסימלי של רפליקות, יכול להיות שתרצו להגדיל את המפרט של המספר המקסימלי של הפודים. אפשר להשתמש בביטוי PromQL הבא כדי ליצור התראה שתשלח לכם הודעה על המקרה הזה:

kube_horizontalpodautoscaler_status_current_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"}
  ==
kube_horizontalpodautoscaler_spec_max_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"}

אפשר גם להשוות בין הערכים של המדדים kube_horizontalpodautoscaler_status_current_replicas ו-kube_horizontalpodautoscaler_status_desired_replicas כדי לקבוע אם יש הבדל בין מספר הרפליקות הנוכחי לבין מספר הרפליקות הנדרש. הבדל יכול להצביע על מגבלת משאבים באשכול. הביטוי הבא ב-PromQL מחפש הבדלים בין מספר הרפליקות הנוכחי לבין מספר הרפליקות הנדרש, המינימלי והמקסימלי, וגם שינויים במספר הרפליקות הנוכחי:

(kube_horizontalpodautoscaler_status_desired_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}
  !=
kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"})
  and
(kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}
  >
kube_horizontalpodautoscaler_spec_min_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"})
  and
(kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}
  <
kube_horizontalpodautoscaler_spec_max_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"})
  and
changes(kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}[15m]) == 0

התוויות condition ו-status במדד kube_horizontalpodautoscaler_status_condition יכולות לעזור לכם לזהות מתי מתרחשים מצבי כשל שונים ב-HPA. לדוגמה:

  • התנאי ScalingLimited והסטטוס true מציינים שה-HPA מוגבל על ידי מספר הרפליקות המינימלי או המקסימלי שלו:
    kube_horizontalpodautoscaler_status_condition{status="true", condition="ScalingLimited"} == 1
  • התנאי AbleToScale והסטטוס false מציינים שיש בעיות ב-HPA באחזור או בעדכון של קנה המידה:

    kube_horizontalpodautoscaler_status_condition{status="false", condition="AbleToScale"} == 1

  • התנאי ScalingActive והסטטוס false מציינים שה-HPA מושבת או שלא ניתן לחשב קנה מידה חדש:

    kube_horizontalpodautoscaler_status_condition{status="false", condition="ScalingActive"} == 1

חלק מהשאילתות והביטויים של ההתראות בקטע הזה הותאמו מקובץ kubernetes-apps.yaml במאגר התרשימים של Prometheus community Kubernetes Helm ב-GitHub.

מדדים של JobSet

‫Jobset הוא API של עומס עבודה שמאפשר לכם לנהל קבוצה של משימות Kubernetes כיחידה אחת. התרחיש הנפוץ ביותר לשימוש ב-JobSet הוא אימון מבוזר, אבל אפשר להשתמש בו גם להרצת עומסי עבודה של אצווה.

מידע נוסף על JobSets זמין במאמרי העזרה בנושא JobSet.

טבלה של מדדים של JobSet

מדדי JobSet מאפשרים לעקוב אחרי ההתנהגות של JobSet ולקבל התראות לגביה. בטבלה הבאה מפורטים המדדים שזמינים בחבילת kube state metrics:

שמות המדדים של Cloud Monitoring בטבלה הזו חייבים להתחיל בקידומת prometheus.googleapis.com/. התחילית הזו הושמטה מהערכים בטבלה.

שם המדד ב-PromQL
שם המדד ב-Cloud Monitoring
‫Kind, Type, Unit
Monitored resources
Required GKE version
תיאור
תוויות
kube_jobset_specified_replicas
kube_jobset_specified_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
מספר העותקים שצוינו לכל משימה משוכפלת ב-JobSet. נדגמים כל 30 שניות.

jobset_name: jobset_name. ‫
replicated_job_name: replicated_job_name.
kube_jobset_ready_replicas
kube_jobset_ready_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
מספר הרפליקות במצב 'READY' לכל עבודה משוכפלת ב-JobSet. נדגמים כל 30 שניות.

jobset_name: jobset_name. ‫
replicated_job_name: replicated_job_name.
kube_jobset_succeeded_replicas
kube_jobset_succeeded_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
מספר הרפליקות במצב 'SUCCEEDED' לכל עבודות משוכפלות ב-JobSet. נדגמים כל 30 שניות.

jobset_name: jobset_name. ‫
replicated_job_name: replicated_job_name.
kube_jobset_failed_replicas
kube_jobset_failed_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
מספר העותקים במצב FAILED לכל עבודה משוכפלת ב-JobSet. נדגמים כל 30 שניות.

jobset_name: jobset_name. ‫
replicated_job_name: replicated_job_name.
kube_jobset_active_replicas
kube_jobset_active_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
מספר הרפליקות במצב ACTIVE לכל עבודות משוכפלות ב-JobSet. נדגמים כל 30 שניות.

jobset_name: jobset_name. ‫
replicated_job_name: replicated_job_name.
kube_jobset_suspended_replicas
kube_jobset_suspended_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
מספר העותקים במצב 'SUSPENDED' לכל עבודה משוכפלת ב-JobSet. נדגמים כל 30 שניות.

jobset_name: jobset_name. ‫
replicated_job_name: replicated_job_name.
kube_jobset_status_condition
kube_jobset_status_condition/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
תנאי הסטטוס הנוכחיים של JobSet. נדגמים כל 30 שניות.

jobset_name: jobset_name. ‫
condition: מצב.
kube_jobset_restarts
kube_jobset_restarts/gauge
GAUGEDOUBLE1
prometheus_target
1.32.4-gke.1767000
1.33.0-gke.1868000
מספר ההפעלות מחדש של JobSet. נדגמים כל 30 שניות.

jobset_name: jobset_name.

דוגמאות לשאילתות על מדדים של JobSet

אפשר ליצור תרשימים ומדיניות התראות עבור JobSet ספציפיים על ידי סינון מדדי JobSet לפי אשכול, מרחב שמות ושם ה-JobSet.

לדוגמה, כדי להשוות בין מספר הרפליקות במצב READY לבין מספר הרפליקות הצפוי ב-JobSet יחיד, אפשר להציג את שני המדדים בתרשים אחד באמצעות שאילתות PromQL הבאות:

kube_jobset_specified_replicas{cluster="CLUSTER", namespace="NAMESPACE", jobset_name="JOBSET_NAME"}
וגם
kube_jobset_ready_replicas{cluster="CLUSTER", namespace="NAMESPACE", jobset_name="JOBSET_NAME"}

כדי לקבל התראה על השקה של JobSet שנכשלה או שלא זמינה, אפשר להשתמש בביטוי הבא של PromQL:

kube_jobset_specified_replicas{cluster="CLUSTER", namespace="NAMESPACE", jobset_name="JOBSET_NAME"}
  >
kube_jobset_ready_replicas{cluster="CLUSTER", namespace="NAMESPACE", jobset_name="JOBSET_NAME"}

התווית condition במדד kube_jobset_status_condition יכולה לעזור לכם לזהות מתי יש בעיות בהרצת JobSets, למשל:

  • המצב Failed מציין שהריצה של JobSet נכשלה:
    kube_jobset_status_condition{jobset_name="JOBSET_NAME, condition="Failed"} == 1
  • התנאי Suspended מציין שה-JobSet מושהה:
    kube_jobset_status_condition{jobset_name="JOBSET_NAME, condition="Suspended"} == 1

חלק מהשאילתות והביטויים של ההתראות בקטע הזה הותאמו מקובץ kubernetes-apps.yaml במאגר התרשימים של Prometheus community Kubernetes Helm ב-GitHub.

המאמרים הבאים