1. ภาพรวม
ในห้องทดลองนี้ คุณจะได้ทำให้ Microservice แบบ 2 ระดับใช้งานได้ พร้อมด้วยพ็อดที่ทำงานบน GKE Autopilot และเชื่อมต่อกับอินสแตนซ์ส่วนตัวของฐานข้อมูล AlloyDB แอปพลิเคชันฝ่ายบริการลูกค้าเป็นส่วนหนึ่งของระบบ Cymbal Eats และมีไว้เพื่อจัดการผู้ใช้ที่ลงทะเบียน แอปพลิเคชันฝ่ายบริการลูกค้าเป็นไมโครเซอร์วิสที่ใช้ Java ซึ่งใช้เฟรมเวิร์ก Quarkus
AlloyDB รองรับการเชื่อมต่อเครือข่ายผ่านที่อยู่ IP ภายในส่วนตัวที่กำหนดค่าไว้สำหรับการเข้าถึงบริการส่วนตัว
การเข้าถึงบริการส่วนตัวจะใช้เป็นการเชื่อมต่อการเพียร์ VPC ระหว่างเครือข่าย VPC และเครือข่าย Google Cloud VPC ที่สำคัญซึ่งเป็นที่อยู่ของทรัพยากร AlloyDB (คลัสเตอร์และอินสแตนซ์) ของคุณ การเชื่อมต่อส่วนตัวช่วยให้ทรัพยากรในเครือข่าย VPC สื่อสารกับทรัพยากร AlloyDB ที่เข้าถึงโดยใช้ที่อยู่ IP ภายในได้ ทรัพยากรในเครือข่าย VPC ของคุณไม่จำเป็นต้องใช้การเข้าถึงอินเทอร์เน็ตหรือที่อยู่ IP ภายนอกเพื่อเข้าถึงทรัพยากร AlloyDB
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. การตั้งค่าและข้อกำหนด
ตั้งค่าโปรเจ็กต์ที่อยู่ในระบบคลาวด์
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในทุกโปรเจ็กต์ของ Google Cloud และจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID
) หากคุณไม่ชอบรหัสที่สร้างขึ้น คุณสามารถสร้างรหัสแบบสุ่มอื่นได้ หรือคุณจะลองดำเนินการเองแล้วดูว่าพร้อมให้บริการหรือไม่ และไม่สามารถเปลี่ยนแปลงได้หลังจากขั้นตอนนี้และจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - สำหรับข้อมูลของคุณ ค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน 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 และบริการลูกค้า
- เครื่องมือเชื่อมต่อการเข้าถึง VPC สำหรับงาน Cloud Run เพื่อสื่อสารกับฐานข้อมูล AlloyDB
- Cloud Run Job เพื่อสร้างฐานข้อมูล AlloyDB
- คลัสเตอร์ GKE Autopilot
./gke-lab-setup.sh
หากได้รับข้อความแจ้งให้ให้สิทธิ์ ให้คลิก "ให้สิทธิ์" เพื่อดำเนินการต่อ
การตั้งค่าจะใช้เวลาประมาณ 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
สำรวจฟีเจอร์ที่มี(ข้อมูลเชิงลึกของการค้นหา, การตรวจสอบ) ในคอนโซล
ตรวจสอบคลัสเตอร์ 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 และตรวจสอบภาระงานและบริการที่สร้าง
บันทึกของแอปพลิเคชัน
เปิด Logs Explorer และค้นหาบันทึกที่มีคำว่า "มีลูกค้าอยู่แล้ว" ข้อความ
5. ยินดีด้วย
ยินดีด้วย คุณศึกษา Codelab จบแล้ว
สิ่งที่เราได้พูดคุยกันมีดังนี้
- วิธีสร้างอินสแตนซ์ส่วนตัวของฐานข้อมูล AlloyDB
- วิธีทำให้แอปพลิเคชันใช้งานได้บนคลัสเตอร์ GKE Autopilot ที่เชื่อมต่อกับอินสแตนซ์ AlloyDB
ขั้นตอนต่อไปที่ทำได้
สำรวจ Codelab อื่นๆ ของ Cymbal Eats
- การทริกเกอร์เวิร์กโฟลว์ระบบคลาวด์ด้วย Eventarc
- การทริกเกอร์การประมวลผลเหตุการณ์จาก Cloud Storage
- การเชื่อมต่อกับ Private CloudSQL จาก Cloud Run
- การเชื่อมต่อกับฐานข้อมูลที่มีการจัดการครบวงจรจาก Cloud Run
- แอปพลิเคชัน Serverless ที่ปลอดภัยด้วย Identity Aware Proxy (IAP)
- การทริกเกอร์งาน Cloud Run ด้วย Cloud Scheduler
- การทำให้ Cloud Run ใช้งานได้อย่างปลอดภัย
- การรักษาความปลอดภัยการรับส่งข้อมูลขาเข้าของ Cloud Run
ล้างข้อมูล
เพื่อหลีกเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้ โปรดลบโปรเจ็กต์ที่มีทรัพยากรดังกล่าวหรือเก็บโปรเจ็กต์ไว้และลบทรัพยากรแต่ละรายการ
กำลังลบโปรเจ็กต์
วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างไว้สำหรับบทแนะนำ