1. מבוא
קשה להריץ אתרים ואפליקציות.
דברים לא תקינים, השרתים קורסים, והעלייה בביקוש גורמת לניצול רב יותר של משאבים, וביצוע שינויים בלי זמן השבתה הוא משימה מסובכת וקלה.
דמיינו כלי שיכול לעזור לכם לעשות את כל זה ואפילו לאפשר לכם לבצע אוטומציה! באמצעות GKE, כל זה לא רק אפשרי, זה קל! ב-Codelab הזה, מקבלים את התפקיד של מפתח שמנהל אתר מסחר אלקטרוני עבור חברה בדיונית -Fancy Store. בגלל בעיות התאמה לעומס (scaling) והפסקות זמניות בשירות, עליכם לפרוס את האפליקציה שלכם ב-GKE!
התרגילים מאורגנים בהתאם לחוויה של מפתחי ענן נפוצים:
- יצירת אשכול GKE.
- יוצרים קונטיינר ב-Docker.
- פריסת הקונטיינר ב-GKE.
- חשיפת המאגר באמצעות שירות.
- התאמת הגודל של הקונטיינר למספר רפליקות.
- משנים את האתר.
- משיקים גרסה חדשה ללא זמן השבתה.
תרשים הארכיטקטורה
מה תלמדו
- איך ליצור אשכול GKE
- איך יוצרים קובץ אימג' של Docker
- איך פורסים קובצי אימג' של Docker ל-Kubernetes
- איך להתאים לעומס של אפליקציה ב-Kubernetes
- איך לבצע עדכון מתגלגל ב-Kubernetes
דרישות מוקדמות
- חשבון Google עם הרשאת אדמין ליצירת פרויקטים או לפרויקט עם תפקיד 'בעלי הפרויקט'
- הבנה בסיסית של Docker ו-Kubernetes (אם אין לכם הבנה בסיסית, כדאי לעיין כעת ב-Docker וב-Kubernetes).
2. הגדרת סביבה
הגדרת סביבה בקצב אישי
אם עדיין אין לכם חשבון Google, תצטרכו ליצור חשבון. נכנסים למסוף Google Cloud ויוצרים פרויקט חדש.
חשוב לזכור: מזהה הפרויקט הוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). נתייחס אליה בתור PROJECT_ID
מאוחר יותר.
בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud. משתמשים חדשים ב-Google Cloud זכאים לתקופת ניסיון בחינם בשווי 300$. אם אתם לא משתמשים חדשים, אל תדאגו כי ה-Codelab לא אמור לעלות יותר מכמה דולרים. עם זאת, יכול להיות שהשימוש ב-Codelab יעלה לכם יותר אם תשתמשו ביותר משאבים או תשאירו אותם פועלים (עיינו בקטע 'ניקוי' בסוף). מידע נוסף זמין במאמר תמחור.
Cloud Shell
אפשר לתפעל מרחוק את Google Cloud ואת GKE במחשב הנייד, אבל אפשר להשתמש ב-Cloud Shell – סביבת שורת פקודה שפועלת ב-Cloud – ב-Codelab.
המכונה הווירטואלית הזו שמבוססת על Debian נטענת עם כל הכלים למפתחים שדרושים לכם. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. כלומר, כל מה שדרוש ל-Codelab הזה הוא דפדפן (כן, הוא פועל ב-Chromebook).
- כדי להפעיל את Cloud Shell ממסוף Cloud, לוחצים על Activate Cloud Shell (ההקצאה וההתחברות לסביבה אמורות להימשך כמה דקות).
אחרי ההתחברות ל-Cloud Shell, אתם אמורים לראות שכבר בוצע אימות ושהפרויקט כבר מוגדר ל-PROJECT_ID
שלכם.
gcloud auth list
פלט הפקודה
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
פלט הפקודה
[core] project = <PROJECT_ID>
אם מסיבה כלשהי הפרויקט לא מוגדר, פשוט מריצים את הפקודה הבאה:
gcloud config set project <PROJECT_ID>
רוצה למצוא את ה-PROJECT_ID
שלך? אתם יכולים לבדוק באיזה מזהה השתמשתם בשלבי ההגדרה או לחפש אותו במרכז הבקרה של מסוף Cloud:
Cloud Shell גם מגדירה משתני סביבה כברירת מחדל, והוא יכול להיות שימושי כשמריצים פקודות עתידיות.
echo $GOOGLE_CLOUD_PROJECT
פלט הפקודה
<PROJECT_ID>
- בשלב האחרון, מגדירים את ברירת המחדל של האזור והפרויקט.
gcloud config set compute/zone us-central1-f
אפשר לבחור מגוון אזורים שונים. מידע נוסף זמין במאמר אזורים ו אזורים.
3. יצירת אשכול GKE
עכשיו, כשיש לכם את סביבת הפיתוח העבודה, אתם צריכים אשכול GKE כדי לפרוס את האתר שלכם. לפני שיוצרים אשכול, צריך לוודא שממשקי ה-API המתאימים מופעלים. מריצים את הפקודה הבאה כדי להפעיל את ה-API של הקונטיינרים:
gcloud services enable container.googleapis.com
עכשיו תוכלו ליצור את האשכול שלכם! כדי ליצור אשכול בשם fancy-cluster עם 3 צמתים, צריך לפעול לפי השלבים הבאים:
gcloud container clusters create fancy-cluster --num-nodes 3
יכול להיות שיחלפו כמה דקות עד ליצירת האשכול. אחרי זה, מריצים את הפקודה הבאה כדי לראות את שלושת המכונות הווירטואליות (VM) של העובדים באשכול:
gcloud compute instances list
פלט:
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS gke-fancy-cluster-default-pool-ad92506d-1ng3 us-east4-a n1-standard-1 10.150.0.7 XX.XX.XX.XX RUNNING gke-fancy-cluster-default-pool-ad92506d-4fvq us-east4-a n1-standard-1 10.150.0.5 XX.XX.XX.XX RUNNING gke-fancy-cluster-default-pool-ad92506d-4zs3 us-east4-a n1-standard-1 10.150.0.6 XX.XX.XX.XX RUNNING
תוכלו גם לראות את האשכול ואת המידע שקשור אליו במסוף Cloud. לוחצים על לחצן התפריט בפינה השמאלית העליונה, גוללים למטה אל Kubernetes Engine ולוחצים על Clusters. אתם אמורים לראות את האשכול בשם fancy-cluster.
מעולה! יצרתם את האשכול הראשון שלכם!
4. שכפול מאגר המקור
בגלל שזה אתר קיים, צריך רק לשכפל את המקור מהמאגר כדי שתוכלו להתמקד ביצירת תמונות Docker ובפריסה ל-GKE.
מריצים את הפקודות הבאות כדי לשכפל את מאגר המקור למכונה של Cloud Shell ולשנות אותה לספרייה המתאימה. בנוסף, תתקינו את יחסי התלות של Node.js כדי שתוכלו לבדוק את האפליקציה לפני פריסתה.
cd ~ git clone https://github.com/googlecodelabs/monolith-to-microservices.git cd ~/monolith-to-microservices ./setup.sh
פעולה זו משכפלת את המאגר, משנה את הספרייה ומתקינה את יחסי התלות שדרושים כדי להפעיל באופן מקומי את האפליקציה. יכול להיות שהסקריפט ירוץ כמה דקות.
מומלץ לבדוק בקפידה את הבקשה שלכם. מריצים את הפקודה הבאה כדי להפעיל את שרת האינטרנט:
cd ~/monolith-to-microservices/monolith npm start
פלט:
Monolith listening on port 8080!
כדי להציג את האפליקציה בתצוגה מקדימה, לוחצים על סמל התצוגה המקדימה לאינטרנט בתפריט Cloud Shell ובוחרים באפשרות Preview ביציאה 8080.
זה אמור להיפתח חלון חדש שבו תוכלו לראות את חנות המהודרת בפעולה!
אפשר לסגור את החלון הזה אחרי שמעיינים באתר. לוחצים על Control+C
(Windows או Mac) בחלון הטרמינל כדי להפסיק את תהליך שרת האינטרנט.
5. יצירת קונטיינר Docker באמצעות Cloud Build
עכשיו, כשקובצי המקור מוכנים לשליחה, הגיע הזמן להעביר את האפליקציה ב-Docker.
בדרך כלל צריך לנקוט גישה דו-שלבית שכוללת פיתוח קונטיינר של Docker ודחיפה שלו למרשם כדי לאחסן את קובץ האימג' ש-GKE שולף ממנו. אבל זאת אומרת שאפשר להשתמש ב-Cloud Build כדי ליצור קונטיינר ב-Docker ולהוסיף את התמונה ל-Container Registry בפקודה אחת. (כדי להציג את התהליך הידני של יצירת קובץ docker ודחיפה שלו, עיינו במדריך למתחילים ל-Container Registry).
מערכת Cloud Build דוחסת את הקבצים מהספרייה ומעבירה אותם לקטגוריה של Cloud Storage. לאחר מכן, תהליך ה-build לוקח את הקבצים מהקטגוריה ומשתמש בקובץ ה-Docker כדי להריץ את תהליך ה-build של Docker. מכיוון שציינת את הדגל --tag
עם המארח כ-gcr.io
לאימג' של ה-Docker, תמונת ה-Docker שמתקבלת מועברת ל-Container Registry.
קודם כול, מפעילים את Cloud Build API באמצעות הפקודה הבאה:
gcloud services enable cloudbuild.googleapis.com
אחרי שמפעילים את ה-API, מריצים את הפקודה הבאה ב-Cloud Shell כדי להתחיל את תהליך ה-build:
cd ~/monolith-to-microservices/monolith gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .
התהליך הזה נמשך כמה דקות, אבל אחרי שהוא מסתיים אפשר לראות את הפלט הבא בטרמינל:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ID CREATE_TIME DURATION SOURCE IMAGES STATUS 1ae295d9-63cb-482c-959b-bc52e9644d53 2019-08-29T01:56:35+00:00 33S gs://<PROJECT_ID>_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz gcr.io/<PROJECT_ID>/monolith:1.0.0 SUCCESS
כדי לצפות בהיסטוריית ה-build או לצפות בתהליך בזמן אמת, אפשר להיכנס אל Cloud Console. לוחצים על לחצן התפריט בפינה הימנית העליונה, גוללים למטה אל Ci/CD, לוחצים על Cloud Build ולבסוף לוחצים על History. תוצג רשימה של גרסאות ה-build הקודמות, אבל אמורה להיות רק הגרסה שיצרתם.
כשלוחצים על Build ID, ניתן לראות את כל הפרטים של ה-build, כולל פלט היומן.
בדף הפרטים של ה-build, אפשר לראות את קובץ האימג' בקונטיינר שנוצר בלחיצה על שם התמונה בקטע של פרטי ה-build.
6. פריסת קונטיינרים ב-GKE
עכשיו, אחרי שיצרתם את האתר בקונטיינר והעברתם את הקונטיינר ל-Container Registry, אתם יכולים לפרוס אותו ב-Kubernetes!
כדי לפרוס אפליקציות ולנהל אותן באשכול GKE, צריך לתקשר עם מערכת ניהול האשכולות של Kubernetes. בדרך כלל אפשר לעשות זאת באמצעות כלי שורת הפקודה kubectl.
מערכת Kubernetes מייצגת אפליקציות בתור Pods, שהם יחידות שמייצגות קונטיינר (או קבוצה של קונטיינרים בצימוד הדוק). Pod הוא היחידה הקטנה ביותר ב-Kubernetes שאפשר לפרוס. כאן, כל Pod מכיל רק את מאגר המונולית.
כדי לפרוס את האפליקציה, צריך ליצור Deployment (פריסה). פריסה מנהלת עותקים מרובים של האפליקציה, שנקראים רפליקות, ומתזמנת אותם כך שיפעלו בצמתים הנפרדים באשכול. במקרה הזה, הפריסה תריץ רק Pod אחד של האפליקציה. פריסות מבטיחות זאת על ידי יצירת ReplicaSet. ה-ReplicaSet היא האחראית לוודא שמספר הרפליקות שצוין פועלים תמיד.
הפקודה kubectl create deployment
גורמת ל-Kubernetes ליצור פריסה בשם מונולית באשכול עם רפליקה 1.
מריצים את הפקודה הבאה כדי לפרוס את האפליקציה:
kubectl create deployment monolith --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0
אימות הפריסה
כדי לוודא שהפריסה נוצרה בהצלחה, מריצים את הפקודה הבאה (יכול להיות שיחלפו כמה דקות עד שהסטטוס של ה-Pod יהיה 'פועל'):
kubectl get all
פלט:
NAME READY STATUS RESTARTS AGE pod/monolith-7d8bc7bf68-htm7z 1/1 Running 0 6m21s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.27.240.1 <none> 443/TCP 24h NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/monolith 1 1 1 1 20m NAME DESIRED CURRENT READY AGE replicaset.apps/monolith-7d8bc7bf68 1 1 1 20m
הפלט הזה מראה כמה דברים. ניתן לראות את הפריסה הנוכחית. ב-ReplicaSet, עם מספר ה-Pod הרצוי של 1. ו-Pod, שרץ. נראה שיצרת את הכול בהצלחה!
כדי להציג כל אחד מהמשאבים בנפרד, אפשר להריץ את הפקודות הבאות:
# Show pods kubectl get pods # Show deployments kubectl get deployments # Show replica sets kubectl get rs #You can also combine them kubectl get pods,deployments
כדי לראות את כל היתרונות של Kubernetes, אפשר לדמות קריסת שרת, למחוק את ה-Pod ולראות מה קורה.
מעתיקים את שם ה-Pod מהפקודה הקודמת ומריצים את הפקודה הבאה כדי למחוק אותו:
kubectl delete pod/<POD_NAME>
אם מהירות גבוהה מספיק, מריצים את הפקודה הקודמת כדי לראות את כולם שוב. יוצגו שני Pods, אחד שמסתיים והשני יוצר או פועל:
kubectl get all
פלט:
NAME READY STATUS RESTARTS AGE pod/monolith-7d8bc7bf68-2bxts 1/1 Running 0 4s pod/monolith-7d8bc7bf68-htm7z 1/1 Terminating 0 9m35s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.27.240.1 <none> 443/TCP 24h NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/monolith 1 1 1 1 24m NAME DESIRED CURRENT READY AGE replicaset.apps/monolith-7d8bc7bf68 1 1 1 24m
למה זה קרה? ה-ReplicaSet זיהתה שרצף ה-pod הסתיים והפעיל רצף (Pod) חדש כדי לשמור על מספר הרפליקות הרצוי. בהמשך נסביר לכם איך לבצע את ההתאמה כדי לוודא שיש כמה מופעים פעילים, כך שאם אירוע אחד יכבה, המשתמשים לא יראו זמן השבתה!
7. חשיפת פריסת GKE
פרסת את האפליקציה שלך ב-GKE, אבל אין לך דרך לגשת אליה מחוץ לאשכול. כברירת מחדל, אין גישה לקונטיינרים שאתם מריצים ב-GKE מהאינטרנט כי לא מוגדרות להם כתובות IP חיצוניות. עליכם לחשוף את האפליקציה באופן מפורש לתנועת גולשים מהאינטרנט דרך משאב שירות. שירות מספק תמיכה ברשתות וב-IP לקבוצות ה-Pod של האפליקציה. מערכת GKE יוצרת כתובת IP חיצונית ומאזן עומסים (בכפוף לחיוב) לאפליקציה.
מריצים את הפקודה הבאה כדי לחשוף את האתר לאינטרנט:
kubectl expose deployment monolith --type=LoadBalancer --port 80 --target-port 8080
פלט:
service/monolith exposed
גישה לשירות
מערכת GKE מקצה את כתובת ה-IP החיצונית למשאב השירות ולא לפריסה. כדי למצוא את כתובת ה-IP החיצונית ש-GKE הקצה לאפליקציה שלכם, אפשר לבדוק את השירות באמצעות הפקודה kubectl get service:
kubectl get service
פלט:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE monolith 10.3.251.122 203.0.113.0 80:30877/TCP 3d
אחרי שקובעים את כתובת ה-IP החיצונית של האפליקציה, מעתיקים אותה. מכוונים את הדפדפן לכתובת ה-URL הזו (למשל http://203.0.113.0) כדי לבדוק אם האפליקציה נגישה.
אתם אמורים לראות את אותו אתר שבדקתם קודם. מעולה! האתר פועל במלואו ב-Kubernetes!
8. התאמה לעומס של פריסת GKE
עכשיו, אחרי שהטמעת ב-GKE מופע פועל של האפליקציה וחשיפת אותו לאינטרנט, האתר שלך הפך לפופולרי ביותר! אתם צריכים דרך להתאים את האפליקציה לכמה מופעים כדי שתוכלו לטפל בתנועת הגולשים. לומדים להתאים את האפליקציה לשלוש רפליקות לכל היותר.
מריצים את הפקודה הבאה כדי להתאים את הפריסה לעד שלוש רפליקות:
kubectl scale deployment monolith --replicas=3
פלט:
deployment.apps/monolith scaled
אימות פריסה מותאמת
כדי לוודא שהתאמת הפריסה בוצעה בהצלחה, מריצים את הפקודה הבאה:
kubectl get all
פלט:
NAME READY STATUS RESTARTS AGE pod/monolith-7d8bc7bf68-2bxts 1/1 Running 0 36m pod/monolith-7d8bc7bf68-7ds7q 1/1 Running 0 45s pod/monolith-7d8bc7bf68-c5kxk 1/1 Running 0 45s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.27.240.1 <none> 443/TCP 25h service/monolith LoadBalancer 10.27.253.64 XX.XX.XX.XX 80:32050/TCP 6m7s NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/monolith 3 3 3 3 61m NAME DESIRED CURRENT READY AGE replicaset.apps/monolith-7d8bc7bf68 3 3 3 61m
אמורים להופיע שלושה מופעים של ה-Pod. כמו כן, חשוב לזכור של-Deployment ו-ReplicaSet יש עכשיו ספירה רצויה של שלוש.
9. ביצוע שינויים באתר
צוות השיווק ביקש ממך לשנות את דף הבית של האתר. הם חושבים שהפלטפורמה צריכה לספק מידע אינפורמטיבי יותר, כי הם מסבירים מה החברה שלכם ומה אתם מוכרים בפועל. בקטע הזה תוסיפו טקסט לדף הבית כדי לשמח את צוות השיווק! נראה שאחד מהמפתחים שלנו כבר יצר את השינויים עם שם הקובץ index.js.new
. אפשר להעתיק את הקובץ אל index.js
והשינויים יופיעו. צריך לבצע את ההוראות הבאות כדי לבצע את השינויים המתאימים.
מריצים את הפקודות הבאות, מעתיקים את הקובץ המעודכן לשם הקובץ הנכון ומדפיסים למסך את התוכן שלו כדי לאמת את השינויים:
cd ~/monolith-to-microservices/react-app/src/pages/Home mv index.js.new index.js cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js
הקוד שמתקבל אמור להיראות כך:
/* Copyright 2019 Google LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ import React from "react"; import { makeStyles } from "@material-ui/core/styles"; import Paper from "@material-ui/core/Paper"; import Typography from "@material-ui/core/Typography"; const useStyles = makeStyles(theme => ({ root: { flexGrow: 1 }, paper: { width: "800px", margin: "0 auto", padding: theme.spacing(3, 2) } })); export default function Home() { const classes = useStyles(); return ( <div className={classes.root}> <Paper className={classes.paper}> <Typography variant="h5"> Fancy Fashion & Style Online </Typography> <br /> <Typography variant="body1"> Tired of mainstream fashion ideas, popular trends and societal norms? This line of lifestyle products will help you catch up with the Fancy trend and express your personal style. Start shopping Fancy items now! </Typography> </Paper> </div> ); }
עדכנתם את רכיבי React, אבל צריך ליצור את אפליקציית React כדי ליצור את הקבצים הסטטיים. מריצים את הפקודה הבאה כדי ליצור את אפליקציית React ומעתיקים אותה לספרייה הציבורית המונולית:
cd ~/monolith-to-microservices/react-app npm run build:monolith
עכשיו, לאחר שהקוד שלכם עודכן, עליכם ליצור מחדש את הקונטיינר של Docker ולפרסם אותו ב-Container Registry. אפשר להשתמש באותה פקודה כמו הקודמת, אבל הפעם מעדכנים את תווית הגרסה.
מריצים את הפקודה הבאה כדי להפעיל Cloud Build חדש עם גרסת תמונה מעודכנת של 2.0.0:
cd ~/monolith-to-microservices/monolith #Feel free to test your application npm start gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .
לוחצים על Control+C
(Windows או Mac) בחלון הטרמינל כדי להפסיק את תהליך שרת האינטרנט.
בקטע הבא תשתמשו בתמונה כדי לעדכן את האפליקציה ללא זמן השבתה.
10. עדכון האתר ללא זמן השבתה
השינויים הושלמו וצוות השיווק מרוצה מהעדכונים שלך! הגיע הזמן לעדכן את האתר ללא הפרעה למשתמשים. כדי לעדכן את האתר, פועלים לפי ההוראות הבאות.
העדכונים המצטברים של GKE מבטיחים שהאפליקציה שלכם תישאר זמינה וזמינה גם כשהמערכת מחליפה מופעים של קובץ האימג' הישן בקונטיינר בכל הרפליקות הפעילות.
משורת הפקודה, אפשר להגיד ל-Kubernetes שאתם רוצים לעדכן את התמונה של הפריסה לגרסה חדשה באמצעות הפקודה הבאה:
kubectl set image deployment/monolith monolith=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0
פלט:
deployment.apps/monolith image updated
אימות הפריסה
כדי לאמת את עדכון הפריסה, מריצים את הפקודה הבאה:
kubectl get pods
פלט:
NAME READY STATUS RESTARTS AGE monolith-584fbc994b-4hj68 1/1 Terminating 0 60m monolith-584fbc994b-fpwdw 1/1 Running 0 60m monolith-584fbc994b-xsk8s 1/1 Terminating 0 60m monolith-75f4cf58d5-24cq8 1/1 Running 0 3s monolith-75f4cf58d5-rfj8r 1/1 Running 0 5s monolith-75f4cf58d5-xm44v 0/1 ContainerCreating 0 1s
מוצגים שלושה Pods חדשים שנוצרים ומתבצעת השבתה של ה-Pods הישנים. ניתן לדעת לפי גילים מי חדש ואילו ישן. בסופו של דבר, תראו שוב רק שלושה Pods, והם יהיו שלושת ה-Pods המעודכנים שלכם.
כדי לאמת את השינויים, צריך לעבור שוב לכתובת ה-IP החיצונית של מאזן העומסים ולראות שהאפליקציה עודכנה.
מריצים את הפקודה הבאה כדי להציג את רשימת השירותים ולהציג את כתובת ה-IP אם שכחתם אותה:
kubectl get svc
האתר שלך צריך להציג את הטקסט שהוספת לרכיב של דף הבית!
11. הסרת המשאבים
מחיקת מאגר Git
cd ~ rm -rf monolith-to-microservices
מחיקת תמונות ב-Container Registry
הערה: אם יצרתם גרסאות אחרות, תוכלו להשתמש באותו תחביר כדי למחוק גם את התמונות האלה. ה-Codelab הזה מניח שיש לכם רק שני תגים.
# Delete the container image for version 1.0.0 of our monolith gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --quiet # Delete the container image for version 2.0.0 of our monolith gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --quiet
מחיקת ארטיפקטים של Cloud Build מ-Cloud Storage
הערה: אם השתמשתם ב-Cloud Build לפריטי מידע שנוצרו בתהליך הפיתוח (Artifact) שאינם Codelab, יש צורך למחוק באופן ידני את המקור מהקטגוריה gs://<PROJECT_ID>_cloudbuild/source
של Cloud Storage.
# The following command will take all source archives from all builds and delete them from cloud storage # Run this command to print all sources: # gcloud builds list | awk 'NR > 1 {print $4}' gcloud builds list | awk 'NR > 1 {print $4}' | while read line; do gsutil rm $line; done
מחיקת שירות GKE
kubectl delete service monolith kubectl delete deployment monolith
מחיקת אשכול GKE
gcloud container clusters delete fancy-cluster
הערה: יכול להיות שהפקודה הזו תימשך זמן מה.
12. מעולה!
פרסתם, התאמתם ועדכנתם את האתר שלכם ב-GKE. סיימתם להתנסות ב-Docker וב-Kubernetes!