במאמר הזה מוצגות טכניקות לפתרון בעיות בפריסות של Endpoints ב-Google Kubernetes Engine (GKE) וב-Kubernetes.
נכשל ב-kubectl create -f gke.yaml
אם מוצגת לכם הודעת השגיאה Failed in kubectl create -f gke.yaml, אתם יכולים לפעול לפי השלבים הבאים:
אישור
gcloud:gcloud auth login gcloud auth application-default loginיוצרים אשכול. אפשר להשתמש בפקודה
gcloudהבאה או ליצור אשכול באמצעות מסוףGoogle Cloud .gcloud container clusters create CLUSTER_NAME
מחליפים את
CLUSTER_NAMEבשם האשכול.מקבלים פרטי כניסה לאשכול ומאפשרים ל-
kubectlלגשת אליהם:gcloud container clusters get-credentials CLUSTER_NAME
המדדים והיומנים של נקודות הקצה לא מוצגים
אם אתם מצליחים לשלוח בקשות ל-API, אבל לא רואים מדדים או יומנים בדף Endpoints > Services במסוףGoogle Cloud , נסו את הפעולות הבאות:
- מוודאים שכל השירותים הנדרשים מופעלים.
- בודקים שכל ההרשאות הנדרשות ניתנו.
גישה ליומנים מ-Extensible Service Proxy
אם אתם צריכים לגשת ליומנים של Extensible Service Proxy (ESP) כדי לאבחן בעיות, אתם יכולים להשתמש ב-kubectl באופן הבא:
כדי לקבל את שם הפוד:
kubectl get pod NAME READY STATUS RESTARTS AGE esp-echo-174578890-x09gl 2/2 Running 2 21sשם ה-pod הוא
esp-echo-174578890-x09glויש בו שני קונטיינרים:espו-echo.כדי לראות את היומנים ב-pod, משתמשים בפקודה
kubectl logs:kubectl logs POD_NAME -c CONTAINER_NAME
כאשר
POD_NAMEו-CONTAINER_NAMEמוחזרים מהפקודהkubectl get podבשלב הקודם. לדוגמה:kubectl logs esp-echo-174578890-x09gl -c esp
אימות שם השירות
אם מוצגת הודעת השגיאהFetching service config failed, צריך לוודא ששם השירות שצוין בשדה --service בקובץ מניפסט הפריסה (שנקרא קובץ deployment.yaml) זהה לשם בשדה host במסמך OpenAPI (שנקרא קובץ openapi.yaml).
אם השם השגוי מופיע בקובץ deployment.yaml:
פותחים את הקובץ
deployment.yamlועוברים לקטע שהוגדר עבור מאגר התגים של ספק שירותי הדוא"ל. לדוגמה:containers: - name: esp image: gcr.io/endpoints-release/endpoints-runtime:1 args: [ "--http_port=8081", "--backend=127.0.0.1:8080", "--service=SERVICE_NAME", "--rollout_strategy=managed" ]משנים את
SERVICE_NAMEכך שיתאים לשם בשדהhostב-openapi.yamlושומרים את הקובץdeployment.yaml.מפעילים את שירות Kubernetes:
kubectl create -f deployment.yaml
אם השם השגוי מופיע בקובץ openapi.yaml:
מקבלים את שם השירות ש-Endpoints הוגדר להשתמש בו.
מוחקים את השירות:
gcloud endpoints services delete SERVICE_NAME
מחליפים את
SERVICE_NAMEבשם מהשלב הקודם. יעברו 30 ימים עד שהשירות יימחק מ-Google Cloud. במהלך התקופה הזו, לא תוכלו להשתמש שוב בשם השירות.פותחים את קובץ
openapi.yaml, מתקנים את השם בשדהhostושומרים את הקובץ.פורסים את הגדרת השירות המעודכנת:
gcloud endpoints services deploy openapi.yamlממתינים עד שהפריסה של הגדרות השירות תושלם.
מפעילים את שירות Kubernetes:
kubectl create -f deployment.yaml
בדיקת קובצי ההגדרות
משתמשים ב-
sshכדי להתחבר ל-Pod באמצעותkubectl:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
מחליפים את
CONTAINER_NAMEבשם של הקונטיינר ואתPOD_NAME בשם של ה-Pod. בספרייה
etc/nginx/endpoints/, בודקים אם יש שגיאות בקובצי ההגדרות הבאים:-
nginx.conf- קובץ ההגדרותnginxעם הנחיות ESP -
service.jso– קובץ הגדרת השירות
-
גישה לדף הסטטוס של נקודות הקצה
אם הגדרתם את rollout_strategy ל-managed כשהתחלתם את ESP, ואתם צריכים לגלות את מזהה ההגדרה שמופע של ESP משתמש בו, המידע מופיע בדף הסטטוס של Endpoints.
כדי לגשת לדף הסטטוס של נקודות הקצה:
משתמשים ב-
sshכדי להתחבר ל-Pod באמצעותkubectl:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
מחליפים את
CONTAINER_NAMEבשם הקונטיינר ואתPOD_NAMEבשם הפוד.מתקינים את
curl.כתבו:
curl http://localhost:8090/endpoints_statusיוצג משהו דומה לזה:
"serviceConfigRollouts": { "rolloutId": "2017-08-09r27", "percentages": { "2017-08-09r26": "100" } }
הערך ב-rolloutId הוא מזהה הגדרות השירות שבו ESP משתמש. כדי לוודא ש-ESP משתמש באותה הגדרה כמו Endpoints, אפשר לעיין במאמר בנושא אחזור שם השירות ומזהה ההגדרה.