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

1. ภาพรวม

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

e8a5140b09521b7a.png

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

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

44662d7a086358de.png

GKE Autopilot คืออะไร

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

AlloyDB คืออะไร

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

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

ในแล็บนี้ คุณจะได้เรียนรู้วิธีการต่อไปนี้

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

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

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

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

การตั้งค่าโปรเจ็กต์ Cloud

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

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.png

  • ชื่อโปรเจ็กต์ คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ โดยเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณสามารถอัปเดตชื่อนี้ได้ทุกเมื่อ
  • รหัสโปรเจ็กต์ ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เมื่อตั้งค่าแล้วจะเปลี่ยนไม่ได้) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยทั่วไปจะระบุเป็น PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณสามารถสร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือจะลองใช้รหัสของคุณเองและดูว่ารหัสนั้นพร้อมใช้งานหรือไม่ก็ได้ เมื่อทำตามขั้นตอนนี้แล้ว คุณจะเปลี่ยนรหัสไม่ได้อีกและรหัสนี้จะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • โปรดทราบว่ามีค่าที่ 3 คือหมายเลขโปรเจ็กต์ ซึ่ง API บางรายการใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ใน เอกสารประกอบ
  1. จากนั้นคุณจะต้อง เปิดใช้การเรียกเก็บเงิน ใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม 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 Job และบริการลูกค้า
  • เครื่องมือเชื่อมต่อ VPC Access สำหรับ Cloud Run Job เพื่อสื่อสารกับฐานข้อมูล 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

สำรวจฟีเจอร์ที่มี(Query Insight, การตรวจสอบ) ใน คอนโซล

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

เรียกใช้คำสั่งด้านล่างเพื่อสร้างออบเจ็กต์ 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 ในไฟล์ 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 Console แล้วตรวจสอบภาระงานและบริการที่สร้างขึ้น

e1217216e003a839.pngd5c97fb5950c4db.png

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

เปิด Logs Explorer แล้วค้นหาบันทึกที่มีข้อความ "Customer already exists"

543c5ed97819f540.png

5. ยินดีด้วย

ยินดีด้วย คุณทำ Codelab นี้เสร็จแล้ว

สิ่งที่เราได้พูดถึงไปแล้ว

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

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

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

ล้างข้อมูล

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

การลบโปรเจ็กต์

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