กำลังเชื่อมต่อกับอินสแตนซ์ AlloyDB ส่วนตัวจากแอปพลิเคชันที่ทำงานบน GKE Autopilot

1. ภาพรวม

ในห้องทดลองนี้ คุณจะได้ทำให้ Microservice แบบ 2 ระดับใช้งานได้ พร้อมด้วยพ็อดที่ทำงานบน GKE Autopilot และเชื่อมต่อกับอินสแตนซ์ส่วนตัวของฐานข้อมูล AlloyDB แอปพลิเคชันฝ่ายบริการลูกค้าเป็นส่วนหนึ่งของระบบ Cymbal Eats และมีไว้เพื่อจัดการผู้ใช้ที่ลงทะเบียน แอปพลิเคชันฝ่ายบริการลูกค้าเป็นไมโครเซอร์วิสที่ใช้ Java ซึ่งใช้เฟรมเวิร์ก Quarkus

e8a5140b09521b7a.png

AlloyDB รองรับการเชื่อมต่อเครือข่ายผ่านที่อยู่ IP ภายในส่วนตัวที่กำหนดค่าไว้สำหรับการเข้าถึงบริการส่วนตัว

การเข้าถึงบริการส่วนตัวจะใช้เป็นการเชื่อมต่อการเพียร์ VPC ระหว่างเครือข่าย VPC และเครือข่าย Google Cloud VPC ที่สำคัญซึ่งเป็นที่อยู่ของทรัพยากร AlloyDB (คลัสเตอร์และอินสแตนซ์) ของคุณ การเชื่อมต่อส่วนตัวช่วยให้ทรัพยากรในเครือข่าย VPC สื่อสารกับทรัพยากร AlloyDB ที่เข้าถึงโดยใช้ที่อยู่ IP ภายในได้ ทรัพยากรในเครือข่าย VPC ของคุณไม่จำเป็นต้องใช้การเข้าถึงอินเทอร์เน็ตหรือที่อยู่ IP ภายนอกเพื่อเข้าถึงทรัพยากร AlloyDB

44662d7a086358de.png

GKE Autopilot คืออะไร

GKE Autopilot คือโหมดการทำงานใน GKE ที่ Google จัดการการกำหนดค่าคลัสเตอร์ของคุณ รวมถึงโหนด การปรับขนาด การรักษาความปลอดภัย และการตั้งค่าอื่นๆ ที่กำหนดค่าไว้ล่วงหน้า คลัสเตอร์ Autopilot ได้รับการเพิ่มประสิทธิภาพเพื่อเรียกใช้ภาระงานเวอร์ชันที่ใช้งานจริงส่วนใหญ่ และจัดสรรทรัพยากรการประมวลผลโดยอิงตามไฟล์ Manifest ของ Kubernetes การกำหนดค่าที่มีประสิทธิภาพเป็นไปตามแนวทางปฏิบัติแนะนำและคำแนะนำสำหรับ GKE สำหรับการตั้งค่าคลัสเตอร์และภาระงาน ความสามารถในการปรับขนาด และการรักษาความปลอดภัย โปรดดูรายการการตั้งค่าในตัวที่ตารางเปรียบเทียบ Autopilot และมาตรฐาน

AlloyDB คืออะไร

บริการฐานข้อมูลที่เข้ากันได้กับ PostgreSQL ที่มีการจัดการครบวงจรสำหรับภาระงานฐานข้อมูลขององค์กรที่จำเป็นต้องใช้มากที่สุด AlloyDB รวมสิ่งที่ดีที่สุดของ Google เข้ากับ PostgreSQL ซึ่งเป็นเครื่องมือฐานข้อมูลโอเพนซอร์สยอดนิยมอย่างหนึ่ง เพื่อประสิทธิภาพ ขนาด และความพร้อมใช้งานที่เหนือชั้น

สิ่งที่คุณจะได้เรียนรู้

ในห้องทดลองนี้ คุณจะได้ศึกษาวิธีทำสิ่งต่อไปนี้

  • สร้างอินสแตนซ์ส่วนตัวของฐานข้อมูล AlloyDB
  • ทำให้แอปพลิเคชันใช้งานได้บนคลัสเตอร์ GKE Autopilot ที่เชื่อมต่อกับอินสแตนซ์ AlloyDB

ข้อกำหนดเบื้องต้น

  • ห้องทดลองนี้จะถือว่ามีความคุ้นเคยกับสภาพแวดล้อม Cloud Console และ Cloud Shell
  • ประสบการณ์ GKE และ AlloyDB แบบเดิมมีประโยชน์แต่ไม่จำเป็น

2. การตั้งค่าและข้อกำหนด

