הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של Apigee Edge
כשמספקים מידע מפורט ונדרש בבקשת התמיכה, קל יותר לצוות התמיכה של Google Cloud להגיב במהירות וביעילות. כשחסרים פרטים חיוניים בבקשת התמיכה, אנחנו צריכים לבקש עוד מידע, ולפעמים זה כרוך בהתכתבות הלוך ושוב כמה פעמים. התהליך הזה לוקח יותר זמן ועלול לגרום לעיכובים בפתרון הבעיות. במדריך הזה לשיטות מומלצות מוסבר איזה מידע דרוש לנו כדי שנוכל לטפל במהירות בבקשות לתמיכה טכנית.
תיאור הבעיה
בבעיה צריך להיות מידע שמסביר את הפרטים על מה שקרה לעומת מה שציפיתם שיקרה, וגם מתי ואיך זה קרה. פנייה טובה לתמיכה צריכה לכלול את פרטי המפתח הבאים לגבי כל אחד ממוצרי Apigee:
| Key information | תיאור | Apigee ב-Google Cloud | Apigee Hybrid |
|---|---|---|---|
| מוצר | מוצר ספציפי של Apigee שבו הבעיה מתרחשת, כולל פרטי הגרסה אם רלוונטי. |
|
|
| פרטי הבעיה | תיאור ברור ומפורט של הבעיה, כולל הודעת השגיאה המלאה, אם יש כזו. |
|
|
| שעה | חותמת הזמן הספציפית שבה הבעיה התחילה וכמה זמן היא נמשכה. |
|
|
| הגדרה | מידע מפורט על המקום שבו הבעיה מתרחשת. |
|
|
בחלקים הבאים נרחיב על כך בפירוט.
מוצר
יש מוצרים שונים של Apigee, Apigee ב-Google Cloud ו-Apigee hybrid, ולכן אנחנו צריכים מידע ספציפי לגבי המוצר שבו הייתה הבעיה.
בטבלה הבאה מופיעות כמה דוגמאות למידע מלא בעמודה DOs ולמידע לא מלא בעמודה DON'Ts:
| DOs | מה לא לעשות |
|---|---|
הפריסה של ה-proxy ל-API OAuth2 נכשלה בארגון Apigee on Google Cloud ... |
פריסת proxy ל-API נכשלה (אנחנו צריכים לדעת באיזה מוצר של Apigee נתקלת בבעיה). |
אנחנו מקבלים את השגיאה הבאה כשניגשים אל Cassandra באמצעות
cqlsh ב-Apigee Hybrid בגרסה 1.3 ... |
אין לנו גישה ל-Cassandra באמצעות (חסרים פרטי הגרסה ההיברידית) |
פרטי הבעיה
צריך לספק מידע מדויק על הבעיה שנצפתה, כולל הודעת השגיאה (אם יש כזו) וההתנהגות הצפויה וההתנהגות בפועל שנצפתה.
בטבלה הבאה מופיעות כמה דוגמאות למידע מלא בעמודה מה כן ומידע חלקי בעמודה מה לא:
| DOs | מה לא לעשות |
|---|---|
|
שרת ה-proxy החדש |
שרת proxy חדש של (שם ה-proxy לא ידוע. לא ברור אם ה-proxy מחזיר שגיאה או תגובה לא צפויה כלשהי). |
|
הלקוחות שלנו מקבלים שגיאות |
הלקוחות שלנו מקבלים שגיאות
(העברת |
שעה
הזמן הוא נתון חשוב מאוד. חשוב שמהנדס התמיכה ידע מתי הבחנתם לראשונה בבעיה, כמה זמן היא נמשכה ואם היא עדיין נמשכת.
יכול להיות שמהנדס התמיכה שיטפל בבעיה יהיה באזור זמן שונה משלכם, לכן אמירות יחסיות לגבי זמן יקשו עליו לאבחן את הבעיה. לכן, מומלץ להשתמש בפורמט ISO 8601 לחותמת התאריך והשעה כדי לספק את פרטי הזמן המדויקים שבהם נצפתה הבעיה.
בטבלה הבאה מופיעות דוגמאות לזמן ולמשך מדויקים שבהם הבעיה התרחשה בעמודה מה כן לעשות, ודוגמאות למידע מעורפל או לא ברור לגבי הזמן שבו הבעיה התרחשה בעמודה מה לא לעשות:
| DOs | מה לא לעשות |
|---|---|
נצפה מספר גדול של 503s אתמול בין
2020-11-06 17:30 PDT לבין 2020-11-06 17:35 PDT... |
מספר עצום של (אנחנו נאלצים להשתמש בתאריך המשוער, וגם לא ברור באיזו אזור זמן הבעיה הזו נצפתה). |
| נצפו זמני אחזור ארוכים בשרתי ה-proxy של ה-API הבאים מ2020-11-09 15:30 IST עד 2020-11-09 18:10 IST ... |
בשבוע שעבר נצפו השהיות גבוהות בחלק משרתי ה-API Proxy. (לא ברור באיזה יום ובמשך כמה זמן הבעיה הזו נצפתה בשבוע האחרון). |
הגדרה
אנחנו צריכים לדעת פרטים על המקום המדויק שבו הבעיה מופיעה. בהתאם למוצר שבו אתם משתמשים, אנחנו צריכים את הפרטים הבאים:
- אם אתם משתמשים ב-Apigee ב-Google Cloud, יכול להיות שיש לכם יותר מארגון אחד, ולכן אנחנו צריכים לדעת את הארגון הספציפי ופרטים נוספים שקשורים לבעיה שנתקלתם בה:
- שמות הארגון והסביבה
- שם ה-proxy ל-API ומספרי הגרסאות (לגבי כשלים בבקשות ל-API)
- אם אתם משתמשים בהיברידי, יכול להיות שאתם משתמשים באחת מ פלטפורמות היברידיות הרבות שנתמכות ובטופולוגיות התקנה. לכן אנחנו צריכים לדעת באיזו פלטפורמה היברידית ובאיזו טופולוגיה אתם משתמשים, כולל פרטים כמו מספר מרכזי הנתונים והצמתים.
בטבלה הבאה מופיעות כמה דוגמאות למידע מלא בעמודה מה כן, ולמידע לא מלא בעמודה מה לא:
| DOs | מה לא לעשות |
|---|---|
|
פרטי ההגדרה של Apigee:
פרטי ה-API שנכשל:
שגיאה: |
מספר השגיאות עלה. (היא לא מספקת מידע על המוצר שבו נעשה שימוש, על התקופה שבה הבעיה נצפתה או על פרטי ההגדרה). |
ניפוי הבאגים נכשל עם השגיאה הבאה ב-Apigee Hybrid גרסה 1.3 שגיאה:
פרטי ההגדרה של Apigee Hybrid:
| ניפוי הבאגים נכשל ב-Apigee Hybrid. |
קבצים נלווים
כל קובץ נוסף שתוכלו לספק לנו וקשור לבעיה יעזור לנו לפתור אותה מהר יותר, כי נוכל להבין את ההתנהגות המדויקת שאתם רואים ולקבל תובנות נוספות לגביה.
בקטע הזה מתוארים כמה ארטיפקטים שימושיים שמועילים לכל מוצרי Apigee:
פריטי מידע שנוצרו בתהליך הפיתוח (Artifact) משותפים לכל מוצרי Apigee
הארטיפקטים הבאים שימושיים לכל מוצרי Apigee: Apigee ב-Google Cloud ו-Apigee hybrid:
| פריט מידע שנוצר בתהליך | תיאור |
|---|---|
| פלט של כלי לניפוי באגים | הפלט של כלי ניפוי הבאגים מכיל מידע מפורט על בקשות ה-API שמועברות דרך מוצרי Apigee. המידע הזה שימושי לפתרון שגיאות בזמן ריצה, כמו 4XX, 5XX ובעיות שקשורות לזמן האחזור. |
| צילומי מסך | צילומי מסך עוזרים להעביר את ההקשר של ההתנהגות או השגיאה בפועל שנצפו. כדאי לצרף צילומי מסך לכל שגיאה או בעיה שנצפו, למשל בממשק המשתמש או ב-Analytics. |
| HAR (Http ARchive) | HAR הוא קובץ שמתועד על ידי כלים של סשנים ב-HTTP לצורך ניפוי באגים שקשורים לממשק המשתמש. אפשר לתעד אותו באמצעות דפדפנים כמו Chrome, Firefox או Internet Explorer. |
tcpdumps |
הכלי tcpdump מתעד מנות TCP/IP שמועברות או מתקבלות ברשת. הוא שימושי לפתרון בעיות שקשורות לרשת, כמו כשלים בתהליך הלחיצה של TLS, שגיאות 502 ובעיות של זמן אחזור וכו'. |
פריטי מידע נוספים שנוצרו בתהליך פיתוח (Artifact) עבור סביבה היברידית
במקרה של פריסה היברידית, יכול להיות שנצטרך עוד קבצים שיעזרו לנו לאבחן את הבעיות מהר יותר.
| פריט מידע שנוצר בתהליך | תיאור |
|---|---|
| פלטפורמת Apigee Hybrid | מציינים את אחת מ
פלטפורמות ההיברידיות הנתמכות שבהן נעשה שימוש:
|
| גרסאות של Apigee Hybrid ושל רכיבים תלויים |
|
| הטופולוגיה של הרשת | תרשים טופולוגיית ההתקנה של Apigee שמתאר את ההגדרה ההיברידית, כולל כל מרכזי הנתונים, אשכולות Kubernetes, מרחבי השמות וה-Pods. |
| קובץ YAML של שינויים מברירת המחדל | קובץ overrides.yaml שמשמש בכל מרכז נתונים להתקנת מישור זמן הריצה של Apigee hybrid.
|
| סטטוס הפריסה של Apigee Hybrid |
הפלט של הפקודות הבאות בכל מרכז נתונים או אשכול Kubernetes:
|
| יומנים של רכיבי Apigee Hybrid |
לספק קישורים ליומנים של Cloud Operations (StackDriver) עבור הרכיבים ההיברידיים או אפשר לאחזר את היומנים של רכיב Apigee hybrid באמצעות הפקודות הבאות בכל מרכז נתונים או אשכול Kubernetes ולשתף אותם איתנו:
|
| תיאור של יומנים |
מידע מפורט על הפוד. זה שימושי במיוחד אם אתם נתקלים בבעיות כמו פודים שנתקעים במצב
|
| Cloud Monitoring |
|
Apigee Hybrid must-gather
אפשר גם להריץ את סקריפט Must-Gather על סמך הפקודות שמפורטות בהמשך.
###--- "kubectl config" commands to get the config details of the whole Apigee Hybrid cluster ---#### kubectl config get-clusters 2>&1 | tee /tmp/k_config_get_clusters_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl config get-contexts 2>&1 | tee /tmp/k_config_get_contexts_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl config get-users 2>&1 | tee /tmp/k_config_get_users_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl config view 2>&1 | tee /tmp/k_config_view_$(date +%Y.%m.%d_%H.%M.%S).txt ### --- Collect all details of all nodes in the Kubernetes cluster.---### kubectl describe node 2>&1 | tee /tmp/k_describe_node_$(date +%Y.%m.%d_%H.%M.%S).txt ###--- "kubectl get -A " commands to get CRD details for the whole Apigee Hybrid setup ---#### kubectl get clusterissuers -A -o wide 2>&1 | tee /tmp/k_get_clusterissuers_all$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get certificate -A -o wide 2>&1 | tee /tmp/k_get_certificate_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get certificaterequest -A -o wide 2>&1 | tee /tmp/k_get_certificaterequest_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get crd -A -o yaml 2>&1 | tee /tmp/k_get_crd_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ConfigMap -A 2>&1 | tee /tmp/k_get_ConfigMap_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ClusterRole -A -o wide 2>&1 | tee /tmp/k_get_clusterrole_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ClusterRoleBinding -A -o wide 2>&1 | tee /tmp/k_get_clusterrole_binding_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get Deployments -A -o wide >&1 | tee /tmp/k_get_deployments_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get events -A -o wide 2>&1 | tee /tmp/k_get_events_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get endpoints -A 2>&1 | tee /tmp/k_get_endpoints_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get issuers -A -o wide 2>&1 | tee /tmp/k_get_issuers_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get mutatingwebhookconfigurations 2>&1 | tee /tmp/k_get_mutatingwebhookconfigurations_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get nodes -o wide --show-labels 2>&1 | tee /tmp/k_get_nodes_labels_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ns 2>&1 | tee /tmp/k_get_namespace_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get PriorityClass -A -o wide 2>&1 | tee /tmp/k_get_PriorityClass_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get pv -A -o wide 2>&1 | tee /tmp/k_get_pv_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get pvc -A -o wide 2>&1 | tee /tmp/k_get_pvc_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get Role -A -o wide 2>&1 | tee /tmp/k_get_role_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get RoleBinding -A -o wide 2>&1 | tee /tmp/k_get_Role_Binding_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get replicaset -A -o wide 2>&1 | tee /tmp/k_get_replicaset_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get sa -A -o wide 2>&1 | tee /tmp/k_get_service_accounts_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get services -A -o wide 2>&1 | tee /tmp/k_get_services_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get svc -A 2>&1 | tee /tmp/k_get_svc_all$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get secrets -A 2>&1 | tee /tmp/k_get_secrets_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get validatingwebhookconfigurations -A 2>&1 | tee /tmp/k_get_validatingwebhookconfigurations_all$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get validatingwebhookconfigurations apigee-validating-webhook-configuration 2>&1 | tee /tmp/k_get_apigee-validating-webhook-configuration_$(date +%Y.%m.%d_%H.%M.%S).txt ### --- List top resource consuming nodes and pods ---#### kubectl top nodes 2>&1 | tee /tmp/k_top_nodes_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl top pod -A --containers 2>&1 | tee /tmp/k_top_pod_all_containers_$(date +%Y.%m.%d_%H.%M.%S).txt ###----- "kubectl get" commands to fetch list of all CRD for "apigee" namespace ----- ##### kubectl get all -n apigee -o wide 2>&1 | tee /tmp/k_get_all_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ad -n apigee 2>&1 | tee /tmp/k_get_ad_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get apigeeorganization -n apigee 2>&1 | tee /tmp/k_get_apigeeorganization_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get apigeeenv -n apigee 2>&1 | tee /tmp/k_get_apigeeenv_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get apigeeds -n apigee 2>&1 | tee /tmp/k_get_apigeeds_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get apigeedatastore -n apigee 2>&1 | tee /tmp/k_get_apigeedatastore_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ApigeeDeployment -n apigee 2>&1 | tee /tmp/k_get_apigeedeployment_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ApigeeRedis -n apigee 2>&1 | tee /tmp/k_get_ApigeeRedis_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ApigeeRoute -n apigee 2>&1 | tee /tmp/k_get_ApigeeRoute_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ApigeeRouteConfig -n apigee 2>&1 | tee /tmp/k_get_ApigeeRoutesconfig_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get Apigeetelemetry -n apigee 2>&1 | tee /tmp/k_get_Apigeetelemetry_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get apigeeissues -n apigee 2>&1 | tee /tmp/k_get_apigeeissues_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ControllerRevision -n apigee -o wide 2>&1 | tee /tmp/k_get_ControllerRevision_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get cronjob -n apigee -o wide 2>&1 | tee /tmp/k_get_cronjob_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get gateway -n apigee 2>&1 | tee /tmp/k_get_gateway_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get PodDisruptionBudget -n apigee -o wide 2>&1 | tee /tmp/k_get_PodDisruptionBudget_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get sc -n apigee -o wide 2>&1 | tee /tmp/k_get_storageclass_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get sr -n apigee -o wide 2>&1 | tee /tmp/k_get_sr_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get sts -n apigee 2>&1 | tee /tmp/k_get_sts_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get volumesnapshot -n apigee -o wide 2>&1 | tee /tmp/k_get_volumesnapshot_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt ###----- "kubectl describe" commands to fetch details of all CRD for "apigee" namespace ----- ##### for p in $(kubectl -n apigee get apigeeorganization --no-headers -o custom-columns=":metadata.name") ; do kubectl describe apigeeorganization ${p} -n apigee 2>&1 | tee /tmp/k_desc_apigeeorganization_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get apigeeenv --no-headers -o custom-columns=":metadata.name") ; do kubectl describe apigeeenv ${p} -n apigee 2>&1 | tee /tmp/k_desc_apigeeenv_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get apigeeds --no-headers -o custom-columns=":metadata.name") ; do kubectl describe apigeeds ${p} -n apigee 2>&1 | tee /tmp/k_desc_apigeeds_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get apigeedatastore --no-headers -o custom-columns=":metadata.name") ; do kubectl describe apigeedatastore ${p} -n apigee 2>&1 | tee /tmp/k_desc_apigeedatastore_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get ApigeeDeployment --no-headers -o custom-columns=":metadata.name") ; do kubectl describe ApigeeDeployment ${p} -n apigee 2>&1 | tee /tmp/k_desc_ApigeeDeployment_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get ApigeeRedis --no-headers -o custom-columns=":metadata.name") ; do kubectl describe ApigeeRedis ${p} -n apigee 2>&1 | tee /tmp/k_desc_ApigeeRedis_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get ApigeeRoute --no-headers -o custom-columns=":metadata.name") ; do kubectl describe ApigeeRoute ${p} -n apigee 2>&1 | tee /tmp/k_desc_ApigeeRoute_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get ApigeeRouteConfig --no-headers -o custom-columns=":metadata.name") ; do kubectl describe ApigeeRouteConfig ${p} -n apigee 2>&1 | tee /tmp/k_desc_ApigeeRouteConfig_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get Apigeetelemetry --no-headers -o custom-columns=":metadata.name") ; do kubectl describe Apigeetelemetry ${p} -n apigee 2>&1 | tee /tmp/k_desc_Apigeetelemetry_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get apigeeissues --no-headers -o custom-columns=":metadata.name") ; do kubectl describe apigeeissues ${p} -n apigee 2>&1 | tee /tmp/k_desc_apigeeissues_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get ControllerRevision --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe ControllerRevision ${p} 2>&1 | tee /tmp/k_desc_ControllerRevision_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get certificate --no-headers -o custom-columns=":metadata.name") ; do kubectl describe certificate ${p} -n apigee 2>&1 | tee /tmp/k_desc_certificate_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get cronjob --no-headers -o custom-columns=":metadata.name") ; do kubectl describe cronjob ${p} -n apigee 2>&1 | tee /tmp/k_desc_cronjob_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get daemonset --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe daemonset ${p} 2>&1 | tee /tmp/k_desc_daemonset_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get deployments --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe deployments ${p} 2>&1 | tee /tmp/k_desc_deployment_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get hpa --no-headers -o custom-columns=":metadata.name") ; do kubectl describe hpa ${p} -n apigee 2>&1 | tee /tmp/k_desc_hpa_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get jobs --no-headers -o custom-columns=":metadata.name") ; do kubectl describe jobs ${p} -n apigee 2>&1 | tee /tmp/k_desc_jobs_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get po --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe po ${p} 2>&1 | tee /tmp/k_desc_pod_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get PodDisruptionBudget --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe PodDisruptionBudget ${p} 2>&1 | tee /tmp/k_desc_PodDisruptionBudget_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get pv --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe pv ${p} 2>&1 | tee /tmp/k_desc_pv_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt; done for p in $(kubectl -n apigee get pvc --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe pvc ${p} 2>&1 | tee /tmp/k_desc_pvc_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt; done for p in $(kubectl -n apigee get rs --no-headers -o custom-columns=":metadata.name") ; do kubectl describe rs ${p} -n apigee 2>&1 | tee /tmp/k_desc_replicaset_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get sc --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe sc ${p} 2>&1 | tee /tmp/k_desc_storageclass_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt; done for p in $(kubectl -n apigee get sts --no-headers -o custom-columns=":metadata.name") ; do kubectl describe sts ${p} -n apigee 2>&1 | tee /tmp/k_desc_sts_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get secrets --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe secrets ${p} 2>&1 | tee /tmp/k_desc_secrets_n_apigee${p}_$(date +%Y.%m.%d_%H.%M.%S).txt; done for p in $(kubectl -n apigee get services --no-headers -o custom-columns=":metadata.name") ; do kubectl describe service ${p} -n apigee 2>&1 | tee /tmp/k_desc_services_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get sa --no-headers -o custom-columns=":metadata.name") ; do kubectl describe sa ${p} -n apigee 2>&1 | tee /tmp/k_desc_service_account_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get svc --no-headers -o custom-columns=":metadata.name") ; do kubectl describe svc ${p} -n apigee 2>&1 | tee /tmp/k_desc_svc_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done ###----- "kubectl logs" command to fetch logs of all containers in the "apigee" namespace ----- ##### for p in $(kubectl -n apigee get po --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee logs ${p} --all-containers 2>&1 | tee /tmp/k_logs_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).log ; done ###----- "kubectl get" commands for "apigee-system" namespace ----- ##### kubectl get all -n apigee-system -o wide 2>&1 | tee /tmp/k_get_all_n_apigee_system_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get jobs -o wide -n apigee-system 2>&1 | tee /tmp/k_get_jobs_n_apigee_system_$(date +%Y.%m.%d_%H.%M.%S).txt ###----- "kubectl describe" commands for "apigee-system" namespace ----- ##### for p in $(kubectl -n apigee-system get certificate --no-headers -o custom-columns=":metadata.name") ; do kubectl describe certificate ${p} -n apigee-system 2>&1 | tee /tmp/k_desc_certificate_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee-system get deployment --no-headers -o custom-columns=":metadata.name") ; do kubectl describe deployment ${p} -n apigee-system 2>&1 | tee /tmp/k_desc_deployment_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee-system get jobs --no-headers -o custom-columns=":metadata.name") ; do kubectl describe jobs ${p} -n apigee-system 2>&1 | tee /tmp/k_desc_jobs_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee-system get po --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee-system describe po ${p} 2>&1 | tee /tmp/k_desc_pod_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee-system get rs --no-headers -o custom-columns=":metadata.name") ; do kubectl describe rs ${p} -n apigee-system 2>&1 | tee /tmp/k_desc_replicaset_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee-system get rolebinding --no-headers -o custom-columns=":metadata.name") ; do kubectl describe rolebinding ${p} -n apigee-system 2>&1 | tee /tmp/k_desc_rolebinding_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee-system get services --no-headers -o custom-columns=":metadata.name") ; do kubectl describe service ${p} -n apigee-system 2>&1 | tee /tmp/k_desc_services_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee-system get sa --no-headers -o custom-columns=":metadata.name") ; do kubectl describe sa ${p} -n apigee-system 2>&1 | tee /tmp/k_desc_serviceaccount_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee-system get secrets --no-headers -o custom-columns=":metadata.name") ; do kubectl describe secrets ${p} -n apigee-system 2>&1 | tee /tmp/k_desc_secrets_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done ###----- "kubectl logs" command for "apigee-system" namespace ----- ##### for p in $(kubectl -n apigee-system get po --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee-system logs ${p} --all-containers 2>&1 | tee /tmp/k_logs_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).log ; done ###----- "kubectl get" command for "cert-manager" namespace ----- ##### kubectl get all -n cert-manager -o wide 2>&1 | tee /tmp/k_get_all_n_cert_manager_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get crd -n cert-manager 2>&1 | tee /tmp/k_get_crd_n_cert_manager_$(date +%Y.%m.%d_%H.%M.%S).txt ###----- "kubectl describe" command for "cert-manager" namespace ----- ##### for p in $(kubectl -n cert-manager get deployment --no-headers -o custom-columns=":metadata.name") ; do kubectl -n cert-manager describe deployment $(p) 2>&1 | tee /tmp/k_desc_deployment_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n cert-manager get endpoints --no-headers -o custom-columns=":metadata.name") ; do kubectl describe endpoints ${p} -n cert-manager 2>&1 | tee /tmp/k_desc_endpoints_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n cert-manager get po --no-headers -o custom-columns=":metadata.name") ; do kubectl -n cert-manager describe po ${p} 2>&1 | tee /tmp/k_desc_po_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n cert-manager get rs --no-headers -o custom-columns=":metadata.name") ; do kubectl describe rs ${p} -n cert-manager 2>&1 | tee /tmp/k_desc_replicaset_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n cert-manager get sa --no-headers -o custom-columns=":metadata.name") ; do kubectl describe sa ${p} -n cert-manager 2>&1 | tee /tmp/k_desc_serviceaccount_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n cert-manager get secrets --no-headers -o custom-columns=":metadata.name") ; do kubectl describe secrets ${p} -n cert-manager 2>&1 | tee /tmp/k_desc_secrets_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n cert-manager get services --no-headers -o custom-columns=":metadata.name") ; do kubectl describe service ${p} -n cert-manager 2>&1 | tee /tmp/k_desc_service_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n cert-manager get svc --no-headers -o custom-columns=":metadata.name") ; do kubectl describe svc ${p} -n cert-manager 2>&1 | tee /tmp/k_desc_svc_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done ###----- "kubectl logs" command for "cert-manager" namespace ----- ##### for p in $(kubectl -n cert-manager get po --no-headers -o custom-columns=":metadata.name") ; do kubectl -n cert-manager logs ${p} --all-containers 2>&1 | tee /tmp/k_logs_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).log ; done
# tar -cvzf /tmp/apigee_hybrid_logs_$(date +%Y.%m.%d_%H.%M).tar.gz /tmp/k_*
אם קובץ ה-TAR גדול מ-25MB, אפשר להעלות אותו ל-Google Drive ולשתף איתנו את הקישור. אפשר גם להשתמש בפקודה split כדי לפצל את הקבצים הגדולים לחלקים של 25MB שאפשר להעלות לפורטל התמיכה.
# split -b 25M diagnostic.tar.gz "diagnostic.tar.gz.part"
Apigee hybrid Cassandra must-gather
איסוף נתונים בסיסיים
עליך לספק את הפרטים הבאים:
- פלטפורמת Apigee Hybrid (GKE, GKE בארגון, AKS, EKS וכו')
- גרסת Apigee Hybrid
- מזהה הפרויקט ב-Google Cloud
- ארגון Apigee Hybrid
- סביבת Apigee Hybrid
- האם מדובר בפריסה באזור אחד או בכמה אזורים?
- קובץ
overrides.yaml(אחד לכל אשכול) - כמה ארגונים ב-Apigee Hybrid מותקנים באותו אשכול?
- האם נעשו שינויים לאחרונה?
איסוף מידע על תוצאות ניפוי הבאגים ב-Cassandra
Run the below script to capture Cassandra debugging information from an Apigee hybrid cluster: # Create a temporary directory to store the Cassandra debugging information. mkdir /tmp/apigee-cassandra-debug-info/ # Loop through all Cassandra pods for APIGEE_CASSANDRA_POD in $(kubectl -n apigee get pods -l app=apigee-cassandra --no-headers -o custom-columns=":metadata.name") ; do # Get Cassandra version kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD version' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_version_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt # Get Cassandra datacenter status kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD status' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_status_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt # Get Cassandra cluster information kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD describecluster' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_describecluster_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt # Get current ring/token status across the datacenter kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD ring' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_ring_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt # Get more information about heap usage, uptime, exceptions, etc kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD info' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_info_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt # Get gossip info kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD gossipinfo' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_gossipinfo_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt # Get Cassandra compaction details kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD compactionstats' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_compactionstats_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD compactionhistory' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_compactionhistory_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD getcompactionthroughput' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_getcompactionthroughput_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD getconcurrentcompactors' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_getconcurrentcompactors_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt # Get status of current Cassandra operations kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD tablestats' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_tablestats_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD tpstats' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_tpstats_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD netstats' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_netstat_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD tablestats' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_tablestats_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD gcstats' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_gcstats_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt # Get proxy histograms (shows the full request latency recorded by the coordinator) kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD proxyhistograms' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_proxyhistograms_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt done # compress all collected data tar -czvf apigee-cassandra-debug-info-$(date +%Y.%m.%d_%H.%M.%S).tar.gz -C /tmp apigee-cassandra-debug-info
תבניות של בקשות תמיכה ובקשות תמיכה לדוגמה
בקטע הזה מפורטות תבניות של פניות ותבניות לדוגמה של פניות לגבי מוצרים שונים, על סמך השיטות המומלצות שמתוארות במסמך הזה:
Apigee Cloud
תבנית
בקטע הזה מופיעה תבנית לדוגמה ל-Apigee ב-Google Cloud.
הבעיה:
<כאן צריך לתת תיאור מפורט של הבעיה או של ההתנהגות שזיהית בצד שלך. במקרה הצורך, צריך לכלול את שם המוצר והגרסה שלו.>
הודעת שגיאה:
<Include the complete error message observed (if any)>
שעת ההתחלה של הבעיה (בפורמט ISO 8601):
שעת הסיום של הבעיה (בפורמט ISO 8601):
פרטי ההגדרה של Apigee:
שמות הארגונים:
שמות הסביבות:
שמות ה-proxy ל-API:
מספרי הגרסאות:
צעדים לשחזור:
<Provide steps to reproduce the issue where possible>
מידע אבחוני:
<רשימת הקבצים המצורפים>
דוגמה לבקשת תמיכה
בקטע הזה מופיעה דוגמה לתרחיש שימוש ב-Apigee ב-Google Cloud.
הבעיה:
אנחנו רואים מספר גבוה של שגיאות מסוג 503 Service Unavailable בארגון Public Cloud שלנו. אפשר לבדוק את הבעיה ולפתור אותה, או להסביר לנו איך לפתור אותה?
הודעת שגיאה:
{"fault":{"faultstring":"The Service is temporarily available", "detail":{"errorcode":"messaging.adaptors.http.flow.ServiceUnavailable"}}}
שעת ההתחלה של הבעיה (בפורמט ISO 8601): 2020-10-04 06:30 IST
שעת סיום הבעיה (בפורמט ISO 8601): הבעיה עדיין מתרחשת.
פרטי ההגדרה של Apigee Cloud:
שמות הארגונים: myorg
שמות הסביבות: dev
שמות ה-proxy ל-API: myproxy
מספרי הגרסאות: 3
צעדים לשחזור:
מריצים את הפקודה הבאה curl כדי לשחזר את הבעיה:
curl -X GET 'https://myorg-dev.apigee.net/v1/myproxy'
מידע אבחוני:
פלט של כלי לניפוי באגים (trace-503.xml)
מודל השתתפות היברידי
תבנית
בקטע הזה מופיעה תבנית לדוגמה ל-Apigee Hybrid.
הבעיה:
<כאן צריך לתת תיאור מפורט של הבעיה או של ההתנהגות שזיהית בצד שלך. במקרה הצורך, צריך לכלול את שם המוצר והגרסה שלו.>
הודעת שגיאה:
<Include the complete error message observed (if any)>
שעת ההתחלה של הבעיה (בפורמט ISO 8601):
שעת הסיום של הבעיה (בפורמט ISO 8601):
פרטי ההגדרה של Apigee Hybrid:
- פלטפורמת Apigee Hybrid:
<כאן צריך לספק מידע על הפלטפורמה שבה התקנתם את הגרסה ההיברידית ואת הגרסה שלה.>
- פרויקט ב-Google Cloud, ארגון וסביבה היברידיים:
מזהה הפרויקט ב-Google Cloud:
<אם אתם משתמשים ב-Google Kubernetes Engine (GKE), עליכם לציין את מזהה הפרויקט שבו נמצאים האשכולות. אם אתם משתמשים ב-GKE On-Prem, Azure Kubernetes Service או Amazon EKS, עליכם לציין את מזהה הפרויקט שאליו אתם שולחים את היומנים.>
ארגון Apigee Hybrid:
סביבת Apigee Hybrid: - Apigee Hybrid וגרסאות אחרות של CLI:
גרסת Apigee Hybrid CLI (apigeectl):
גרסת Kubectl: - פרטים על השם של אשכול Kubernetes:
k8sCluster:
name:
region: - טופולוגיית הרשת:
<יש לצרף את טופולוגיית הרשת שמתארת את ההגדרה של Apigee Hybrid, כולל מרכזי נתונים, אשכולות Kubernetes, מרחבי שמות ו-Pods.> - קובץ YAML של שינויים:
<Attach the Overrides YAML file.>
שלבים לשחזור
<Provide steps to reproduce the issue where possible>
מידע אבחוני:
<רשימת הקבצים המצורפים>
דוגמה לבקשת תמיכה
בקטע הזה מופיעה דוגמה לשימוש ב-Apigee Hybrid.
הבעיה:
אנחנו מקבלים שגיאות כשמבצעים ממשקי API לניהול ב-Apigee hybrid version 1.3.
הודעת שגיאה:
[ERROR] 400 Bad Request
{
"error": {
"code": 400,
"message": "Error processing MART request: INTERNAL_ERROR",
"errors": [
{
"message": "Error processing MART request: INTERNAL_ERROR",
"domain": "global",
"reason": "failedPrecondition"
}
],
"status": "FAILED_PRECONDITION"
}
}
שעת ההתחלה של הבעיה (בפורמט ISO 8601): מאז 2020-10-24 10:30 PDT
שעת סיום הבעיה (בפורמט ISO 8601): הבעיה עדיין מתרחשת.
פרטי ההגדרה של Apigee Hybrid:
- פלטפורמת Apigee Hybrid
גרסת GKE 1.15.1 - פרויקט ב-Google Cloud, ארגון וסביבה היברידיים
מזהה פרויקט ב-Google Cloud:apigee-hybrid-123456
הערה: זהו מזהה הפרויקט שבו נמצאים האשכולות.
ארגון Apigee Hybrid:apigee-hybrid-123456
סביבת Apigee Hybrid:dev - גרסאות של Apigee Hybrid ושל CLI אחרים:
גרסת Apigee Hybrid CLI (apigeectl):
גרסה:1.2.0
Commit:ac09109
מזהה Build: 214
זמן Build: 2020-03-30T20:23:36Z
גרסת Go: go1.12
גרסת Kubectl:
גרסת לקוח:version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.0", GitCommit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", GitTreeState:"clean", BuildDate:"2019-06-19T16:40:16Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"darwin/amd64"}
גרסת השרת:version.Info{Major:"1", Minor:"14+", GitVersion:"v1.14.10-gke.36", GitCommit:"34a615f32e9a0c9e97cdb9f749adb392758349a6", GitTreeState:"clean", - פרטים על שם אשכול Kubernetes:
k8sCluster:
name:user-cluster-1
region:us-east1 - טופולוגיה של הרשת
הקובץnetwork-topology.pngצורף - קובץ YAML של שינוי ברירת המחדל
הקובץoverrides.yamlצורף
צעדים לשחזור:
מריצים את Management API הבא כדי לראות את השגיאה:
curl -X GET --header "Authorization: Bearer <TOKEN>" "https://apigee.googleapis.com/v1/organizations/apigee-hybrid-123456/environments/dev/keyvaluemaps"
מידע אבחוני:
הקבצים הבאים צורפו:
network-topology.pngoverrides.yaml file- יומני MART
- יומני סנכרון