從在 GKE Autopilot 上執行的應用程式連線至 Private AlloyDB 執行個體

1. 總覽

在本研究室中,您將部署雙層微服務,當中包含在 GKE Autopilot 上執行的 Pod,並將這個服務連線至 AlloyDB 資料庫的私人執行個體。「客戶服務」應用程式屬於 Cymbal Eats 系統的一部分,可提供管理已註冊使用者的功能。客戶服務應用程式是採用 Quarkus 架構的 Java 微服務。

e8a5140b09521b7a.png

AlloyDB 支援透過私人服務存取權設定的私人內部 IP 位址建立網路連線。

私人服務存取權會實作為虛擬私有雲對等互連連線,在您的虛擬私有雲網路與 AlloyDB 資源 (叢集和執行個體) 所在的基礎 Google Cloud 虛擬私有雲網路之間,進行對等互連。有了私人連線,虛擬私有雲網路中的資源只要使用內部 IP 位址,就能與存取的 AlloyDB 資源進行專屬通訊。虛擬私有雲網路中的資源不需要網際網路存取權或外部 IP 位址,也能連線至 AlloyDB 資源。

44662d7a086358de.png

什麼是 GKE Autopilot?

GKE Autopilot 是 GKE 的作業模式,Google 會管理叢集設定,包括節點、資源調度、安全性和其他預設設定。Autopilot 叢集經過最佳化調整,可以執行大部分的正式環境工作負載,並依據 Kubernetes 資訊清單佈建運算資源。簡化的設定流程符合 GKE 最佳做法、叢集和工作負載設定、擴充性和安全性的建議。如需內建設定清單,請參閱 Autopilot 和 Standard 比較表

什麼是 AlloyDB?

與 PostgreSQL 相容的全代管資料庫服務,能為您處理要求最嚴苛的企業資料庫工作負載。AlloyDB 結合 Google 的精華與極受歡迎的開放原始碼資料庫引擎 PostgreSQL,不僅效能卓越,也具備絕佳的擴充性和可用性。

學習目標

在本研究室中,您將瞭解如何執行下列操作:

  • 建立 AlloyDB 資料庫的私人執行個體
  • 在連結至 AlloyDB 執行個體的 GKE Autopilot 叢集上部署應用程式

必要條件

  • 本研究室假設您熟悉 Cloud 控制台和 Cloud Shell 環境。
  • 先前的 GKE 和 AlloyDB 體驗雖然有幫助,但並非硬性規定。

2. 設定和需求

Cloud 專案設定

  1. 登入 Google Cloud 控制台,建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 「專案名稱」是這項專案參與者的顯示名稱。這是 Google API 未使用的字元字串。您隨時可以更新這項資訊。
  • 所有 Google Cloud 專案的專案 ID 均不得重複,而且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常為 PROJECT_ID)。如果您對產生的 ID 不滿意,可以隨機產生一個 ID。此外,您也可以自行嘗試,看看系統是否提供該付款方式。在完成這個步驟後就無法變更,而且在專案期間仍會保持有效。
  • 資訊中的第三個值是專案編號,部分 API 會使用這個編號。如要進一步瞭解這三個值,請參閱說明文件
  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行這個程式碼研究室並不會產生任何費用,如果有的話。如要關閉資源,以免系統產生本教學課程結束後產生的費用,您可以刪除自己建立的資源,或刪除整個專案。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。

環境設定

如要啟用 Cloud Shell,請按一下搜尋列右側的圖示。

eb0157a992f16fa3.png

複製存放區並前往目錄,將以下指令複製及貼上至終端機,然後按下 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 工作的虛擬私有雲存取連接器,用來與 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

部署應用程式

接下來,您將部署客戶服務應用程式。

客戶服務應用程式是採用 Quarkus 架構的 Java 型微服務。

前往 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

請使用 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 Secrets 物件,儲存資料庫憑證,客戶服務應用程式將使用這組憑證連線至資料庫:

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

輸出內容範例:

179a23bd33793924.png

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,並查看已建立的工作負載和服務。

e1217216e003a839.png

d5c97fb5950c4db.png

應用程式記錄檔

開啟記錄檔探索工具,然後搜尋含有「客戶已存在」的記錄文字。

543c5ed97819f540.png

5. 恭喜!

恭喜,您已完成程式碼研究室!

本文涵蓋的內容:

  • 如何建立 AlloyDB 資料庫的私人執行個體
  • 如何在連線至 AlloyDB 執行個體的 GKE Autopilot 叢集上部署應用程式

下一步:

探索其他 Cymbal Eats 程式碼研究室:

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取本教學課程所用資源的費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。

刪除專案

如要避免付費,最簡單的方法就是刪除您針對教學課程建立的專案。