פריסת הדוגמה Bookinfo
בדף הזה מוסבר איך לפרוס אפליקציה לדוגמה כדי להדגים את Cloud Service Mesh. אם לא הצטרפתם ל-Cloud Service Mesh, כדאי לעיין במדריך לתחילת העבודה.
ההתקנה של Cloud Service Mesh כוללת כמה אפליקציות לדוגמה. במדריך הזה מוסבר איך פורסים את הדוגמה BookInfo. זוהי אפליקציית חנות ספרים פשוטה שמורכבת מארבעה שירותים שמספקים דף מוצר באינטרנט, פרטי ספרים, ביקורות (עם כמה גרסאות של שירות הביקורות) ודירוגים – והכול מנוהל באמצעות Cloud Service Mesh. אפשר למצוא את קוד המקור ואת כל הקבצים האחרים שמשמשים בדוגמה הזו בספרייה של ההתקנה של Cloud Service Mesh ב-samples/bookinfo.
הפעלת הזרקה אוטומטית של קובץ sidecar
מפעילים את מרחב השמות להחדרה. השלבים תלויים בהטמעה של מישור הבקרה.
מנוהל (TD)
- מחילים את תווית ההזרקה שמוגדרת כברירת מחדל על מרחב השמות:
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwriteמנוהל (Istiod)
מומלץ: מריצים את הפקודה הבאה כדי להחיל את תווית ברירת המחדל של הזרקה על מרחב השמות:
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwriteאם אתם משתמשים קיימים במישור הבקרה המנוהל של Istiod: מומלץ להשתמש בהזרקה שמוגדרת כברירת מחדל, אבל יש תמיכה גם בהזרקה שמבוססת על עדכון. פועלים לפי ההוראות הבאות:
מריצים את הפקודה הבאה כדי לאתר את ערוצי ההפצה הזמינים:
kubectl -n istio-system get controlplanerevisionהפלט אמור להיראות כך:
NAME AGE asm-managed-rapid 6d7hהערה: אם ברשימה שלמעלה מופיעות שתי גרסאות של מישור הבקרה, צריך להסיר אחת מהן. אין תמיכה בכמה ערוצי מישור בקרה באשכול.
בפלט, הערך בעמודה
NAMEהוא תווית הגרסה שתואמת לערוץ ההפצה שזמין לגרסה של Cloud Service Mesh.מחילים את תווית הגרסה על מרחב השמות:
kubectl label namespace default \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
בתוך האשכול
מומלץ: מריצים את הפקודה הבאה כדי להחיל את תווית ברירת המחדל של הזרקה על מרחב השמות:
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwriteמומלץ להשתמש בהחדרה שמוגדרת כברירת מחדל, אבל יש תמיכה גם בהחדרה שמבוססת על עדכון: פועלים לפי ההוראות הבאות:
משתמשים בפקודה הבאה כדי לאתר את תווית הגרסה ב-
istiod:kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'מחילים את תווית הגרסה על מרחב השמות. בפקודה הבאה,
REVISION_LABELהוא הערך של התוויתistiodrevision שרשמתם בשלב הקודם.kubectl label namespace default \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
פריסת האפליקציה
עכשיו, כשההזרקה האוטומטית מופעלת במרחב השמות default, כשפורסים את השירותים של אפליקציית BookInfo, פרוקסי מסוג sidecar מוזרקים לצד כל שירות.
בשורת הפקודה במחשב שבו התקנתם את Cloud Service Mesh, עוברים אל השורש של ספריית ההתקנה של Cloud Service Mesh. אם צריך, מורידים את קובץ ההתקנה בתוך האשכול, שכולל את אפליקציית הדוגמה bookinfo, ומחלצים אותו.
פורסים את האפליקציה למרחב השמות שמוגדר כברירת מחדל באמצעות
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 (תוכנה בלבד) ל-VMware, צריך לקבל את כתובת ה-IP החיצונית של שער הכניסה (ingress) שהגדרתם אחרי ההתקנה של 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