1. סקירה כללית
בשיעור ה-Lab הזה תפרסו מיקרו-שירות (microservice) דו-שלבי עם pod שפועל ב-GKE Autopilot, ומחברים אותו למכונה פרטית של מסד הנתונים AlloyDB. אפליקציית שירות הלקוחות היא חלק ממערכת Cymbal Eats ומספקת פונקציונליות לניהול משתמשים רשומים. אפליקציית 'שירות לקוחות' היא מיקרו-שירות (microservice) מבוסס Java שמשתמש ב-Quarkus framework.
AlloyDB תומך בקישוריות לרשת באמצעות כתובות IP פנימיות פרטיות שהוגדרו לגישה לשירותים פרטיים.
הגישה לשירותים פרטיים מוטמעת כחיבור בין רשתות שכנות (peering) של VPC בין רשת ה-VPC לבין רשת ה-VPC הבסיסית שבה נמצאים המשאבים של AlloyDB (אשכולות ומכונות). החיבור הפרטי מאפשר למשאבים ברשת ה-VPC לתקשר עם משאבי AlloyDB שאליהם הם ניגשים באופן בלעדי באמצעות כתובות IP פנימיות. המשאבים ברשת ה-VPC לא צריכים גישה לאינטרנט או כתובות IP חיצוניות כדי להגיע למשאבי AlloyDB.
מה זה GKE Autopilot?
GKE Autopilot הוא מצב פעולה ב-GKE, שבו Google מנהלת את תצורת האשכול, כולל הצמתים, ההתאמה לעומס (scaling), האבטחה והגדרות אחרות שנקבעו מראש. אשכולות Autopilot מותאמים להרצת רוב עומסי העבודה (workloads) בייצור, ומאפשרים הקצאה של משאבי מחשוב על סמך המניפסטים שלכם ב-Kubernetes. התצורה המשופרת מבוססת על השיטות המומלצות וההמלצות של GKE לגבי הגדרה, מדרגיות ואבטחה של אשכולות ועומסי עבודה. רשימה של ההגדרות המובנות מופיעה בטבלת ההשוואה Autopilot ורגילות,
מה זה AlloyDB?
שירות מנוהל של מסד נתונים שתואם ל-PostgreSQL לעומסי העבודה כבדים ביותר של מסדי נתונים ארגוניים. AlloyDB משלבת את המיטב של Google עם אחד ממנועי מסדי הנתונים הפופולריים ביותר בקוד פתוח, PostgreSQL, כדי להשיג ביצועים מעולים, התאמה לעומס (scaling) וזמינות.
מה תלמדו
בשיעור Lab זה תלמדו איך:
- יצירת מכונה פרטית של מסד הנתונים AlloyDB
- פריסת אפליקציה באשכול GKE Autopilot שמתחבר למכונת AlloyDB
דרישות מוקדמות
- שיעור ה-Lab הזה מבוסס על היכרות עם הסביבות של Cloud Console ו-Cloud Shell.
- ניסיון קודם ב-GKE וב- AlloyDB מועיל אבל לא נדרש.
2. הגדרה ודרישות
הגדרת פרויקט ב-Cloud
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. אפשר לעדכן אותו בכל שלב.
- Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (בדרך כלל הוא מזוהה כ-
PROJECT_ID
). אם המזהה שנוצר לא מוצא חן בעיניך, יש לך אפשרות ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות תבנית משלך ולבדוק אם היא זמינה. לא ניתן לשנות אותו אחרי השלב הזה, והוא יישאר למשך הפרויקט. - לידיעתך, יש ערך שלישי – Project Number (מספר פרויקט), שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט כולו. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
הגדרת סביבה
לוחצים על הסמל שמופיע מימין לסרגל החיפוש כדי להפעיל את Cloud Shell.
משכפלים את המאגר, עוברים לספרייה, מעתיקים ומדביקים את הפקודה שמתחת לטרמינל ומקישים על Enter:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service
פורסים את יחסי התלות הנדרשים באמצעות הרצה של gke-lab-setup.sh
המערכת תיצור את המשאבים הבאים:
- אשכול AlloyDB ומכונה
- Artifact Registry לאחסון תמונות קונטיינרים למשימות ב-Cloud Run ולשירות לקוחות
- מחבר הגישה ל-VPC למשימת Cloud Run לתקשורת עם מסד הנתונים AlloyDB
- משימה ב-Cloud Run ליצירת מסד נתונים של AlloyDB
- אשכול GKE Autopilot
./gke-lab-setup.sh
אם מתבקשים לאשר, לוחצים על 'הרשאה' כדי להמשיך.
ההגדרה תימשך כ-10 דקות. בודקים את סקריפט ההגדרה שמשמש ליצירת יחסי התלות הנדרשים.
gke-lab-setup.sh
צריך להמתין עד שהסקריפט יהיה מוכן ולראות את הפלט למטה לפני שממשיכים את השלבים הבאים.
Job [db-job] has successfully been created. To execute this job, use: gcloud beta run jobs execute db-job OK Creating execution... Done. OK Provisioning resources... Done. Execution [db-job-k94ps] has successfully started running.
3. פריסת אפליקציות
לבדיקת אשכול AlloyDB
מריצים את הפקודה הבאה כדי לבדוק את מכונת AlloyDB שנוצרה:
gcloud alloydb instances describe customer-instance --cluster=customer-cluster --region=us-central1
פלט לדוגמה:
createTime: '2023-01-06T14:40:07.213288293Z' instanceType: PRIMARY ipAddress: 10.77.176.2 machineConfig: cpuCount: 2 name: projects/cymbal-eats-20056-16671/locations/us-central1/clusters/customer-cluster/instances/customer-instance nodes: - zoneId: us-central1-f queryInsightsConfig: queryPlansPerMinute: 5 queryStringLength: 1024 recordApplicationTags: true recordClientAddress: true reconciling: false state: READY uid: df90d57d-88df-49be-a626-6dfec0513e64 updateTime: '2023-01-06T14:49:40.907977843Z' writableNode: zoneId: us-central1-b
התכונות הזמינות(מדדי שאילתות, Monitoring) מפורטות במסוף.
בדיקת אשכול GKE Autopilot
הגדרה של משתני סביבה של פרויקט:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
כחלק מההגדרה הראשונית, האשכול נוצר באמצעות הפקודה הבאה (אין צורך להריץ את הפקודה הזו):
gcloud container clusters create-auto $CLUSTER_NAME --region $REGION
מריצים את הפקודה כדי להציג את אשכול GKE Autopilot שנוצר:
gcloud container clusters list
פלט לדוגמה:
מריצים את הפקודה כדי לאחסן פרטי כניסה לאשכול:
CLUSTER_NAME=rewards-cluster
REGION=us-central1
gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION
פריסת אפליקציה
לאחר מכן פורסים אפליקציה של שירות לקוחות.
אפליקציית 'שירות לקוחות' היא מיקרו-שירות מבוסס-Java שמשתמש ב-Quarkus framework.
עוברים לתיקייה cymbal-eats/customer-service
ומריצים את הפקודות כדי ליצור ולהעלות קובץ אימג' בקונטיינר:
./mvnw clean package -DskipTests
export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0
gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .
פותחים את Cloud Build במסוף כדי לבדוק את פרטי ה-build האחרון.
מגדירים את משתנה הסביבה שלמטה באמצעות הערך של כתובת ה-IP הפרטית של AlloyDB:
export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
--cluster=customer-cluster \
--region=$REGION \
--format=json | jq \
--raw-output ".ipAddress")
echo $DB_HOST
מריצים את הפקודות הבאות כדי ליצור אובייקט Secret ב-Kubernetes, לאחסון פרטי כניסה של מסד נתונים, שישמשו את אפליקציית שירות הלקוחות כדי להתחבר למסד הנתונים:
DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123
kubectl create secret generic gke-alloydb-secrets \
--from-literal=database=$DB_NAME \
--from-literal=username=$DB_USER \
--from-literal=password=$DB_PASSWORD \
--from-literal=db_host=$DB_HOST
מריצים את הפקודה כדי להחליף את CUSTOMER_SERVICE_IMAGE בקובץ המתאיםDeploy.yaml:
sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml
מריצים את הפקודה כדי לפרוס את האפליקציה:
kubectl apply -f customer-service-deployment.yaml
האפליקציה תעבור למצב RUNNING בעוד כמה רגעים.
מריצים את הפקודה כדי ליצור כתובת IP חיצונית שתשמש בשלבי הבדיקה:
SERVICE_NAME=customer-service
kubectl expose deployment $SERVICE_NAME \
--type LoadBalancer --port 80 --target-port 8080
מריצים את הפקודה כדי לאמת את המשאבים שנוצרו:
kubectl get all
פלט לדוגמה:
4. בדיקת הבקשה
מריצים את הפקודות הבאות כדי לשמור את כתובת ה-URL של שירות הלקוחות.
kubectl get svc
מגדירים את משתנה הסביבה שלמטה באמצעות הערך של 'כתובת IP חיצונית' מהפלט הקודם.
CUSTOMER_SERVICE_URL=$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
מריצים את הפקודות הבאות כדי ליצור רשומת לקוח חדשה:
curl -X POST $CUSTOMER_SERVICE_URL/customer \
-H 'Content-Type: application/json' \
-d '{"id": "id1","rewardPoints": 3,"address": "1845 Denise St","city": "Mountain View","createDateTime": "2022-11-11T15:56:45.487566","email": "ajensen9090+eats@gmail.com","name": "Angela Jensen","state": "CA","updateDateTime": "2022-11-11T15:56:45.866125","zip": "94043"}'
כדי ליצור הודעות יומן שיוצגו ב-Logs Explorer מאוחר יותר, מריצים את הפקודה שלמעלה מספר פעמים.
סקירת הרשומות של הלקוחות
מריצים את הפקודות הבאות כדי לראות את רשומת הלקוח שנוצרה.
curl $CUSTOMER_SERVICE_URL/customer | jq
פלט לדוגמה:
[ { "address": "1845 Denise St", "city": "Mountain View", "createDateTime": "2023-01-06T16:13:19.118744", "email": "ajensen9090+eats@gmail.com", "id": "id1", "name": "Angela Jensen", "rewardPoints": 3, "state": "CA", "updateDateTime": "2023-01-06T16:13:19.118896", "zip": "94043" } ]
בדיקת עומסי העבודה (workload) והשירותים של GKE
פותחים את Kubernetes Engine במסוף Cloud ובודקים את עומסי העבודה והשירותים שנוצרו.
יומני אפליקציות
פותחים את Logs Explorer ומחפשים יומנים שמכילים את הביטוי 'הלקוח כבר קיים'. טקסט.
5. מעולה!
כל הכבוד, סיימת את ה-Codelab!
נושאים שטיפלנו בהם:
- איך ליצור מופע פרטי של מסד הנתונים AlloyDB
- איך לפרוס אפליקציה באשכול GKE Autopilot שמתחבר למכונת AlloyDB
השלב הבא:
בקישורים הבאים תוכלו למצוא עוד מעבדי קוד Labs של Cymbal Eats:
- הפעלת Cloud Workflows באמצעות Eventarc
- הפעלת עיבוד אירועים מ-Cloud Storage
- התחברות ל-Cloud SQL פרטי מ-Cloud Run
- התחברות למסדי נתונים מנוהלים מ-Cloud Run
- אפליקציה מאובטחת ללא שרת (serverless) עם שרת proxy לאימות זהויות (IAP)
- הפעלת משימות של Cloud Run באמצעות Cloud Scheduler
- פריסה מאובטחת ב-Cloud Run
- אבטחת תעבורת נתונים נכנסת (ingress) ב-Cloud Run
הסרת המשאבים
כדי להימנע מצבירת חיובים בחשבון Google Cloud על המשאבים שנעשה בהם שימוש במדריך הזה, צריך למחוק את הפרויקט שמכיל את המשאבים או לשמור את הפרויקט ולמחוק את המשאבים הספציפיים.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.