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

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

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

e8a5140b09521b7a.png

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

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

44662d7a086358de.png

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. אפשר לעדכן את המיקום הזה בכל שלב.
  • מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שהוא מוגדר). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל הוא מסומן כ-PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר כזו למשך הפרויקט.
  • לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. כדי להשבית את המשאבים ולא לחייב אתכם מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את כל הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

הגדרת הסביבה

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

עיון בתכונות הזמינות(Query Insight, ‏ 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 במסוף כדי לבדוק את הפרטים של הגרסה האחרונה.

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

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

פלט לדוגמה:

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"
  }
]

בדיקת עומסי עבודה ושירותים ב-GKE

פותחים את Kubernetes Engine במסוף Cloud ובודקים את עומסי העבודה והשירותים שנוצרו.

e1217216e003a839.png

d5c97fb5950c4db.png

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

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

543c5ed97819f540.png

5. מעולה!

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

הנושאים שדיברנו עליהם:

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

השלב הבא:

כדאי לעיין במדריכי Codelab נוספים של Cymbal Eats:

הסרת המשאבים

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

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

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