ตั้งค่าโปรเจ็กต์ที่อยู่ในระบบคลาวด์

  1. ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะไม่ซ้ำกันในทุกโปรเจ็กต์ของ Google Cloud และจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น PROJECT_ID) หากคุณไม่ชอบรหัสที่สร้างขึ้น คุณสามารถสร้างรหัสแบบสุ่มอื่นได้ หรือคุณจะลองดำเนินการเองแล้วดูว่าพร้อมให้บริการหรือไม่ และไม่สามารถเปลี่ยนแปลงได้หลังจากขั้นตอนนี้และจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • สำหรับข้อมูลของคุณ ค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD

การตั้งค่าสภาพแวดล้อม

เปิดใช้งาน Cloud Shell โดยคลิกไอคอนทางด้านขวาของแถบค้นหา

eb0157a992f16fa3.png

โคลนที่เก็บและไปยังไดเรกทอรี คัดลอกและวางคำสั่งด้านล่างลงในเทอร์มินัลแล้วกด Enter:

git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service

ทำให้ทรัพยากร Dependency ที่จำเป็นใช้งานได้โดยการเรียกใช้ gke-lab-setup.sh

ระบบจะสร้างแหล่งข้อมูลต่อไปนี้

  • คลัสเตอร์และอินสแตนซ์ของ AlloyDB
  • Artifact Registry เพื่อจัดเก็บอิมเมจคอนเทนเนอร์สำหรับงาน Cloud Run และบริการลูกค้า
  • เครื่องมือเชื่อมต่อการเข้าถึง VPC สำหรับงาน Cloud Run เพื่อสื่อสารกับฐานข้อมูล AlloyDB
  • Cloud Run Job เพื่อสร้างฐานข้อมูล AlloyDB
  • คลัสเตอร์ GKE Autopilot
./gke-lab-setup.sh

หากได้รับข้อความแจ้งให้ให้สิทธิ์ ให้คลิก "ให้สิทธิ์" เพื่อดำเนินการต่อ

6356559df3eccdda.png

การตั้งค่าจะใช้เวลาประมาณ 10 นาที ตรวจสอบสคริปต์การตั้งค่าที่ใช้สร้างทรัพยากร Dependency ที่จำเป็น

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

สำรวจฟีเจอร์ที่มี(ข้อมูลเชิงลึกของการค้นหา, การตรวจสอบ) ในคอนโซล

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

ทำให้แอปพลิเคชันใช้งานได้

ขั้นตอนต่อไปคือการติดตั้งใช้งานแอปพลิเคชันฝ่ายบริการลูกค้า

แอปพลิเคชันฝ่ายบริการลูกค้าเป็น Microservice ที่ใช้ Java ซึ่งใช้เฟรมเวิร์ก Quarkus

ไปที่โฟลเดอร์ 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

จะใช้เวลาสักครู่เพื่อให้แอปพลิเคชันเปลี่ยนสถานะเป็น "กำลังทำงาน"

เรียกใช้คำสั่งเพื่อสร้าง 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"}'

เรียกใช้คำสั่งด้านบนหลายๆ ครั้งเพื่อสร้างข้อความบันทึกที่คุณจะเห็นในเครื่องมือสำรวจบันทึกในภายหลัง

ตรวจสอบบันทึกข้อมูลลูกค้า

เรียกใช้คำสั่งด้านล่างเพื่อดูระเบียนลูกค้าที่สร้างขึ้น

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 Console และตรวจสอบภาระงานและบริการที่สร้าง

e1217216e003a839.png

d5c97fb5950c4db.png

บันทึกของแอปพลิเคชัน

เปิด Logs Explorer และค้นหาบันทึกที่มีคำว่า "มีลูกค้าอยู่แล้ว" ข้อความ

543c5ed97819f540.png

5. ยินดีด้วย

ยินดีด้วย คุณศึกษา Codelab จบแล้ว

สิ่งที่เราได้พูดคุยกันมีดังนี้

  • วิธีสร้างอินสแตนซ์ส่วนตัวของฐานข้อมูล AlloyDB
  • วิธีทำให้แอปพลิเคชันใช้งานได้บนคลัสเตอร์ GKE Autopilot ที่เชื่อมต่อกับอินสแตนซ์ AlloyDB

ขั้นตอนต่อไปที่ทำได้

สำรวจ Codelab อื่นๆ ของ Cymbal Eats

ล้างข้อมูล

เพื่อหลีกเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้ โปรดลบโปรเจ็กต์ที่มีทรัพยากรดังกล่าวหรือเก็บโปรเจ็กต์ไว้และลบทรัพยากรแต่ละรายการ

กำลังลบโปรเจ็กต์

วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างไว้สำหรับบทแนะนำ