סדרת המדריכים הזו מיועדת לאדמינים ממחלקת IT ולמפעילים שרוצים לפרוס, להריץ ולנהל סביבות של אפליקציות מודרניות שפועלות ב-Google Kubernetes Engine (GKE). במדריכים האלה תלמדו איך להגדיר מעקב והתראות, לשנות את קנה המידה של עומסי העבודה ולדמות כשלים, והכול באמצעות אפליקציית המיקרו-שירותים לדוגמה Cymbal Bank:
- יצירת אשכול ופריסת אפליקציה לדוגמה (המדריך הזה)
- מעקב באמצעות השירות המנוהל של Google Cloud ל-Prometheus
- התאמה לעומסי עבודה
- סימולציה של כשל
- ניהול שינויים מרכזי
סקירה כללית ומטרות
ב-Cymbal Bank משתמשים ב-Python וב-Java כדי להריץ את השירותים השונים, והוא כולל קצה עורפי של PostgreSQL. לא צריך ניסיון בשפות האלה או בפלטפורמת מסד נתונים כדי להשלים את סדרת המדריכים, כי Cymbal Bank היא רק אפליקציה לדוגמה שמראה איך GKE יכול לתמוך בצרכים של העסק שלכם.
במדריך הזה תלמדו איך ליצור אשכול GKE אחד ולפרוס אפליקציה לדוגמה שמבוססת על מיקרו-שירותים בשם Cymbal Bank באשכול GKE. תלמדו איך לבצע את המשימות הבאות:
יוצרים אשכול GKE שמשתמש ב-Autopilot.
פריסת אפליקציה לדוגמה שמבוססת על מיקרו-שירותים בשם Cymbal Bank.
אפשר להשתמש במסוף Google Cloud כדי לעיין במשאבי GKE שבהם נעשה שימוש באפליקציה לדוגמה Cymbal Bank.
עלויות
אם מפעילים את GKE ומפריסים את אפליקציית הדוגמה Cymbal Bank בסדרת המדריכים הזו, יחויבו עלויות לכל אשכול עבור GKE ב- Google Cloud , כפי שמפורט בדף התמחור, עד להשבתת GKE או למחיקת הפרויקט.
אתם אחראים גם לעלויות אחרות Google Cloud שנובעות מהרצת אפליקציית הדוגמה Cymbal Bank, כמו חיובים על מכונות וירטואליות ב-Compute Engine ומאזני עומסים.
לפני שמתחילים
במדריך הראשון בסדרה הזו, צריך להשלים את כל שלבי ההגדרה שבקטע 'לפני שמתחילים' לפני שמתחילים. צריך לבצע את השלבים הבאים בקטע "לפני שמתחילים" רק פעם אחת.
הגדרת המעטפת והכלים
בסדרת המדריכים הזו תשתמשו בכלים הבאים כדי לפרוס את הסביבה ולנהל אותה:
- ה-CLI של gcloud: יצירה וניהול של אשכולות GKE ו-Fleets, וגם של שירותים אחרים Google Cloud .
-
kubectl: ניהול Kubernetes, מערכת תזמור האשכולות שמשמשת את GKE.
כדי להריץ את הפקודות שבדף הזה, צריך להגדיר את Google Cloud CLI ואת kubectl באחת מסביבות הפיתוח הבאות:
Cloud Shell
כדי להשתמש בטרמינל אונליין שכבר מוגדרים בו ה-CLI של gcloud ו-kubectl, צריך להפעיל את Cloud Shell:
בחלק התחתון של הדף הזה מתחיל סשן של Cloud Shell ומופיעה הודעה של שורת הפקודה. הסשן יופעל תוך כמה שניות.
מעטפת מקומית
כדי להשתמש בסביבת פיתוח מקומית:
- מתקינים את ה-CLI של gcloud.
- מפעילים את ה-CLI של gcloud.
מתקינים את
kubectlה-CLI של gcloud:gcloud components install kubectl
הגדרת הפרויקט
כדי להגדיר פרויקט Google Cloud , מבצעים את השלבים הבאים, כולל הפעלת החיוב ושירותי GKE. זה הפרויקט שבו תפעילו את GKE.
יכול להיות שתצטרכו ש Google Cloud אדמין בארגון שלכם ייתן לכם גישה ליצירה או לשימוש בפרויקט ולהפעלת ממשקי API.
במסוף Google Cloud , נכנסים לדף Google Kubernetes Engine:
יוצרים או בוחרים פרויקט. זה הפרויקט שבו מפעילים את GKE.
אם מופיעה בקשה, לוחצים על הפעלה של GKE API.
מחכים עד שממשק ה-API והשירותים הקשורים יופעלו. התהליך הזה יכול להימשך כמה דקות.
מתן תפקידים ב-IAM
אם אתם Project Owner (למשל אם יצרתם את הפרויקט בעצמכם), כבר יש לכם את כל ההרשאות שנדרשות כדי להשלים את המדריכים האלה. אם אתם לא הבעלים, ודאו שלחשבון Google Cloud שלכם יש את תפקידי ה-IAM הנדרשים בפרויקט שבחרתם כדי לבצע את ההדרכות האלה. שוב, יכול להיות שתצטרכוGoogle Cloud אדמין בארגון שיעזור לכם להקצות את התפקידים הנדרשים.
בפקודות הבאות, מחליפים את PROJECT_ID במזהה שנוצר אוטומטית של הפרויקט שיצרתם או בחרתם בקטע הקודם. מזהה הפרויקט שונה בדרך כלל משם הפרויקט. לדוגמה, שם הפרויקט יכול להיות scalable-apps, אבל מזהה הפרויקט יכול להיות scalable-apps-567123.
מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/resourcemanager.projectIamAdmin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/iam.securityAdmin, roles/serviceusage.serviceUsageAdmin, roles/container.admin, roles/logging.logWriter, roles/gkehub.admin, roles/viewer, roles/monitoring.viewer
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה,myemail@example.com. -
ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
שכפול האפליקציה לדוגמה
משכפלים את מאגר ה-Git שכולל את כל קובצי המניפסט לדוגמה של Cymbal Bank:
git clone https://github.com/GoogleCloudPlatform/bank-of-anthos
cd bank-of-anthos/
יצירת אשכול
אחרי שביצעתם את כל השלבים המקדימים שבקטעים הקודמים, אתם יכולים ליצור אשכול GKE ולפרוס אפליקציה לדוגמה.
GKE הוא שירות Kubernetes מנוהל שמאפשר לפרוס ולהפעיל אפליקציות בקונטיינרים. סביבת GKE מורכבת מצמתים, שהם מכונות וירטואליות (VM) של Compute Engine, שמקובצות יחד ויוצרות אשכול.
יוצרים אשכול GKE שבו תשתמשו בשאר המדריכים בסדרה הזו:
gcloud container clusters create-auto scalable-apps \ --project=PROJECT_ID \ --location=CONTROL_PLANE_LOCATIONמחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_IDעם המזהה שנוצר אוטומטית של הפרויקט שיצרתם בקטע הקודם. בדרך כלל מזהה הפרויקט שונה משם הפרויקט. לדוגמה, שם הפרויקט יכול להיות scalable-apps, אבל מזהה הפרויקט יכול להיות scalable-apps-567123. CONTROL_PLANE_LOCATION: האזור ב-Compute Engine של מישור הבקרה של האשכול. מציינים אזור, למשלus-central1.
יצירת האשכול ואימות הפעולה התקינה של הכול נמשכים כמה דקות.
-
בסדרת המדריכים הזו, כשיוצרים אשכולות משתמשים באשכולות במצב טייס אוטומטי ובכמה טווחי כתובות IP שמוגדרים כברירת מחדל. כשפורסים אפליקציות משלכם בסביבת ייצור, צריך לתכנן את כתובות ה-IP בקפידה רבה יותר. במצב Autopilot, Google מנהלת את תצורת האשכול, כולל שינוי גודל אוטומטי, אבטחה והגדרות אחרות שהוגדרו מראש. אשכולות במצב אוטומטי עוברים אופטימיזציה להרצת רוב עומסי העבודה של הייצור, והם מקצים משאבי מחשוב על סמך מניפסטים של Kubernetes.
פריסת Cymbal Bank
אתם אורזים אפליקציות (שנקראות גם עומסי עבודה) בקונטיינרים. אתם פורסים קבוצות של קונטיינרים בתור Pods בצמתים.
בסדרת הדרכות הזו, תפרסו אפליקציה לדוגמה שמבוססת על מיקרו-שירותים בשם Cymbal Bank באחד או יותר מאשכולות GKE. ב-Cymbal Bank משתמשים ב-Python וב-Java כדי להריץ את השירותים השונים, והוא כולל קצה עורפי של PostgreSQL. לא צריך ניסיון בשפות האלה או בפלטפורמת מסד הנתונים כדי להשלים את סדרת המדריכים. Cymbal Bank היא רק אפליקציה לדוגמה שמראה איך GKE יכול לתמוך בצרכים של העסק שלכם.
כשמשתמשים ב-Cymbal Bank כחלק מסדרת המדריכים הזו, השירותים הבאים נפרסים באשכול GKE:
| שירות | שפה | תיאור |
|---|---|---|
frontend |
Python | החשיפה של שרת HTTP כדי להציג את האתר. כולל דף כניסה, דף הרשמה ודף בית. |
ledger-writer |
Java | מקבלת עסקאות נכנסות ומאמתת אותן לפני שהיא כותבת אותן בספר החשבונות. |
balance-reader |
Java | מספק מטמון יעיל וקריא של יתרות המשתמשים, כפי שנקרא מ-ledger-db. |
transaction-history |
Java | מספק מטמון קריא ויעיל של עסקאות קודמות, כפי שנקראו מ-ledger-db. |
ledger-db |
PostgreSQL | ספר חשבונות של כל העסקאות. אפשרות לאכלס מראש את הנתונים בעסקאות של משתמשי הדגמה. |
user-service |
Python | ניהול חשבונות משתמשים ואימות. חותם על אסימוני JWT שמשמשים לאימות על ידי שירותים אחרים. |
contacts |
Python | רשימת החנויות של חשבונות אחרים שמשויכים למשתמש. השדה הזה משמש לתפריט נפתח בטפסים "שליחת תשלום" ו "הפקדה". |
accounts-db |
PostgreSQL | מסד נתונים של חשבונות משתמשים ונתונים משויכים. אפשרות לאכלס מראש משתמשי הדגמה. |
loadgenerator |
Python / Locust | שליחה רציפה של בקשות שמחקות משתמשים לממשק הקצה. מדי פעם יוצרת חשבונות חדשים ומדמה עסקאות ביניהם. |
כדי לפרוס את Cymbal Bank באשכול GKE, מבצעים את השלבים הבאים:
ב-Cymbal Bank נעשה שימוש באסימוני JWT (JSON Web Tokens) כדי לטפל באימות משתמשים. אסימוני JWT משתמשים בזוגות של מפתחות אסימטריים כדי לחתום על אסימונים ולאמת אותם. ב-Cymbal Bank, השירות
userserviceיוצר אסימונים וחותם עליהם באמצעות מפתח פרטי של RSA כשמשתמש נכנס לחשבון, והשירותים האחרים משתמשים במפתח הציבורי התואם כדי לאמת את המשתמש.יוצרים JWT מסוג RS256 בעוצמה של 4,096 ביטים:
openssl genrsa -out jwtRS256.key 4096 openssl rsa -in jwtRS256.key -outform PEM -pubout -out jwtRS256.key.pubאם צריך, מורידים ומתקינים את כלי OpenSSL לפלטפורמה שלכם.
ב-Kubernetes Secret אפשר לאחסן מידע אישי רגיש כמו מפתחות או סיסמאות. עומסי עבודה שפועלים באשכול יכולים לגשת לסוד כדי לקבל את המידע האישי הרגיש, במקום להוסיף אותו בתוך הקוד של האפליקציה.
יוצרים סוד של Kubernetes מקובץ המפתח שיצרתם בשלב הקודם עבור Cymbal Bank, כדי להשתמש בו עם בקשות אימות:
kubectl create secret generic jwt-key --from-file=./jwtRS256.key --from-file=./jwtRS256.key.pubפורסים את Cymbal Bank באשכול. הפקודה הבאה פורסת את כל קובצי המניפסט בספרייה
kubernetes-manifests. כל קובץ מניפסט פורס ומגדיר את אחד מהשירותים:kubectl apply -f kubernetes-manifests/accounts-db.yaml kubectl apply -f kubernetes-manifests/balance-reader.yaml kubectl apply -f kubernetes-manifests/config.yaml kubectl apply -f kubernetes-manifests/contacts.yaml kubectl apply -f extras/postgres-hpa/kubernetes-manifests/frontend.yaml kubectl apply -f kubernetes-manifests/ledger-db.yaml kubectl apply -f kubernetes-manifests/ledger-writer.yaml kubectl apply -f extras/postgres-hpa/loadgenerator.yaml kubectl apply -f kubernetes-manifests/transaction-history.yaml kubectl apply -f kubernetes-manifests/userservice.yamlיכול להיות שיוצגו הודעות בפלט
kubectlבזמן שהמניפסטים מוחלים על האשכול לגבי מגבלות של Autopilot. התכונה Autopilot משתמשת בבקשות למשאבים שאתם מציינים בהגדרות של עומס העבודה כדי להגדיר את הצמתים שמריצים את עומסי העבודה. במצב Autopilot, המערכת אוכפת את בקשות המינימום והמקסימום למשאבים בהתאם למחלקת המחשוב או להגדרת החומרה שבהן משתמשים עומסי העבודה. אם לא מציינים בקשות עבור חלק מהקונטיינרים, Autopilot מקצה ערכי ברירת מחדל כדי לאפשר לקונטיינרים האלה לפעול בצורה תקינה.דוגמה למניפסט של שירות
frontend:המניפסט הזה של
frontendבקשות שירות100mשל מעבד (CPU) ו-64Mi, ומגדיר מגבלות של250mשל מעבד ו-128Miלכל Pod.כשפורסים עומס עבודה באשכול Autopilot, GKE מאמת את תצורת עומס העבודה מול הערכים המינימליים והמקסימליים המותרים עבור מחלקת המחשוב או תצורת החומרה שנבחרו (כמו מעבדי GPU). אם מספר הבקשות נמוך מהמינימום, Autopilot משנה אוטומטית את הגדרות עומס העבודה כדי שמספר הבקשות יהיה בטווח המותר. ההודעות האלה מציינות שהמגבלות המתאימות מוקצות באופן אוטומטי.
מחכים שה-Pods יהיו מוכנים. משתמשים ב-
kubectlכדי לבדוק את הסטטוס של הפודים:kubectl get podsהערך בעמודה
STATUSהשתנה מ-Pendingל-ContainerCreating. לוקח כמה דקות עד שכל ה-Pods יהיו במצבRunning, כמו שמוצג בפלט לדוגמה הבא:NAME READY STATUS RESTARTS AGE accounts-db-6f589464bc-6r7b7 1/1 Running 0 99s balancereader-797bf6d7c5-8xvp6 1/1 Running 0 99s contacts-769c4fb556-25pg2 1/1 Running 0 98s frontend-7c96b54f6b-zkdbz 1/1 Running 0 98s ledger-db-5b78474d4f-p6xcb 1/1 Running 0 98s ledgerwriter-84bf44b95d-65mqf 1/1 Running 0 97s loadgenerator-559667b6ff-4zsvb 1/1 Running 0 97s transactionhistory-5569754896-z94cn 1/1 Running 0 97s userservice-78dc876bff-pdhtl 1/1 Running 0 96sכשהמצב של כל ה-Pods הוא
Running, ממשיכים לשלב הבא. שוב, לוקח כמה דקות עד שכל ה-Pods נמצאים במצבRunning. זה תקין שחלק מה-Pods ידווחו על סטטוסREADYשל0/1עד ש-Cymbal Bank יהיה מוכן לשרת את התנועה בצורה נכונה.שירות
frontendחושף שרת HTTP להצגת אתר Cymbal Bank, כולל דף הכניסה, דף ההרשמה ודף הבית. אובייקט Ingress מגדיר כללים לניתוב תעבורת HTTP(S) לאפליקציות שפועלות באשכול באמצעות Google Cloud מאזן עומסים מסוג HTTP(S).מקבלים את כתובת ה-IP החיצונית של
frontendIngress:kubectl get ingress frontend | awk '{print $4}'בחלון של דפדפן אינטרנט, פותחים את כתובת ה-IP שמוצגת בפלט של הפקודה
kubectl get ingressכדי לגשת למופע של Cymbal Bank.פרטי הכניסה שמוגדרים כברירת מחדל מאוכלסים אוטומטית, כך שתוכלו להיכנס לאפליקציה ולעיין בחלק מהיתרות והעסקאות לדוגמה. אין פעולות ספציפיות שצריך לבצע, מלבד לוודא שה-Cymbal Bank פועל בצורה תקינה. יכול להיות שיעברו דקה או שתיים עד שכל השירותים יתקשרו בצורה תקינה ויאפשרו לכם להיכנס.
עיון בפריסה
אחרי שיוצרים אשכול GKE ופורסים עומסי עבודה, יכול להיות שיהיה צורך לשנות הגדרות או לבדוק את הביצועים של האפליקציה. בקטע הזה נסביר איך להשתמש במסוף Google Cloud כדי לבדוק את המשאבים שכלולים באשכול ובאפליקציית הדוגמה Cymbal Bank.
אשכולות
במדריך הזה יצרתם אשכול GKE אחד ופרסתם את עומסי העבודה של Cymbal Bank.
בדף Google Kubernetes Engine במסוף Google Cloud , נכנסים לדף Clusters.
לוחצים על האשכול scalable-apps שנפרס. בדף הפרטים של האשכול שנפתח, אפשר לראות את הפרטים הבסיסיים של האשכול, יחד עם הגדרות הרשת והאבטחה שלו. בקטע Features אפשר לראות אילו תכונות של GKE מופעלות באוסף הזה.
ניראות (observability)
אפשר לראות מדדים בסיסיים לגבי התקינות והביצועים של האשכול. במדריך הבא בסדרה הזו, נלמד איך להפעיל את השירות המנוהל של Google Cloud ל-Prometheus כדי לקבל ניטור וניראות פרטניים יותר.
בוחרים את האשכול בדף Clusters של Google Kubernetes Engine במסוףGoogle Cloud , ואז עוברים לכרטיסייה Observability.
בודקים את הגרפים של המדדים, למשל מעבד וזיכרון. התצוגה הזו מאפשרת לעקוב אחרי הביצועים של החלקים השונים בעומסי העבודה של האשכול, בלי לפרוס יכולות מעקב נוספות.
כדי לראות את היומנים שמועברים בסטרימינג מהאשכול, לוחצים על הכרטיסייה Logs. אפשר לסנן לפי Severity של היומנים, או ליצור מסננים משלכם כדי להציג מרחבי שמות, שירותים או Pods ספציפיים. בדומה לאזהרות ולאירועים של Pod, התצוגה המשותפת הזו של יומנים מהאשכול יכולה לעזור לכם לנפות באגים בבעיות במהירות באמצעות Google Cloud המסוף.
כשפורסים את Cymbal Bank בפעם הראשונה, יכול להיות שחלק מהשירותים עדיין לא יוכלו לתקשר, וזה מצב תקין.
בוחרים בכרטיסייה App Errors (שגיאות באפליקציה). בזמן שהעומסים פועלים, אתם יכולים לראות את האזהרות והאירועים שנאספו במסוף Google Cloud . הגישה הזו יכולה לעזור לכם לנפות באגים בלי שתצטרכו להתחבר לאשכול, לצמתים או ל-Pods בנפרד.
שוב, זה נורמלי לראות אירועים שנרשמים ביומן כשפורסים את Cymbal Bank בפעם הראשונה, אם חלק מהשירותים עדיין לא יכולים לתקשר.
עומסי עבודה
בדף GKE במסוף Google Cloud יש קטע Workloads (עומסי עבודה) שבו מוצגת תצוגה מצטברת של עומסי העבודה שפועלים בכל אשכולות GKE.
במסוף Google Cloud , נכנסים לדף Workloads של Google Kubernetes Engine.
בכרטיסייה Overview מוצגת רשימה של עומסי עבודה ומרחבי שמות מאשכול GKE. אפשר לסנן לפי מרחבי שמות כדי לראות אילו עומסי עבודה פועלים בכל מרחב שם.
שירותים ו-Ingress
בתצוגה Services & Ingress מוצגים משאבי השירות וה-Ingress של הפרויקט. שירות חושף קבוצה של Pod כשירות רשת עם נקודת קצה, בעוד ש-Ingress מנהל גישה חיצונית לשירותים באשכול.
בדף Google Kubernetes Engine במסוף Google Cloud , נכנסים לדף Gateways, Services & Ingress.
כדי למצוא את ה-ingress של Cymbal Bank, לוחצים על הכרטיסייה Ingress ומחפשים את ה-ingress בשם
frontend. תעבורת נתונים נכנסת (ingress) מנהלת את התעבורה הנכנסת לאפליקציה. אפשר לראות מידע על מאזן העומסים, היציאות ונקודות הקצה החיצוניות.לוחצים על IP address (כתובת IP) של הכניסה
frontend, למשל198.51.100.143:80. הכתובת הזו פותחת את ממשק האינטרנט של Cymbal Bank.
הסרת המשאבים
מומלץ להשלים את סדרת המדריכים של Cymbal Bank לפי הסדר. במהלך ההתקדמות בסדרת ההדרכות, תרכשו מיומנויות חדשות ותשתמשו במוצרים ובשירותים נוספים Google Cloud .
אם אתם רוצים לקחת הפסקה לפני שתמשיכו למדריך הבא, ולא רוצים לצבור חיובים ב Google Cloud חשבון שלכם על המשאבים שבהם השתמשתם במדריך הזה, אתם יכולים למחוק את הפרויקט שיצרתם.
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
במדריך הבא מוסבר איך עוקבים אחרי עומסי עבודה ב-GKE באמצעות השירות המנוהל של Google Cloud ל-Prometheus ו-Cloud Monitoring.