מתבצעת התחברות למכונה Private AlloyDB מאפליקציה שפועלת ב-GKE Autopilot

1. סקירה כללית

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

e8a5140b09521b7a.png

AlloyDB תומך בקישוריות לרשת באמצעות כתובות IP פנימיות פרטיות שהוגדרו לגישה לשירותים פרטיים.

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

44662d7a086358de.png

מה זה 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

  1. נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. אפשר לעדכן אותו בכל שלב.
  • Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (בדרך כלל הוא מזוהה כ-PROJECT_ID). אם המזהה שנוצר לא מוצא חן בעיניך, יש לך אפשרות ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות תבנית משלך ולבדוק אם היא זמינה. לא ניתן לשנות אותו אחרי השלב הזה, והוא יישאר למשך הפרויקט.
  • לידיעתך, יש ערך שלישי – Project Number (מספר פרויקט), שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט כולו. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

הגדרת סביבה

לוחצים על הסמל שמופיע מימין לסרגל החיפוש כדי להפעיל את Cloud Shell.

eb0157a992f16fa3.png

משכפלים את המאגר, עוברים לספרייה, מעתיקים ומדביקים את הפקודה שמתחת לטרמינל ומקישים על 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

אם מתבקשים לאשר, לוחצים על 'הרשאה' כדי להמשיך.

6356559df3eccdda.png

ההגדרה תימשך כ-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) מפורטות במסוף.

3b12b0fa1367fb42.png

בדיקת אשכול 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

פלט לדוגמה:

e8882c44fa0bb631.png

מריצים את הפקודה כדי לאחסן פרטי כניסה לאשכול:

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 האחרון.

49fd65309967ae47.png

מגדירים את משתנה הסביבה שלמטה באמצעות הערך של כתובת ה-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

פלט לדוגמה:

179a23bd33793924.png

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 ובודקים את עומסי העבודה והשירותים שנוצרו.

e1217216e003a839.png

d5c97fb5950c4db.png

יומני אפליקציות

פותחים את Logs Explorer ומחפשים יומנים שמכילים את הביטוי 'הלקוח כבר קיים'. טקסט.

543c5ed97819f540.png

5. מעולה!

כל הכבוד, סיימת את ה-Codelab!

נושאים שטיפלנו בהם:

  • איך ליצור מופע פרטי של מסד הנתונים AlloyDB
  • איך לפרוס אפליקציה באשכול GKE Autopilot שמתחבר למכונת AlloyDB

השלב הבא:

בקישורים הבאים תוכלו למצוא עוד מעבדי קוד Labs של Cymbal Eats:

הסרת המשאבים

כדי להימנע מצבירת חיובים בחשבון Google Cloud על המשאבים שנעשה בהם שימוש במדריך הזה, צריך למחוק את הפרויקט שמכיל את המשאבים או לשמור את הפרויקט ולמחוק את המשאבים הספציפיים.

מחיקת הפרויקט

הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.