1. סקירה כללית
בשיעור ה-Lab הזה תפרסו מיקרו-שירות דו-שכבתי עם Pod שפועל ב-GKE Autopilot ותחברו אותו למופע פרטי של מסד נתונים AlloyDB. אפליקציית שירות הלקוחות היא חלק ממערכת Cymbal Eats ומספקת פונקציונליות לניהול משתמשים רשומים. אפליקציית שירות הלקוחות היא מיקרו-שירות מבוסס Java שמשתמש ב-Quarkus framework.

AlloyDB תומך בקישוריות לרשת באמצעות כתובות IP פרטיות ופנימיות שהוגדרו לגישה לשירותים פרטיים.
גישה לשירותים פרטיים מיושמת כחיבור VPC Peering בין רשת ה-VPC שלכם לבין רשת ה-VPC הבסיסית של Google Cloud שבה נמצאים משאבי AlloyDB (אשכולות ומופעים). החיבור הפרטי מאפשר למשאבים ברשת ה-VPC לתקשר עם משאבי AlloyDB שהם ניגשים אליהם באופן בלעדי באמצעות כתובות IP פנימיות. למשאבים ברשת ה-VPC לא נדרשת גישה לאינטרנט או כתובות IP חיצוניות כדי להגיע למשאבי AlloyDB.

מה זה GKE Autopilot?
GKE Autopilot הוא מצב פעולה ב-GKE שבו Google מנהלת את הגדרת האשכול, כולל הצמתים, שינוי הגודל, האבטחה והגדרות אחרות שהוגדרו מראש. אשכולות במצב Autopilot מותאמים להרצת רוב עומסי העבודה של הייצור, ומקצים משאבי מחשוב על סמך מניפסטים של Kubernetes. ההגדרה הפשוטה מבוססת על השיטות המומלצות של GKE וההמלצות להגדרת אשכולות ועומסי עבודה, מדרגיות ואבטחה. רשימה של הגדרות מובנות מופיעה בטבלת ההשוואה בין Autopilot לבין Standard.
מה זה AlloyDB?
שירות מנוהל של מסד נתונים שתואם ל-PostgreSQL לעומסי עבודה כבדים במיוחד של מסדי נתונים ארגוניים. AlloyDB משלב את המיטב של Google עם אחד ממנועי מסדי הנתונים הפופולריים ביותר בקוד פתוח, PostgreSQL, כדי לספק ביצועים, יכולת הרחבה וזמינות מעולים.
מה תלמדו
בשיעור Lab זה תלמדו איך:
- יצירת מכונה פרטית של מסד נתונים ב-AlloyDB
- פריסת אפליקציה באשכול GKE Autopilot שמתחבר למכונת AlloyDB
דרישות מוקדמות
- ההנחה בשיעור ה-Lab הזה היא שאתם מכירים את הסביבות של Cloud Console ו-Cloud Shell.
- ניסיון קודם עם GKE ו-AlloyDB מועיל אבל לא חובה.
2. הגדרה ודרישות
הגדרה של פרויקט ב-Cloud
- נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



- שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. אפשר לעדכן את המיקום הזה בכל שלב.
- מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שהוא מוגדר). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל הוא מסומן כ-
PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר כזו למשך הפרויקט. - לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. כדי להשבית את המשאבים ולא לחייב אתכם מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את כל הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
הגדרת הסביבה
לוחצים על הסמל משמאל לסרגל החיפוש כדי להפעיל את 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 Job ולשירות לקוחות
- מחבר גישה ל-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
עיון בתכונות הזמינות(Query Insight, 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 במסוף כדי לבדוק את הפרטים של הגרסה האחרונה.

מגדירים את משתנה הסביבה שלמטה באמצעות הערך של כתובת ה-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
מריצים את הפקודות הבאות כדי ליצור אובייקט סודות של 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 בקובץ deployment.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"
}
]
בדיקת עומסי עבודה ושירותים ב-GKE
פותחים את Kubernetes Engine במסוף Cloud ובודקים את עומסי העבודה והשירותים שנוצרו.


יומני אפליקציות
פותחים את Logs Explorer ומחפשים יומנים שמכילים את הטקסט Customer already exists (הלקוח כבר קיים).

5. מעולה!
כל הכבוד, סיימתם את ה-Codelab!
הנושאים שדיברנו עליהם:
- איך יוצרים מכונה פרטית של מסד נתונים ב-AlloyDB
- איך פורסים אפליקציה באשכול GKE Autopilot שמתחבר למופע AlloyDB
השלב הבא:
כדאי לעיין במדריכי Codelab נוספים של Cymbal Eats:
- הפעלת Cloud Workflows באמצעות Eventarc
- הפעלת עיבוד אירועים מ-Cloud Storage
- התחברות ל-Cloud SQL פרטי מ-Cloud Run
- חיבור למסדי נתונים מנוהלים באופן מלא מ-Cloud Run
- אבטחת אפליקציה ללא שרת באמצעות שרת proxy לאימות זהויות (IAP)
- הפעלת משימות של Cloud Run באמצעות Cloud Scheduler
- פריסה מאובטחת ב-Cloud Run
- אבטחת תנועת נתונים נכנסת ב-Cloud Run
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.