סדרת הדרכות זו מיועדת לאדמינים ולמפעילים בתחום ה-IT שרוצים לפרוס, להריץ ולנהל סביבות אפליקציות מודרניות שפועלות ב-Google Kubernetes Engine (GKE). בסדרת המדריכים הזו תלמדו איך להגדיר מעקב והתראות, לשנות את גודל עומסי העבודה ולבצע סימולציה של כשל, והכול באמצעות אפליקציית המיקרו-שירותים לדוגמה של Cymbal Bank:
- יצירת אשכול ופריסת אפליקציה לדוגמה (המדריך הזה)
- מעקב באמצעות השירות המנוהל של Google Cloud ל-Prometheus
- התאמה לעומסי עבודה
- סימולציה של כשל
- ניהול שינויים באופן מרכזי
סקירה כללית ומטרות
ב-Cymbal Bank נעשה שימוש ב-Python וב-Java כדי להפעיל את השירותים השונים, והיא כוללת קצה עורפי של PostgreSQL. לא צריך ניסיון בשפות האלה או בפלטפורמת מסד נתונים כדי להשלים את סדרת ההדרכות, כי Cymbal Bank היא רק אפליקציה לדוגמה שמראה איך GKE יכול לתמוך בצרכים של העסק שלכם.
במדריך הזה תלמדו איך ליצור אשכול GKE יחיד ולפרוס אליו אפליקציה לדוגמה שמבוססת על מיקרו-שירותים בשם Cymbal Bank. תלמדו איך לבצע את המשימות הבאות:
יוצרים אשכול GKE שמשתמש ב-Autopilot.
פריסת אפליקציה לדוגמה שמבוססת על מיקרו-שירותים בשם Cymbal Bank.
אפשר להשתמש במסוף Google Cloud כדי לעיין במשאבי GKE שבהם נעשה שימוש באפליקציית הדוגמה Cymbal Bank.
עלויות
אם תפעילו את GKE ותפרוסו את אפליקציית הדוגמה Cymbal Bank בסדרת מדריכים זו, תחויבו על GKE on 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
הגדרת הפרויקט
כדי להגדיר פרויקט, צריך לבצע את השלבים הבאים, כולל הפעלת החיוב ושירותי GKE. Google Cloud זהו הפרויקט שבו תפעילו את GKE.
יכול להיות שתצטרכו שאדמין בארגון שלכם ייתן לכם גישה ליצירה או לשימוש בפרויקט ולהפעלת ממשקי API. Google Cloud
במסוף Google Cloud , נכנסים לדף Google Kubernetes Engine:
יוצרים או בוחרים פרויקט. זהו הפרויקט שבו מפעילים את GKE.
אם מופיעה בקשה, לוחצים על הפעלה של GKE API.
מחכים עד שממשק ה-API והשירותים הקשורים מופעלים. התהליך הזה יכול להימשך כמה דקות.
Verify that billing is enabled for your Google Cloud project.
מתן תפקידים ב-IAM
אם אתם בעלי הפרויקט (למשל אם יצרתם את הפרויקט בעצמכם), כבר יש לכם את כל ההרשאות שנדרשות כדי להשלים את המדריכים האלה. אם אתם לא הבעלים, ודאו שלחשבון שלכם Google Cloud יש את תפקידי ה-IAM הנדרשים בפרויקט שבחרתם כדי לבצע את ההדרכות האלה. שוב, יכול להיות שתצטרכוGoogle Cloud אדמין בארגון שיעזור לכם להקצות את התפקידים הנדרשים.
בפקודות הבאות, מחליפים את PROJECT_ID במזהה שנוצר אוטומטית של הפרויקט שיצרתם או בחרתם בקטע הקודם. מזהה הפרויקט שונה בדרך כלל משם הפרויקט. לדוגמה, שם הפרויקט יכול להיות scalable-apps, אבל מזהה הפרויקט יכול להיות scalable-apps-567123.
Grant roles to your user account. Run the following command once for each of the following
IAM roles:
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
Replace the following:
PROJECT_ID: Your project ID.USER_IDENTIFIER: The identifier for your user account. For example,myemail@example.com.ROLE: The IAM role that you grant to your user account.
שכפול האפליקציה לדוגמה
משכפלים את מאגר 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 מנהלת את הגדרות האשכול, כולל שינוי גודל אוטומטי, אבטחה והגדרות אחרות שהוגדרו מראש. אשכולות במצב Autopilot מותאמים להרצת רוב עומסי העבודה של הייצור, ומקצים משאבי מחשוב על סמך מניפסטים של 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 אפשר לאחסן מידע רגיש כמו מפתחות או סיסמאות. עומסי עבודה שפועלים באשכול יכולים לגשת ל-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:manifest הזה של
frontendבקשות שירות100mשל CPU ו-64Mi, ומגדיר מגבלות של250mשל CPU ו-128Miלכל Pod.כשפורסים עומס עבודה באשכול Autopilot, GKE מאמת את תצורת עומס העבודה מול הערכים המינימליים והמקסימליים המותרים עבור סוג המחשוב או תצורת החומרה שנבחרו (למשל, מעבדים גרפיים). אם מספר הבקשות שלכם נמוך מהמינימום, Autopilot משנה באופן אוטומטי את הגדרות העומס כדי שמספר הבקשות יהיה בטווח המותר. ההודעות האלה מציינות שהמגבלות המתאימות מוקצות באופן אוטומטי.
ממתינים עד שה-Pods יהיו מוכנים. משתמשים בפקודה
kubectlכדי לבדוק את הסטטוס של ה-Pods: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) לאפליקציות שפועלות באשכול באמצעות מאזן עומסים מסוג HTTP(S). Google Cloudמקבלים את כתובת ה-IP החיצונית של
frontendIngress:kubectl get ingress frontend | awk '{print $4}'בחלון של דפדפן אינטרנט, פותחים את כתובת ה-IP שמוצגת בפלט של הפקודה
kubectl get ingressכדי לגשת למופע של Cymbal Bank.פרטי הכניסה שמוגדרים כברירת מחדל מאוכלסים באופן אוטומטי, כך שתוכלו להיכנס לאפליקציה ולעיין בחלק מהדוגמאות לעסקאות ולסכומים. לא צריך לבצע פעולות ספציפיות, רק לוודא שה-CymbalBank פועל בצורה תקינה. יכול להיות שיעברו דקה או שתיים עד שכל השירותים יתקשרו בצורה תקינה ויאפשרו לכם להיכנס.
עיון בפריסה
אחרי שיוצרים אשכול GKE ופורסים עומסי עבודה, יכול להיות שיהיה צורך לשנות הגדרות או לבדוק את הביצועים של האפליקציה. בקטע הזה נסביר איך להשתמש במסוף Google Cloud כדי לבדוק את המשאבים שכלולים באשכול ובאפליקציית הדוגמה Cymbal Bank.
אשכולות
במדריך הזה יצרתם אשכול GKE אחד ופרסתם את עומסי העבודה של Cymbal Bank.
בדף Google Kubernetes Engine במסוף Google Cloud , עוברים לדף Clusters.
לוחצים על אשכול scalable-apps החדש שפרסתם. בדף הפרטים של האשכול שנפתח, אפשר לראות פרטים בסיסיים על האשכול, וגם את הגדרות הרשת והאבטחה שלו. בקטע תכונות אפשר גם לראות אילו תכונות של GKE מופעלות באוסף הזה.
ניראות (observability)
אפשר לראות מדדים בסיסיים לגבי התקינות והביצועים של האשכול. במדריך הבא בסדרה הזו, נלמד איך להפעיל את השירות המנוהל של Google Cloud ל-Prometheus כדי לקבל ניטור וניראות פרטניים יותר.
בוחרים את האשכול בדף Clusters של Google Kubernetes Engine במסוףGoogle Cloud , ואז עוברים לכרטיסייה Observability.
בודקים את הגרפים של המדדים, למשל מעבד וזיכרון. בתצוגה הזו אפשר לעקוב אחרי הביצועים של חלקי עומסי העבודה השונים באשכול בלי לפרוס יכולות מעקב נוספות.
כדי לראות יומנים שמוזרמים מהאשכול, לוחצים על הכרטיסייה יומנים. אפשר לסנן לפי Severity של היומנים, או ליצור מסננים משלכם כדי להציג מרחבי שמות, שירותים או פודים ספציפיים. בדומה לאזהרות ולאירועים של Pod, התצוגה המרוכזת הזו של יומני הרישום מהאשכול יכולה לעזור בניפוי באגים במהירות באמצעות Google Cloud המסוף.
זה נורמלי לראות רשומות ביומן כשפורסים את Cymbal Bank בפעם הראשונה, כשחלק מהשירותים עדיין לא יכולים לתקשר.
בוחרים בכרטיסייה שגיאות באפליקציות. בזמן שהעומסים שלכם פועלים, אתם יכולים לראות את האזהרות והאירועים שנאספו ב Google Cloud מסוף. הגישה הזו יכולה לעזור לכם לנפות באגים בלי שתצטרכו להתחבר לאשכול, לצמתים או ל-Pods בנפרד.
שוב, זה נורמלי לראות אירועים שנרשמים כשפורסים את Cymbal Bank בפעם הראשונה, אם חלק מהשירותים עדיין לא יכולים לתקשר.
עומסי עבודה
בדף GKE במסוף Google Cloud יש קטע Workloads שבו מוצגת תצוגה מצטברת של עומסי העבודה שפועלים בכל אשכולות GKE.
בדף Google Kubernetes Engine במסוף Google Cloud , עוברים לדף Workloads.
בכרטיסייה Overview מוצגת רשימה של עומסי עבודה ומרחבי שמות מאשכול GKE. אפשר לסנן לפי מרחבי שמות כדי לראות אילו עומסי עבודה פועלים בכל מרחב שם.
שירותים ו-Ingress
בתצוגה Services & Ingress מוצגים משאבי השירות וה-Ingress של הפרויקט. שירות חושף קבוצה של Pods כשירות רשת עם נקודת קצה, בעוד ש-Ingress מנהל גישה חיצונית לשירותים באשכול.
בדף Google Kubernetes Engine במסוף Google Cloud , עוברים לדף Gateways, Services & Ingress.
כדי למצוא את ה-ingress של Cymbal Bank, לוחצים על הכרטיסייה Ingress ומחפשים את ה-ingress עם השם
frontend. שער כניסה מנהל את התעבורה הנכנסת לאפליקציה. אפשר לראות מידע על מאזן העומסים, היציאות ונקודות הקצה החיצוניות.לוחצים על IP address (כתובת ה-IP) של הכניסה
frontend, למשל198.51.100.143:80. הכתובת הזו פותחת את ממשק האינטרנט של Cymbal Bank.
הסרת המשאבים
ההדרכות של Cymbal Bank מיועדות להשלמה אחת אחרי השנייה. במהלך ההתקדמות בסדרת ההדרכות, תוכלו לרכוש מיומנויות חדשות ולהשתמש במוצרים ובשירותים נוספים של Google Cloud Google.
אם אתם רוצים לקחת הפסקה לפני שתמשיכו למדריך הבא, ולמנוע חיובים ב Google Cloud חשבון שלכם על המשאבים שבהם השתמשתם במדריך הזה, אתם יכולים למחוק את הפרויקט שיצרתם.
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
המאמרים הבאים
במדריך הבא מוסבר איך עוקבים אחרי עומסי עבודה ב-GKE באמצעות השירות המנוהל של Google Cloud ל-Prometheus ו-Cloud Monitoring.