סדרת המדריכים הזו מיועדת לאדמינים ולמפעילים בתחום ה-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
הגדרת הפרויקט
כדי להגדיר פרויקט Google Cloud , צריך לבצע את השלבים הבאים, כולל הפעלת החיוב ושירותי GKE. זהו הפרויקט שבו תפעילו את GKE.
יכול להיות שתצטרכו לבקש מאדמין Google Cloud בארגון שלכם להעניק לכם גישה ליצירה או לשימוש בפרויקט ולהפעלה של ממשקי API.
במסוף Google Cloud , נכנסים לדף Google Kubernetes Engine:
יוצרים או בוחרים פרויקט. זה הפרויקט שבו מפעילים את GKE.
אם מופיעה בקשה, לוחצים על הפעלה של GKE API.
מחכים עד שממשק ה-API והשירותים הקשורים מופעלים. התהליך הזה יכול להימשך כמה דקות.
מתן תפקידים ב-IAM
אם אתם הבעלים של הפרויקט (למשל אם אתם יצרתם את הפרויקט בעצמכם), כבר יש לכם את כל ההרשאות שנדרשות כדי להשלים את המדריכים האלה. אם אתם לא הבעלים, ודאו שלחשבון 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: המזהה של חשבון המשתמש חשבון. דוגמאות מופיעות במאמר ייצוג המשתמשים במאגרי כוח עבודה בכללי מדיניות IAM. -
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 מנהלת את הגדרות האשכול, כולל שינוי גודל אוטומטי, אבטחה והגדרות אחרות שהוגדרו מראש. אשכולות במצב 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) כדי לטפל באימות משתמשים. ב-JWTs נעשה שימוש בזוגות של מפתחות אסימטריים כדי לחתום על אסימונים ולאמת אותם. ב-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 מאמת את תצורת עומס העבודה מול הערכים המינימליים והמקסימליים המותרים עבור סוג המחשוב או תצורת החומרה שנבחרו (כמו מעבדי GPU). אם מספר הבקשות נמוך מהמינימום, 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) לאפליקציות שפועלות באשכול באמצעות Google Cloud מאזן עומסים מסוג HTTP(S).מקבלים את כתובת ה-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.
בודקים את הגרפים של המדדים, למשל CPU ו-Memory. בתצוגה הזו אפשר לעקוב אחרי הביצועים של חלקי העומסים השונים באשכול בלי לפרוס יכולות מעקב נוספות.
כדי לראות יומנים שמוזרמים מהאשכול, לוחצים על הכרטיסייה יומנים. אפשר לסנן לפי Severity של היומנים, או ליצור מסננים משלכם כדי להציג מרחבי שמות, שירותים או Pods ספציפיים. בדומה לאזהרות ולאירועים של Pod, התצוגה המרוכזת הזו של יומני הרישום מהאשכול יכולה לעזור בניפוי באגים במהירות באמצעות Google Cloud המסוף.
זה נורמלי לראות רשומות ביומן כשפורסים את Cymbal Bank בפעם הראשונה, כשחלק מהשירותים עדיין לא יכולים לתקשר.
בוחרים בכרטיסייה App Errors (שגיאות באפליקציה). בזמן שהעומסים שלכם פועלים, אתם יכולים לראות את האזהרות והאירועים שנאספו ב Google Cloud מסוף. הגישה הזו יכולה לעזור לכם לנפות באגים בלי שתצטרכו להתחבר לאשכול, לצמתים או ל-Pods בנפרד.
שוב, זה נורמלי לראות אירועים שנרשמים כשפורסים את Cymbal Bank בפעם הראשונה, אם חלק מהשירותים עדיין לא יכולים לתקשר.
עומסי עבודה
בדף GKE במסוף Google Cloud יש קטע Workloads (עומסי עבודה) שבו מוצגת תצוגה מצטברת של עומסי העבודה שפועלים בכל אשכולות ה-GKE שלכם.
בדף Google Kubernetes Engine במסוף Google Cloud , עוברים לדף Workloads.
בכרטיסייה Overview מוצגת רשימה של עומסי עבודה ומרחבי שמות מאשכול GKE. אפשר לסנן לפי מרחבי שמות כדי לראות אילו עומסי עבודה פועלים בכל מרחב שם.
שירותים ו-Ingress
בתצוגה Services & Ingress מוצגים משאבי השירות וה-Ingress של הפרויקט. שירות חושף קבוצה של Pod כשירות רשת עם נקודת קצה, בעוד ש-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 חשבון שלכם על המשאבים שבהם השתמשתם במדריך הזה, אתם יכולים למחוק את הפרויקט שיצרתם.
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
במדריך הבא מוסבר איך עוקבים אחרי עומסי העבודה ב-GKE באמצעות השירות המנוהל של Google Cloud ל-Prometheus ו-Cloud Monitoring.