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

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

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
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



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

โคลนที่เก็บและไปที่ไดเรกทอรี จากนั้นคัดลอกและวางคำสั่งด้านล่างลงในเทอร์มินัล แล้วกด 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
หากระบบแจ้งให้ให้สิทธิ์ ให้คลิก "ให้สิทธิ์" เพื่อดำเนินการต่อ

การตั้งค่าจะใช้เวลาประมาณ 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
สํารวจฟีเจอร์ที่มีให้บริการ(ข้อมูลเชิงลึกของคําค้นหา การตรวจสอบ) ในคอนโซล

ตรวจสอบคลัสเตอร์ 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
ตัวอย่างเอาต์พุต

เรียกใช้คำสั่งเพื่อจัดเก็บข้อมูลเข้าสู่ระบบสำหรับคลัสเตอร์
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 ในคอนโซลเพื่อดูรายละเอียดของบิลด์ล่าสุด

ตั้งค่าตัวแปรสภาพแวดล้อมด้านล่างโดยใช้ค่าของที่อยู่ 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
ตัวอย่างเอาต์พุต

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


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

5. ยินดีด้วย
ยินดีด้วย คุณทำ Codelab เสร็จแล้ว
สิ่งที่เราได้พูดถึงไปแล้ว
- วิธีสร้างอินสแตนซ์ส่วนตัวของฐานข้อมูล AlloyDB
- วิธีติดตั้งใช้งานแอปพลิเคชันในคลัสเตอร์ GKE Autopilot ที่เชื่อมต่อกับอินสแตนซ์ AlloyDB
ขั้นตอนต่อไปที่ทำได้
ดู Codelab อื่นๆ ของ Cymbal Eats
- การทริกเกอร์ Cloud Workflows ด้วย Eventarc
- การทริกเกอร์การประมวลผลเหตุการณ์จาก Cloud Storage
- การเชื่อมต่อกับ Private CloudSQL จาก Cloud Run
- การเชื่อมต่อกับฐานข้อมูลที่มีการจัดการครบวงจรจาก Cloud Run
- รักษาความปลอดภัยให้กับแอปพลิเคชันแบบ Serverless ด้วย Identity Aware Proxy (IAP)
- การทริกเกอร์ Cloud Run Jobs ด้วย Cloud Scheduler
- การติดตั้งใช้งานกับ Cloud Run อย่างปลอดภัย
- การรักษาความปลอดภัยให้กับการเข้าชมขาเข้าของ Cloud Run
ล้างข้อมูล
โปรดลบโปรเจ็กต์ที่มีทรัพยากรหรือเก็บโปรเจ็กต์ไว้และลบทรัพยากรแต่ละรายการเพื่อหลีกเลี่ยงการเรียกเก็บเงินจากบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้
การลบโปรเจ็กต์
วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างขึ้นสำหรับบทแนะนำ