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

1. ภาพรวม

ใน Lab นี้ คุณจะทำให้ใช้งานไมโครเซอร์วิส 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 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 ของ 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 และ Customer Service
  • เครื่องมือเชื่อมต่อการเข้าถึง VPC สำหรับ Cloud Run Job เพื่อสื่อสารกับฐานข้อมูล 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

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

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

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

เปิดเครื่องมือสำรวจบันทึก แล้วค้นหาบันทึกที่มีข้อความ "มีลูกค้าอยู่แล้ว"

543c5ed97819f540.png

5. ยินดีด้วย

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

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

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

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

ดู Codelab อื่นๆ ของ Cymbal Eats

ล้างข้อมูล

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

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

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