פריסת הדוגמה 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 מנוהל או התקנתם את מישור הבקרה באשכול.

מנוהל

  1. אתם יכולים להשתמש בתווית ברירת המחדל להוספה או בתווית הגרסה למרחב השמות

    תוויות ברירת מחדל להוספה

    מוסיפים את תווית ההחדרה שמוגדרת כברירת מחדל למרחב השמות.

    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-managed Regular
    asm-managed-rapid חדשנות
    asm-managed-stable יציב
    kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION_LABEL --overwrite
    
  2. אם פרסתם גם את מישור הנתונים המנוהל האופציונלי, צריך להוסיף את ההערה הבאה למרחב השמות NAMESPACE:

    kubectl annotate --overwrite namespace NAMESPACE \
    mesh.cloud.google.com/proxy='{"managed":"true"}'
    

באשכול

  1. כדי לאתר את התווית ב-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.

  2. החלת תווית הגרסה על מרחב השמות שמוגדר כברירת מחדל. בפקודה הבאה, 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 מוזרקים לצד כל שירות.

  1. בשורת הפקודה במחשב שבו התקנתם את Cloud Service Mesh, עוברים אל השורש של ספריית ההתקנה של Cloud Service Mesh. אם צריך, מורידים את קובץ ההתקנה.

  2. פורסים את האפליקציה למרחב השמות שמוגדר כברירת מחדל באמצעות kubectl:

    kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
    
  3. כדי לוודא שהאפליקציה נפרסה בצורה נכונה, מריצים את הפקודות הבאות:

    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
  4. לבסוף, מגדירים את הניתוב של שער הכניסה לאפליקציה:

    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.

ניסיון להשתמש באפליקציה

  1. בודקים שאפליקציית BookInfo פועלת עם curl:

    curl -I http://EXTERNAL_IP/productpage
    

    אם התשובה היא 200, המשמעות היא שהאפליקציה פועלת כמו שצריך עם Cloud Service Mesh.

  2. כדי להציג את דף האינטרנט BookInfo, מזינים את הכתובת הבאה בדפדפן:

    http://EXTERNAL_IP/productpage
    

    אם תרעננו את הדף כמה פעמים, יוצגו בדף המוצר גרסאות שונות של הביקורות, בסדר סיבובי (כוכבים אדומים, כוכבים שחורים, ללא כוכבים).

עכשיו, כשיש לכם אפליקציה שמייצרת תעבורה, אתם יכולים לעיין בדפים של Cloud Service Mesh במסוף Google Cloud כדי לראות מדדים ותכונות אחרות של יכולת צפייה.

סידור וארגון

כשמסיימים את הניסוי עם הדוגמה Bookinfo, מסירים אותה מהאשכול.

  1. מריצים את הסקריפט הבא כדי להסיר את Bookinfo:

    samples/bookinfo/platform/kube/cleanup.sh
    
  2. מאשרים את הכיבוי:

    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
    

המאמרים הבאים

מידע נוסף על הדוגמה Bookinfo