1. 總覽
在本實驗室中,您將部署雙層微服務,其中一個 Pod 會在 GKE Autopilot 上執行,並連線至 AlloyDB 資料庫的私有執行個體。客戶服務應用程式是 Cymbal Eats 系統的一部分,可管理已註冊的使用者。Customer Service 應用程式是以 Java 為基礎的微服務,使用 Quarkus 架構。

AlloyDB 支援透過為私人服務存取權設定的私密內部 IP 位址進行網路連線。
私人服務存取權會以虛擬私有雲對等互連的方式運作,可連結您的虛擬私有雲網路與 AlloyDB 資源 (叢集和執行個體) 所在的基礎 Google Cloud 虛擬私有雲網路。私人連線提供內部 IP 位址,可讓虛擬私有雲網路中的資源和存取的 AlloyDB 資源進行專屬通訊。虛擬私有雲網路中的資源不需要網際網路存取權或外部 IP 位址,即可連線至 AlloyDB 資源。

什麼是 GKE Autopilot?
GKE Autopilot 是 GKE 中的一種作業模式,可管理叢集設定,包括節點、資源調度、安全性和其他預先設定。Autopilot 叢集經過最佳化調整,適用於多數正式環境工作負載,並根據您的 Kubernetes 資訊清單佈建運算資源。簡化設定程序,遵循 GKE 最佳做法和建議,以便設置叢集和工作負載,並提升擴充性及安全性。如需內建設定清單,請參閱 Autopilot 和 Standard 比較表。
什麼是 AlloyDB?
與 PostgreSQL 相容的全代管資料庫服務,能為您處理最嚴苛的企業資料庫工作負載。AlloyDB 結合 Google 的精華與極受歡迎的開放原始碼資料庫引擎 PostgreSQL,不僅效能卓越,也具備絕佳的擴充性和可用性。
學習目標
在本實驗室中,您將瞭解如何執行下列操作:
- 建立 AlloyDB 資料庫的私有執行個體
- 在 GKE Autopilot 叢集上部署應用程式,並連線至 AlloyDB 執行個體
必要條件
- 本實驗室假設您已熟悉 Cloud 控制台和 Cloud Shell 環境。
- 具備 GKE 和 AlloyDB 的使用經驗會有幫助,但沒有也無妨。
2. 設定和需求
設定 Cloud 專案
- 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶。



- 專案名稱是這個專案參與者的顯示名稱。這是 Google API 未使用的字元字串。你隨時可以更新該位置資訊。
- 專案 ID 在所有 Google Cloud 專案中都是不重複的,而且設定後即無法變更。Cloud 控制台會自動產生不重複的字串,通常您不需要在意這個字串。在大多數程式碼研究室中,您需要參照專案 ID (通常會標示為
PROJECT_ID)。如果您不喜歡產生的 ID,可以產生另一個隨機 ID。你也可以嘗試自訂名稱,看看是否可用。完成這個步驟後就無法變更,且專案期間都會維持這個設定。 - 請注意,部分 API 會使用第三個值,也就是「專案編號」。如要進一步瞭解這三種值,請參閱說明文件。
- 接著,您需要在 Cloud 控制台中啟用帳單,才能使用 Cloud 資源/API。完成本程式碼研究室的費用應該不高,甚至完全免費。如要關閉資源,避免產生本教學課程以外的費用,您可以刪除自己建立的資源,或刪除整個專案。Google Cloud 新使用者可參加價值$300 美元的免費試用計畫。
環境設定
按一下搜尋列右側的圖示,啟用 Cloud Shell。

複製存放區並前往該目錄,將下列指令複製並貼到終端機,然後按下 Enter 鍵:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service
執行 gke-lab-setup.sh,部署必要的依附元件。
系統會建立下列資源:
- AlloyDB 叢集和執行個體
- Artifact Registry,用於儲存 Cloud Run 作業和客戶服務的容器映像檔
- Cloud Run Job 的虛擬私有雲存取連接器,可與 AlloyDB 資料庫通訊
- 建立 AlloyDB 資料庫的 Cloud Run 工作
- 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
部署應用程式
接著,您將部署客戶服務應用程式。
Customer Service 應用程式是以 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,查看最新建構作業的詳細資料。

使用 AlloyDB 私人 IP 位址的值,設定下列環境變數:
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 密鑰物件來儲存資料庫憑證,供 Customer Service 應用程式連線至資料庫:
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
執行指令,在 deployment.yaml 檔案中取代 CUSTOMER_SERVICE_IMAGE:
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
輸出內容範例:

4. 測試應用程式
執行下列指令,儲存客戶服務網址。
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 工作負載和服務
在 Cloud 控制台中開啟 Kubernetes Engine,然後查看建立的工作負載和服務。


應用程式記錄檔
開啟 Logs Explorer,然後搜尋包含「Customer already exists」文字的記錄。

5. 恭喜!
恭喜,您已完成本程式碼研究室!
涵蓋內容:
- 如何建立 AlloyDB 資料庫的私人執行個體
- 如何將應用程式部署至 GKE Autopilot 叢集,並連線至 AlloyDB 執行個體
後續步驟:
探索其他 Cymbal Eats 程式碼研究室:
- 使用 Eventarc 觸發 Cloud Workflows
- 從 Cloud Storage 觸發事件處理程序
- 從 Cloud Run 連線至 Private CloudSQL
- 從 Cloud Run 連線至全代管資料庫
- 使用 Identity-Aware Proxy (IAP) 保護無伺服器應用程式
- 使用 Cloud Scheduler 觸發 Cloud Run 工作
- 安全地部署至 Cloud Run
- 保護 Cloud Run 傳入流量
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程所用資源的費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。
刪除專案
如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。