從 Google Kubernetes Engine 連線至 MySQL 適用的 Cloud SQL
本頁說明如何使用 Google Cloud 控制台和用戶端應用程式,在 Google Kubernetes Engine (GKE) 上部署連結至 MySQL 執行個體的範例應用程式。假設您及時完成所有步驟 (包括清理作業),本快速入門導覽課程建立的資源通常不會超過一美元。
事前準備
- 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Cloud Build, Cloud SQL Admin, Compute Engine, Kubernetes Engine, Service Networking APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Cloud Build, Cloud SQL Admin, Compute Engine, Kubernetes Engine, Service Networking APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init
必要的角色
如要取得完成本快速入門導覽課程所述工作所需的權限,請要求管理員在快速入門導覽課程專案中授予您下列 IAM 角色:
-
建立、更新或刪除所有 Cloud SQL 執行個體、資料庫和使用者:
-
Cloud SQL 管理員 (
roles/cloudsql.admin) -
Compute 檢視者 (
roles/compute.viewer)
-
Cloud SQL 管理員 (
-
建立具有私人 IP 的 Cloud SQL 執行個體 (私人服務存取連線):
Compute Network Admin (
roles/compute.networkadmin) -
建立及管理 Google Kubernetes Engine 叢集:
Kubernetes Engine 管理員 (
roles/container.admin) -
為專案建立及管理服務帳戶:
- 專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin) -
服務帳戶管理員 (
roles/serviceAccountAdmin)
- 專案 IAM 管理員 (
-
在 Artifact Registry 中為專案建立存放區:
Artifact Registry 管理員 (
roles/artifactregistry.admin) -
在 Cloud Build 中提交及建構應用程式:
-
Cloud Build 編輯者 (
roles/cloudbuilds.builds.editor) -
Storage 物件建立者 (
roles/storage.objectCreator) -
Storage Bucket 檢視器 (
roles/storage.bucketViewer) -
服務帳戶使用者 (
roles/iam.serviceAccountUser) -
記錄檢視器 (
roles/logging.viewer)
-
Cloud Build 編輯者 (
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
設定 Cloud SQL
建立 Cloud SQL 執行個體
建立資料庫
請按照下列步驟建立資料庫:
控制台
-
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
- 選取「
quickstart-instance」。 - 在 SQL 導覽選單中,選取「資料庫」。
- 按一下 [Create database] (建立資料庫)。
- 在「Create a database」(建立資料庫) 對話方塊的「Database name」(資料庫名稱) 欄位中,輸入
quickstart-db。保留字元集和定序的值。 - 點選「建立」。
gcloud
執行 gcloud
sql databases create 指令來建立資料庫。
gcloud sql databases create quickstart-db --instance=quickstart-instance
新增使用者
控制台
-
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
- 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
- 在 SQL 導覽選單中選取「使用者」。
- 按一下「新增使用者帳戶」。
- 在「Add a user account to instance instance_name」(在執行個體「instance_name」中新增使用者帳戶) 頁面中,
新增下列資訊:
- 使用者名稱:設為
quickstart-user - 密碼:指定資料庫使用者的密碼。 請記下這個值,本快速入門導覽課程的後續步驟會用到。
- 在「主機名稱」部分,預設為「允許任何主機」,表示使用者可以從任何 IP 位址連線。
選取「依 IP 位址或位址範圍限制主機」,然後在「主機」區段中輸入 IP 位址或位址範圍。使用者只能從指定的 IP 位址或位址連線。
- 使用者名稱:設為
- 按一下「新增」。
gcloud
執行下列指令前,請先將 DB_PASS 替換成資料庫使用者的密碼。請記下這個值,本快速入門導覽課程的後續步驟會用到。
執行 gcloud sql users create 指令來建立使用者。
gcloud sql users create quickstart-user \ --instance=quickstart-instance \ --password=DB_PASS
Cloud SQL 的使用者名稱長度限制與地端部署 MySQL 相同:MySQL 8.0 以上版本為 32 個字元,舊版則為 16 個字元。
建立 GKE 叢集
控制台
-
在 Google Cloud 控制台中,前往「Google Kubernetes Engine」頁面。
- 點選「建立」。
- 按一下 GKE Autopilot 的「設定」。
- 在「Name」部分指定叢集名稱為
gke-cloud-sql-quickstart。 - 點選「建立」。
gcloud
執行 gcloud container clusters create-auto 指令來建立叢集。
gcloud container clusters create-auto gke-cloud-sql-quickstart \ --region us-central1
使用 Cloud Shell 從 GitHub 複製 Cloud SQL 範例應用程式
有了 Cloud SQL 執行個體、資料庫和 GKE 叢集,您現在可以複製及設定範例應用程式,連線至 Cloud SQL 執行個體。範例應用程式儲存在 GitHub 中。
本快速入門導覽課程的其餘步驟需要使用 Cloud Shell、gcloud 和 kubectl。Cloud Shell 已預先安裝 gcloud 和 kubectl 工具。
Go
-
在 Cloud Shell 編輯器中開啟範例應用程式的原始碼。
開啟 Cloud Shell 編輯器 -
在
Open in Cloud Shell對話方塊中,按一下「確認」,下載範例應用程式程式碼,並在 Cloud Shell 編輯器中開啟範例應用程式目錄。
Java
-
在 Cloud Shell 編輯器中開啟範例應用程式的原始碼。
開啟 Cloud Shell 編輯器 -
在
Open in Cloud Shell對話方塊中,按一下「確認」,下載範例應用程式程式碼,並在 Cloud Shell 編輯器中開啟範例應用程式目錄。
Node.js
-
在 Cloud Shell 編輯器中開啟範例應用程式的原始碼。
開啟 Cloud Shell 編輯器 -
在
Open in Cloud Shell對話方塊中,按一下「確認」,下載範例應用程式程式碼,並在 Cloud Shell 編輯器中開啟範例應用程式目錄。
Python
-
在 Cloud Shell 編輯器中開啟範例應用程式的原始碼。
開啟 Cloud Shell 編輯器 -
在
Open in Cloud Shell對話方塊中,按一下「確認」,下載範例應用程式程式碼,並在 Cloud Shell 編輯器中開啟範例應用程式目錄。
啟用 GKE 叢集
啟用您剛建立的 GKE 叢集,做為本快速入門導覽課程中其餘指令使用的預設叢集。
gcloud container clusters get-credentials
指令,啟用 GKE 叢集。gcloud container clusters get-credentials gke-cloud-sql-quickstart \ --region us-central1
設定服務帳戶
-
執行下列
gcloud iam service-accounts create指令,建立新的服務帳戶:gcloud iam service-accounts create gke-quickstart-service-account \ --display-name="GKE Quickstart Service Account"
- 執行下列
gcloud projects add-iam-policy-binding指令,將 Cloud SQL Client 角色 新增至您剛建立的 Google Cloud 服務帳戶。將 YOUR_PROJECT_ID 替換為專案 ID。gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ --member="serviceAccount:gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/cloudsql.client"
- 範例應用程式會使用記錄功能,因此請執行
gcloud projects add-iam-policy-binding指令,將「記錄寫入者」角色新增至您剛建立的 Google Cloud 服務帳戶。將 YOUR_PROJECT_ID 替換為專案 ID。gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ --member="serviceAccount:gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/logging.logWriter"
- 服務帳戶必須能夠從 Artifactory 存放區提取映像檔,因此請執行
gcloud projects add-iam-policy-binding指令,將「Artifact Registry Reader」角色新增至服務帳戶。將 YOUR_PROJECT_ID 替換為專案 ID。gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ --member="serviceAccount:gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/artifactregistry.reader"
- 建立 Kubernetes 服務帳戶。
- 在 Cloud Shell 編輯器中更新
service-account.yaml檔案。 將<YOUR-KSA-NAME>替換為ksa-cloud-sql。 - 在 Cloud Shell 中執行
kubectl apply指令,如下所示:kubectl apply -f service-account.yaml
- 在 Cloud Shell 編輯器中更新
- 執行下列
gcloud iam service-accounts add-iam-policy-binding指令,啟用 Google Cloud 服務帳戶和 Kubernetes 服務帳戶的 IAM 繫結。進行下列替換:- 將 YOUR_PROJECT_ID 替換為專案 ID。
- YOUR_K8S_NAMESPACE,也就是在 GKE 中建立叢集的預設命名空間。
default - YOUR_KSA_NAME搭配
ksa-cloud-sql。
gcloud iam service-accounts add-iam-policy-binding \ --role="roles/iam.workloadIdentityUser" \ --member="serviceAccount:YOUR_PROJECT_ID.svc.id.goog[YOUR_K8S_NAMESPACE/YOUR_KSA_NAME]" \ gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com
- 執行下列
kubectl annotate指令,為 Kubernetes 服務帳戶加上 IAM 繫結註解。進行下列替換:- YOUR_KSA_NAME搭配
ksa-cloud-sql。 - 將 YOUR_PROJECT_ID 替換為專案 ID。
kubectl annotate serviceaccount \ YOUR_KSA_NAME \ iam.gke.io/gcp-service-account=gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com
- YOUR_KSA_NAME搭配
設定密鑰
執行下列 kubectl create secret generic 指令,為範例應用程式使用的資料庫、使用者和使用者密碼建立 Kubernetes Secret。每個 Secret 的值都以本快速入門導覽課程先前步驟中指定的值為準。將 DB_PASS 替換為您在上一個「建立使用者」快速入門導覽課程步驟中建立的 quickstart-user 密碼。
kubectl create secret generic gke-cloud-sql-secrets \ --from-literal=database=quickstart-db \ --from-literal=username=quickstart-user \ --from-literal=password=DB_PASS
建構範例應用程式
Go
- 返回 Cloud Shell 編輯器,然後點選 Open Terminal,開啟 Cloud Shell 提示。
-
在 Cloud Shell 提示中,執行下列
gcloud artifacts repositories create指令,在 Artifact Registry 中建立名為 gke-cloud-sql-repo 的存放區,該存放區與叢集位於相同區域。將 YOUR_PROJECT_ID 替換為專案 ID。gcloud artifacts repositories create gke-cloud-sql-repo \ --project=YOUR_PROJECT_ID \ --repository-format=docker \ --location=us-central1 \ --description="GKE Quickstart sample app"
- 將目錄變更為您先前從 GitHub 複製 Cloud SQL 範例應用程式的位置。範例應用程式目錄包含範例應用程式的
Dockerfile。 舉例來說,如要將目錄變更為範例應用程式的目錄,可以執行下列指令:cd ~/cloudshell_open/golang-samples/cloudsql/mysql/database-sql
- 執行下列
gcloud builds submit指令,建構 Docker 容器並發布至 Artifact Registry。將 YOUR_PROJECT_ID 替換為專案 ID。gcloud builds submit \ --tag us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql .
Java
- 返回 Cloud Shell 編輯器,然後點選 Open Terminal,開啟 Cloud Shell 提示。
-
在 Cloud Shell 提示中,執行下列
gcloud artifacts repositories create指令,在 Artifact Registry 中建立名為 gke-cloud-sql-repo 的存放區,該存放區與叢集位於相同區域。將 YOUR_PROJECT_ID 替換為專案 ID。gcloud artifacts repositories create gke-cloud-sql-repo \ --project=YOUR_PROJECT_ID \ --repository-format=docker \ --location=us-central1 \ --description="GKE Quickstart sample app"
- 將目錄變更為您先前從 GitHub 複製 Cloud SQL 範例應用程式的位置。範例應用程式目錄包含範例應用程式的
pom.xml。 舉例來說,如要將目錄變更為範例應用程式的目錄,可以執行下列指令:cd ~/cloudshell_open/java-docs-samples/cloud-sql/mysql/servlet
-
執行
mvn指令,建構 Docker 容器並發布至 Artifact Registry。將 YOUR_PROJECT_ID 替換為專案 ID。mvn clean package com.google.cloud.tools:jib-maven-plugin:2.8.0:build \ -Dimage=us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql \ -DskipTests -Djib.to.credHelper=gcloud
Node.js
- 返回 Cloud Shell 編輯器,然後點選 Open Terminal,開啟 Cloud Shell 提示。
-
在 Cloud Shell 提示中,執行下列
gcloud artifacts repositories create指令,在 Artifact Registry 中建立名為 gke-cloud-sql-repo 的存放區,該存放區與叢集位於相同區域。將 YOUR_PROJECT_ID 替換為專案 ID。gcloud artifacts repositories create gke-cloud-sql-repo \ --project=YOUR_PROJECT_ID \ --repository-format=docker \ --location=us-central1 \ --description="GKE Quickstart sample app"
- 將目錄變更為您先前從 GitHub 複製 Cloud SQL 範例應用程式的位置。範例應用程式目錄包含範例應用程式的
Dockerfile。 舉例來說,如要將目錄變更為範例應用程式的目錄,可以執行下列指令:cd ~/cloudshell_open/nodejs-docs-samples/cloud-sql/mysql/mysql
- 執行下列
gcloud builds submit指令,建構 Docker 容器並發布至 Artifact Registry。將 YOUR_PROJECT_ID 替換為專案 ID。gcloud builds submit \ --tag us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql .
Python
- 返回 Cloud Shell 編輯器,然後點選 Open Terminal,開啟 Cloud Shell 提示。
-
在 Cloud Shell 提示中,執行下列
gcloud artifacts repositories create指令,在 Artifact Registry 中建立名為 gke-cloud-sql-repo 的存放區,該存放區與叢集位於相同區域。將 YOUR_PROJECT_ID 替換為專案 ID。gcloud artifacts repositories create gke-cloud-sql-repo \ --project=YOUR_PROJECT_ID \ --repository-format=docker \ --location=us-central1 \ --description="GKE Quickstart sample app"
- 將目錄變更為您先前從 GitHub 複製 Cloud SQL 範例應用程式的位置。範例應用程式目錄包含範例應用程式的
Dockerfile。 舉例來說,如要將目錄變更為範例應用程式的目錄,可以執行下列指令:cd ~/cloudshell_open/python-docs-samples/cloud-sql/mysql/sqlalchemy
- 執行下列
gcloud builds submit指令,建構 Docker 容器並發布至 Artifact Registry。將 YOUR_PROJECT_ID 替換為專案 ID。gcloud builds submit \ --tag us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql .
部署範例應用程式
清除所用資源
為了避免系統向您的 Google Cloud 帳戶收取本頁面所用資源的費用,請按照下列步驟操作。
-
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
- 選取
quickstart-instance執行個體,開啟「Instance details」(執行個體詳細資料) 頁面。 - 在頁面頂端的圖示列中,按一下 [刪除]。
- 在「Delete instance」(刪除執行個體) 對話方塊中輸入
quickstart-instance,然後按一下「Delete」(刪除) 以刪除執行個體。 -
在 Google Cloud 控制台中,前往「Google Kubernetes Engine」頁面。
- 按一下「
gke-cloud-sql-quickstart」服務名稱旁邊的核取方塊。 - 按一下 Google Kubernetes Engine 頁面頂端的「刪除」按鈕。
選用清除步驟
如果您未使用為本快速入門導覽課程建立的 Google Cloud 服務帳戶,可以將其移除。
-
前往 Google Cloud 控制台的「Service accounts」(服務帳戶) 頁面。
- 勾選名為「
gke-quickstart-service-account」的 IAM 帳戶核取方塊。 - 按一下「移除」並確認移除。
如果您未使用本快速入門導覽課程啟用的 API,可以停用這些 API。
- 本快速入門導覽課程中啟用的 API:
- Compute Engine API
- Cloud SQL Admin API
- Google Kubernetes Engine API
- Artifact Registry API
- Cloud Build API
前往 Google Cloud 控制台的「APIs」頁面。
選取要停用的 API,然後按一下「停用 API」按鈕。
後續步驟
您可以根據需求,進一步瞭解如何建立 Cloud SQL 執行個體。您也可以瞭解如何為 Cloud SQL 執行個體建立 MySQL 使用者和資料庫。
另請參閱 Cloud SQL 定價資訊。
請點選下列連結瞭解更多資訊:
此外,您也可以瞭解如何從其他 Google Cloud 應用程式連線至 Cloud SQL 執行個體:
