הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של Apigee Edge
תסמינים
פריסות של שרתי proxy ל-API נכשלות עם האזהרה No active runtime pods בממשק המשתמש של Apigee hybrid.
הודעות שגיאה
האזהרה No active runtime pods מוצגת בתיבת הדו-שיח Details לצד הודעת השגיאה Deployment issues on ENVIRONMENT: REVISION_NUMBER בדף של ה-proxy ל-API:
הבעיה הזו יכולה להופיע כשגיאות שונות בדפי משאבים אחרים בממשק המשתמש. ריכזנו כאן כמה דוגמאות להודעות שגיאה:
הודעת שגיאה בממשק משתמש היברידי מספר 1: שגיאה במאגר הנתונים
יכול להיות שתראו את השגיאה Datastore בדפים מוצרי API ואפליקציות בממשק המשתמש ההיברידי, כמו שמוצג בהמשך:
הודעת שגיאה בממשק משתמש היברידי מספר 2: שגיאת שרת פנימית
יכול להיות שתופיע שגיאת שרת פנימית בדף מפתחים בממשק המשתמש, כמו שמוצג כאן:
פלט פקודה של Kubectl
יכול להיות שתראו שהסטטוסים של הפודים apiege-mart, apigee-runtime ו-apigee-
synchronizer משתנים ל-CrashLoopBackOff בפלט הפקודה kubectl get pods:
הודעות שגיאה ביומן הרכיבים
השגיאות הבאות של בדיקת הפעילות יופיעו ביומני ה-podapigee-runtime
בגרסאות Apigee hybrid >= 1.4.0:
{"timestamp":"1621575431454","level":"ERROR","thread":"qtp365724939-205","mdc":{"targetpath":"/v1/pr
obes/live"},"logger":"REST","message":"Error occurred : probe failed Probe cps-datastore-
connectivity-liveliness-probe failed due to com.apigee.probe.model.ProbeFailedException{ code =
cps.common.datastoreConnectionNotHealthy, message = Datastore connection not healthy, associated
contexts =
[]}\n\n\tcom.apigee.probe.ProbeAPI.getResponse(ProbeAPI.java:66)\n\tcom.apigee.probe.ProbeAPI.getLiv
eStatus(ProbeAPI.java:55)\n\tsun.reflect.GeneratedMethodAccessor52.invoke(Unknown
Source)\n\tsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\t
","context":"apigee-service-
logs","severity":"ERROR","class":"com.apigee.rest.framework.container.ExceptionMapper","method":"toR
esponse"}
{"timestamp":"1621575431454","level":"ERROR","thread":"qtp365724939-205","mdc":{"targetpath":"/v1/pr
obes/live"},"logger":"REST","message":"Returning error response : ErrorResponse{errorCode =
probe.ProbeRunError, errorMessage = probe failed Probe cps-datastore-connectivity-liveliness-probe
failed due to com.apigee.probe.model.ProbeFailedException{ code =
cps.common.datastoreConnectionNotHealthy, message = Datastore connection not healthy, associated
contexts = []}}","context":"apigee-service-
logs","severity":"ERROR","class":"com.apigee.rest.framework.container.ExceptionMapper","method":"toR
esponse"}
Cannot build a cluster without contact points השגיאה
הבאהapigee-synchronizer תופיע ביומני ה-pod בגרסאות של Apigee Hybrid >= 1.4.0:
{"timestamp":"1621575636434","level":"ERROR","thread":"main","logger":"KERNEL.DEPLOYMENT","message":
"ServiceDeployer.deploy() : Got a life cycle exception while starting service [SyncService, Cannot
build a cluster without contact points] : {}","context":"apigee-service-
logs","exception":"java.lang.IllegalArgumentException: Cannot build a cluster without contact
points\n\tat com.datastax.driver.core.Cluster.checkNotEmpty(Cluster.java:134)\n\tat
com.datastax.driver.core.Cluster.<init>(Cluster.java:127)\n\tat
com.datastax.driver.core.Cluster.buildFrom(Cluster.java:193)\n\tat
com.datastax.driver.core.Cluster$Builder.build(Cluster.java:1350)\n\tat
io.apigee.persistence.PersistenceContext.newCluster(PersistenceContext.java:214)\n\tat
io.apigee.persistence.PersistenceContext.<init>(PersistenceContext.java:48)\n\tat
io.apigee.persistence.ApplicationContext.<init>(ApplicationContext.java:19)\n\tat
io.apigee.runtimeconfig.service.RuntimeConfigServiceImpl.<init>(RuntimeConfigServiceImpl.java:75)
\n\tat
io.apigee.runtimeconfig.service.RuntimeConfigServiceFactory.newInstance(RuntimeConfigServiceFactory.
java:99)\n\tat
io.apigee.common.service.AbstractServiceFactory.initializeService(AbstractServiceFactory.java:301)\n
\tat
...","severity":"ERROR","class":"com.apigee.kernel.service.deployment.ServiceDeployer","method":"sta
rtService"}
השגיאות הבאות של בדיקת הפעילות יופיעו ביומני ה-apigee-martpod
בגרסאות Apigee Hybrid >= 1.4.0:
{"timestamp":"1621576757592","level":"ERROR","thread":"qtp991916558-144","mdc":{"targetpath":"/v1/pr
obes/live"},"logger":"REST","message":"Error occurred : probe failed Probe cps-datastore-
connectivity-liveliness-probe failed due to com.apigee.probe.model.ProbeFailedException{ code =
cps.common.datastoreConnectionNotHealthy, message = Datastore connection not healthy, associated
contexts =
[]}\n\n\tcom.apigee.probe.ProbeAPI.getResponse(ProbeAPI.java:66)\n\tcom.apigee.probe.ProbeAPI.getLiv
eStatus(ProbeAPI.java:55)\n\tsun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)\n\tsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\t","conte
xt":"apigee-service-
logs","severity":"ERROR","class":"com.apigee.rest.framework.container.ExceptionMapper","method":"toR
esponse"}
{"timestamp":"1621576757593","level":"ERROR","thread":"qtp991916558-144","mdc":{"targetpath":"/v1/pr
obes/live"},"logger":"REST","message":"Returning error response : ErrorResponse{errorCode =
probe.ProbeRunError, errorMessage = probe failed Probe cps-datastore-connectivity-liveliness-probe
failed due to com.apigee.probe.model.ProbeFailedException{ code =
cps.common.datastoreConnectionNotHealthy, message = Datastore connection not healthy, associated
contexts = []}}","context":"apigee-service-
logs","severity":"ERROR","class":"com.apigee.rest.framework.container.ExceptionMapper","method":"toR
esponse"}מידע על השגיאה No active runtime pods
בגרסה Apigee hybrid 1.4.0, התכונה liveness probe נוספה לתרמילי apigee-runtime ו-apigee-mart כדי לבדוק את הסטטוס של תרמילי Cassandra. אם כל ה-pods של Cassandra לא יהיו זמינים, בדיקות הפעילות של ה-pods apigee-runtime ו-apigee-mart ייכשלו. לכן, תרמילי ה-apigee-runtime ו-apigee-mart יעברו למצב CrashLoopBackOff , ופריסות של שרתי proxy של API ייכשלו עם האזהרה No active runtime pods.
גם הפוד apigee-synchronizer יעבור למצב CrashLoopBackOff
כי פודי Cassandra לא זמינים.
סיבות אפשריות
אלה כמה סיבות אפשריות לשגיאה הזו:
| מטרה | תיאור |
|---|---|
| פודים של Cassandra מושבתים | פודים של Cassandra מושבתים, ולכן פודים של apigee-runtime לא יוכלו לתקשר עם מסד הנתונים של Cassandra. |
| שכפול Cassandra מוגדר עם פוד אחד בלבד | אם יש רק פוד אחד של Cassandra, הוא יכול להפוך לנקודת כשל בודדת. |
הסיבה: תרמילי Cassandra מושבתים
במהלך תהליך הפריסה של ה-proxy ל-API, apigee-runtime pods מתחברים למסד הנתונים של Cassandra כדי לאחזר משאבים, כמו מפות של מפתח/ערך (KVM) ומטמונים, שמוגדרים ב-proxy ל-API. אם אין פודים של Cassandra שפועלים, הפודים של apigee-runtime לא יוכלו להתחבר למסד הנתונים של Cassandra. התוצאה היא כשל בפריסת ה-API Proxy.
אבחון
- מציגים רשימה של פודים של Cassandra:
kubectl -n apigee get pods -l app=apigee-cassandra
פלט לדוגמה 1:
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 0/1 Pending 0 9m23s
פלט לדוגמה 2:
NAME READY STATUS RESTARTS AGE apigee-cassandra-0 0/1 CrashLoopBackoff 0 10m
- מאמתים את הסטטוס של כל Cassandra pod. הסטטוס של כל ה-pods של Cassandra צריך להיות
Running. אם אחד מ-pods של Cassandra נמצא במצב שונה, יכול להיות שזו הסיבה לבעיה. כדי לפתור את הבעיה:
רזולוציה
- אם אחד מ-pods של Cassandra נמצא במצב
Pending, כדאי לעיין במאמר Cassandra pods are stuck in the Pending state כדי לפתור את הבעיה. - אם אחד מ-pods של Cassandra נמצא במצב
CrashLoopBackoff, כדאי לעיין במאמר Cassandra pods are stuck in the CrashLoopBackoff state כדי לפתור את הבעיה.פלט לדוגמה:
kubectl -n apigee get pods -l app=apigee-runtime NAME READY STATUS RESTARTS AGE apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-2gnch 1/1 Running 13 43m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-42jdv 1/1 Running 13 45m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-l7wq7 1/1 Running 13 43m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-q2thb 1/1 Running 8 38m
kubectl -n apigee get pods -l app=apigee-mart NAME READY STATUS RESTARTS AGE apigee-mart-apigee-hybrid-s-2664b3e-143-u0a5c-rtg69 2/2 Running 8 28m
kubectl -n apigee get pods -l app=apigee-synchronizer NAME READY STATUS RESTARTS AGE apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zp269nb 2/2 Running 10 29m apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zp2w2jp 2/2 Running 0 4m40s apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zpkfkvq 2/2 Running 0 4m40s apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zpxmzhn 2/2 Running 0 4m40s
הגורם: עותק Cassandra שהוגדר עם פוד אחד בלבד
אם מספר העותקים של Cassandra מוגדר לאחד, יהיה זמין רק פוד אחד של Cassandra בזמן הריצה. כתוצאה מכך, יכול להיות שapigee-runtime יחידות Pod ייתקלו בבעיות קישוריות
אם יחידת ה-Pod של Cassandra לא תהיה זמינה למשך תקופה מסוימת.
אבחון
- מקבלים את קבוצת ה-Cassandra Stateful ובודקים את מספר העותקים הנוכחי:
kubectl -n apigee get statefulsets -l app=apigee-cassandra
פלט לדוגמה:
NAME READY AGE apigee-cassandra-default 1/1 21m
- אם מספר העותקים מוגדר ל-1, צריך לבצע את השלבים הבאים כדי להגדיל אותו למספר גבוה יותר.
רזולוציה
בפריסות של Apigee Hybrid שאינן בסביבת ייצור, יכול להיות שמספר העותקים של Cassandra מוגדר כ-1. אם זמינות גבוהה של Cassandra חשובה בפריסות שאינן ייצור, צריך להגדיל את מספר העותקים ל-3 כדי לפתור את הבעיה הזו.
כדי לפתור את הבעיה:
- מעדכנים את הקובץ
overrides.yamlומגדירים את מספר העותקים של Cassandra ל-3:cassandra: replicaCount: 3
מידע על ההגדרה של Cassandra זמין במאמר חומר עזר בנושא מאפייני הגדרה.
- מחילים את ההגדרות שלמעלה באמצעות Helm:
הרצת בדיקה:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE \ --dry-run
התקנת תרשים Helm
helm upgrade datastore apigee-datastore/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
- מקבלים את קבוצת ה-Cassandra Stateful ובודקים את מספר העותקים הנוכחי:
kubectl -n get statefulsets -l app=apigee-cassandra
פלט לדוגמה:
NAME READY AGE apigee-cassandra-default 3/3 27m
- מקבלים את ה-pods של Cassandra ובודקים את מספר המופעים הנוכחי. אם לא כל הפודים מוכנים ונמצאים במצב
Running, צריך להמתין עד ליצירה ולהפעלה של פודים חדשים של Cassandra:kubectl -n get pods -l app=apigee-cassandra
פלט לדוגמה:
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 29m apigee-cassandra-default-1 1/1 Running 0 21m apigee-cassandra-default-2 1/1 Running 0 19m
פלט לדוגמה:
kubectl -n apigee get pods -l app=apigee-runtime NAME READY STATUS RESTARTS AGE apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-2gnch 1/1 Running 13 43m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-42jdv 1/1 Running 13 45m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-l7wq7 1/1 Running 13 43m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-q2thb 1/1 Running 8 38m
kubectl -n apigee get pods -l app=apigee-mart NAME READY STATUS RESTARTS AGE apigee-mart-apigee-hybrid-s-2664b3e-143-u0a5c-rtg69 2/2 Running 8 28m
kubectl -n apigee get pods -l app=apigee-synchronizer NAME READY STATUS RESTARTS AGE apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zp269nb 2/2 Running 10 29m apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zp2w2jp 2/2 Running 0 4m40s apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zpkfkvq 2/2 Running 0 4m40s apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zpxmzhn 2/2 Running 0 4m40s
צריך לאסוף פרטי אבחון
אם הבעיה נמשכת גם אחרי שמבצעים את ההוראות שלמעלה, צריך לאסוף את נתוני האבחון הבאים ואז לפנות אל Cloud Customer Care של Google.
- מזהה פרויקט ב-Google Cloud
- ארגון Apigee Hybrid/Apigee
- ב-Apigee Hybrid:
overrides.yaml, אנונימיזציה של מידע רגיש - סטטוס של pod ב-Kubernetes בכל מרחבי השמות:
kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
- dump של פרטי אשכול Kubernetes:
# generate kubernetes cluster-info dump kubectl cluster-info dump -A --output-directory=/tmp/kubectl-cluster-info-dump # zip kubernetes cluster-info dump zip -r kubectl-cluster-info-dump`date +%Y.%m.%d_%H.%M.%S`.zip /tmp/kubectl-cluster-info-dump/*
קובצי עזר
- הגדלת הקיבולת של Cassandra באופן אופקי
- Kubernetes Application Introspection and Debugging
- מדריך מקוצר לשימוש ב-kubectl