פריסת הדוגמה Bookinfo
בדף הזה מוסבר איך פורסים אפליקציה לדוגמה כדי להדגים את Cloud Service Mesh. אם לא התקנתם את Cloud Service Mesh, תוכלו להיעזר במדריך ההתקנה.
ההתקנה של Cloud Service Mesh כוללת כמה אפליקציות לדוגמה. במדריך הזה מוסבר איך לפרוס את הדוגמה BookInfo. זוהי אפליקציית חנות ספרים פשוטה שכוללת ארבעה שירותים שמספקים דף מוצר באינטרנט, פרטי ספרים, ביקורות (עם כמה גרסאות של שירות הביקורות) ודירוגים – והכול מנוהל באמצעות Cloud Service Mesh. אפשר למצוא את קוד המקור ואת כל הקבצים האחרים שמשמשים בדוגמה הזו בספרייה של ההתקנה של Cloud Service Mesh ב-samples/bookinfo.
הפעלת הזרקה אוטומטית של קובץ sidecar
כדי להפעיל הזרקה אוטומטית של sidecar, צריך לתייג את מרחבי השמות כדי ש-webhook של מזרק ה-sidecar ישייך sidecars מוזרקים לגרסה מסוימת של מישור הבקרה. אם הגדרתם את תג ברירת המחדל, צריך להוסיף תוויות למרחבי השמות באמצעות תוויות ברירת המחדל להוספה. אחרת, צריך להוסיף את תווית הגרסה למרחבי השמות. בנוסף, התווית שמוסיפים תלויה גם בשאלה אם פרסתם Cloud Service Mesh מנוהל או התקנתם את מישור הבקרה באשכול.
מנוהל
אתם יכולים להשתמש בתווית ברירת המחדל להוספה או בתווית הגרסה למרחב השמות
תוויות ברירת מחדל להוספה
מוסיפים את תווית ההחדרה שמוגדרת כברירת מחדל למרחב השמות.
kubectl label namespace NAMESPACE istio-injection=enabled istio.io/rev-תווית הגרסה
לפני שמפעילים אפליקציות, צריך להסיר את התוויות הקודמות
istio-injectionממרחבי השמות שלהן ולהגדיר במקומן את התוויתistio.io/rev=REVISION_LABEL.כדי לשנות את התווית לגרסה ספציפית, לוחצים על
REVISION_LABELומחליפים אותה בתווית הרלוונטית:asm-managed-rapidלערוץ מהיר,asm-managedלערוץ רגיל אוasm-managed-stableלערוץ יציב.תווית הגרסה תואמת לערוץ הפצה:
תווית הגרסה ערוץ asm-managedRegular asm-managed-rapidחדשנות asm-managed-stableיציב kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION_LABEL --overwriteאם פרסתם גם את מישור הנתונים המנוהל האופציונלי, צריך להוסיף את ההערה הבאה למרחב השמות
NAMESPACE:kubectl annotate --overwrite namespace NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
באשכול
כדי לאתר את התווית ב-
istiod, משתמשים בפקודה הבאה:kubectl -n istio-system get pods -l app=istiod --show-labelsהפלט אמור להיראות כך:
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-173-3-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-11910-9,istio=istiod,pod-template-hash=5788d57586 istiod-asm-173-3-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-11910-9,istio=istiod,pod-template-hash=5788d57586בפלט, בעמודה
LABELS, מציינים את הערך שלistiodתווית הגרסה, שמופיע אחרי הקידומתistio.io/rev=. בדוגמה הזו, הערך הואasm-11910-9.החלת תווית הגרסה על מרחב השמות שמוגדר כברירת מחדל. בפקודה הבאה,
REVISIONהוא הערך של תווית הגרסהistiodשרשמתם בשלב הקודם.kubectl label namespace default istio-injection- istio.io/rev=REVISION --overwriteאפשר להתעלם מההודעה
"istio-injection not found"בפלט. כלומר, למרחב השמות לא הייתה בעבר התוויתistio-injection, וזה מה שצריך לקרות בהתקנות חדשות של Cloud Service Mesh או בפריסות חדשות. ההתנהגות של הוספה אוטומטית לא מוגדרת כשבמרחב שמות יש גם את התוויתistio-injectionוגם את תווית הגרסה, ולכן בכל הפקודותkubectl labelבמסמכי Cloud Service Mesh מצוין במפורש שרק אחת מהן מוגדרת.
פריסת האפליקציה
עכשיו, כשההזרקה האוטומטית מופעלת במרחב השמות default, כשפורסים את השירותים של אפליקציית BookInfo, פרוקסי מסוג sidecar מוזרקים לצד כל שירות.
בשורת הפקודה במחשב שבו התקנתם את Cloud Service Mesh, עוברים אל השורש של ספריית ההתקנה של Cloud Service Mesh. אם צריך, מורידים את קובץ ההתקנה.
פורסים את האפליקציה למרחב השמות שמוגדר כברירת מחדל באמצעות
kubectl:kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yamlכדי לוודא שהאפליקציה נפרסה בצורה נכונה, מריצים את הפקודות הבאות:
kubectl get servicesפלט:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE details 10.0.0.31 <none> 9080/TCP 6m kubernetes 10.0.0.1 <none> 443/TCP 7d productpage 10.0.0.120 <none> 9080/TCP 6m ratings 10.0.0.15 <none> 9080/TCP 6m reviews 10.0.0.170 <none> 9080/TCP 6m
וגם
kubectl get podפלט:
NAME READY STATUS RESTARTS AGE details-v1-1520924117-48z17 2/2 Running 0 6m productpage-v1-560495357-jk1lz 2/2 Running 0 6m ratings-v1-734492171-rnr5l 2/2 Running 0 6m reviews-v1-874083890-f0qf0 2/2 Running 0 6m reviews-v2-1343845940-b34q5 2/2 Running 0 6m reviews-v3-1813607990-8ch52 2/2 Running 0 6m
לבסוף, מגדירים את הניתוב של שער הכניסה לאפליקציה:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yamlפלט:
gateway.networking.istio.io/bookinfo-gateway created virtualservice.networking.istio.io/bookinfo created
אימות פריסת האפליקציה
כדי לבדוק אם אפליקציית BookInfo פועלת, צריך לשלוח תעבורה אל שער הכניסה.
אם התקנתם את Cloud Service Mesh ב-Google Distributed Cloud, צריך לקבל את כתובת ה-IP החיצונית של שער הכניסה (ingress gateway) שהגדרתם אחרי ההתקנה של Cloud Service Mesh.
אם התקנתם את Cloud Service Mesh ב-GKE, תוכלו לקבל את כתובת ה-IP החיצונית של שער הכניסה באופן הבא:
kubectl get service istio-ingressgateway -n istio-systemפלט:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 10.19.247.233 35.239.7.64 80:31380/TCP,443:31390/TCP,31400:31400/TCP 27m
בדוגמה הזו, כתובת ה-IP של שירות הכניסה היא
35.239.7.64.
ניסיון להשתמש באפליקציה
בודקים שאפליקציית BookInfo פועלת עם
curl:curl -I http://EXTERNAL_IP/productpageאם התשובה היא
200, המשמעות היא שהאפליקציה פועלת כמו שצריך עם Cloud Service Mesh.כדי להציג את דף האינטרנט BookInfo, מזינים את הכתובת הבאה בדפדפן:
http://EXTERNAL_IP/productpageאם תרעננו את הדף כמה פעמים, יוצגו בדף המוצר גרסאות שונות של הביקורות, בסדר סיבובי (כוכבים אדומים, כוכבים שחורים, ללא כוכבים).
עכשיו, כשיש לכם אפליקציה שמייצרת תעבורה, אתם יכולים לעיין בדפים של Cloud Service Mesh במסוף Google Cloud כדי לראות מדדים ותכונות אחרות של יכולת צפייה.
סידור וארגון
כשמסיימים את הניסוי עם הדוגמה Bookinfo, מסירים אותה מהאשכול.
מריצים את הסקריפט הבא כדי להסיר את Bookinfo:
samples/bookinfo/platform/kube/cleanup.shמאשרים את הכיבוי:
kubectl get virtualservices #-- there should be no virtual services kubectl get destinationrules #-- there should be no destination rules kubectl get gateway #-- there should be no gateway kubectl get pods #-- the Bookinfo pods should be deleted