פריסת הדוגמה Bookinfo

בדף הזה מוסבר איך לפרוס אפליקציה לדוגמה כדי להדגים את Cloud Service Mesh. אם לא הצטרפתם ל-Cloud Service Mesh, כדאי לעיין במדריך לתחילת העבודה.

ההתקנה של Cloud Service Mesh כוללת כמה אפליקציות לדוגמה. במדריך הזה מוסבר איך פורסים את הדוגמה BookInfo. זוהי אפליקציית חנות ספרים פשוטה שמורכבת מארבעה שירותים שמספקים דף מוצר באינטרנט, פרטי ספרים, ביקורות (עם כמה גרסאות של שירות הביקורות) ודירוגים – והכול מנוהל באמצעות Cloud Service Mesh. אפשר למצוא את קוד המקור ואת כל הקבצים האחרים שמשמשים בדוגמה הזו בספרייה של ההתקנה של Cloud Service Mesh ב-samples/bookinfo.

הפעלת הזרקה אוטומטית של קובץ sidecar

  1. מפעילים את מרחב השמות להחדרה. השלבים תלויים בהטמעה של מישור הבקרה.

    מנוהל (TD)

    1. מחילים את תווית ההזרקה שמוגדרת כברירת מחדל על מרחב השמות:
    kubectl label namespace default \
        istio.io/rev- istio-injection=enabled --overwrite
    

    מנוהל (Istiod)

    מומלץ: מריצים את הפקודה הבאה כדי להחיל את תווית ברירת המחדל של הזרקה על מרחב השמות:

      kubectl label namespace default \
          istio.io/rev- istio-injection=enabled --overwrite
    

    אם אתם משתמשים קיימים במישור הבקרה המנוהל של Istiod: מומלץ להשתמש בהזרקה שמוגדרת כברירת מחדל, אבל יש תמיכה גם בהזרקה שמבוססת על עדכון. פועלים לפי ההוראות הבאות:

    1. מריצים את הפקודה הבאה כדי לאתר את ערוצי ההפצה הזמינים:

      kubectl -n istio-system get controlplanerevision
      

      הפלט אמור להיראות כך:

      NAME                AGE
      asm-managed-rapid   6d7h
      

      הערה: אם ברשימה שלמעלה מופיעות שתי גרסאות של מישור הבקרה, צריך להסיר אחת מהן. אין תמיכה בכמה ערוצי מישור בקרה באשכול.

      בפלט, הערך בעמודה NAME הוא תווית הגרסה שתואמת לערוץ ההפצה שזמין לגרסה של Cloud Service Mesh.

    2. מחילים את תווית הגרסה על מרחב השמות:

      kubectl label namespace default \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      

    בתוך האשכול

    מומלץ: מריצים את הפקודה הבאה כדי להחיל את תווית ברירת המחדל של הזרקה על מרחב השמות:

      kubectl label namespace default \
          istio.io/rev- istio-injection=enabled --overwrite
    

    מומלץ להשתמש בהחדרה שמוגדרת כברירת מחדל, אבל יש תמיכה גם בהחדרה שמבוססת על עדכון: פועלים לפי ההוראות הבאות:

    1. משתמשים בפקודה הבאה כדי לאתר את תווית הגרסה ב-istiod:

      kubectl get deploy -n istio-system -l app=istiod -o \
         jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
      
    2. מחילים את תווית הגרסה על מרחב השמות. בפקודה הבאה, REVISION_LABEL הוא הערך של התווית istiod revision שרשמתם בשלב הקודם.

      kubectl label namespace default \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      

פריסת האפליקציה

עכשיו, כשההזרקה האוטומטית מופעלת במרחב השמות default, כשפורסים את השירותים של אפליקציית BookInfo, פרוקסי מסוג sidecar מוזרקים לצד כל שירות.

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

  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 (תוכנה בלבד) ל-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.

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

  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