1. 簡介
在本程式碼實驗室中,您將瞭解如何在 Google Kubernetes Engine (GKE) Autopilot 叢集或自己的 Kubernetes 叢集上,安裝 AlloyDB Omni Kubernetes 運算子 (容器自動調度管理工具),並管理完整的端對端資料庫生命週期工作流程和關鍵使用者歷程 (CUJ)。
AlloyDB Omni 是 AlloyDB 的可下載版本,可在任何位置執行,包括地端部署環境、Google Cloud 或邊緣運算。AlloyDB Omni 搭配容器自動調度管理工具,可自動執行高可用性、自動容錯移轉、自我修復、滾動式維護 (停機時間極短)、連線集區、自動備份和時間點復原。
選擇環境路徑
您可以透過下列任一方式完成本程式碼實驗室:
- 路徑 1:擁有 Google Cloud 帳戶 (GKE Autopilot) - 使用 Google Cloud Shell 或 Google Cloud 控制台,佈建全代管 GKE Autopilot 叢集。
- 路徑 2:沒有 Google Cloud 帳戶 (自備 Kubernetes 叢集):使用現有的 Kubernetes 叢集 (1.21 以上版本),並在工作站上設定
kubectl和helm。無須 Google Cloud 帳戶或gcloudCLI。
必要條件
- 對 Kubernetes 概念有基本瞭解 (
kubectl、Helm、自訂資源定義)。 - 路徑 1 (Google Cloud / GKE Autopilot):
- 已啟用計費功能的 Google Cloud 專案。
- 可存取 Google Cloud Shell 或已設定
gcloud、kubectl和helm的工作站。
- 路徑 2 (自備 Kubernetes 叢集):
- 執行 1.21 以上版本的 Kubernetes 叢集,並具備預設
StorageClass,可動態佈建 PersistentVolume。 - worker 節點執行 Linux 核心 4.18 以上版本,並啟用 cgroup v2 (x86-64/AMD64),且整個叢集至少有 8 個 vCPU 和 24 GiB 的可分配 RAM。
- 已設定
kubectl和helm的工作站,並已連線至叢集。
- 執行 1.21 以上版本的 Kubernetes 叢集,並具備預設
課程內容
- 如何佈建 GKE Autopilot 叢集 (路徑 1) 或驗證現有的 Kubernetes 叢集 (路徑 2)。
- 如何透過 Helm 安裝 cert-manager 和 AlloyDB Omni Kubernetes 運算子。
- 如何部署單一執行個體 AlloyDB Omni
DBCluster。 - 如何透過同步待命功能擴充至高可用性 (HA),並啟用唯讀待命功能。
- 如何設定排定的自動備份,將資料備份至本機存放區 (以及路徑 1 的 Google Cloud Storage,此為選用)。
- 如何執行隨選備份,並驗證資料是否還原至先前的狀態。
- 如何對新的複製資料庫叢集執行時間點復原 (PITR)。
- 如何部署 PgBouncer 連線集區,以便調度用戶端連線資源。
- 如何部署 pgAdmin4,以視覺化方式管理及查詢資料庫。
- 如何執行低停機時間維護 (LDTM),調整 CPU 和記憶體資源。
軟硬體需求
- 路徑 1:Google Cloud Shell,預先安裝
gcloud、kubectl和helm公用程式。 - 路徑 2:已安裝
kubectl和helm,並連線至 Kubernetes 叢集的終端機。 - 如需參考文件,請參閱官方 AlloyDB Omni 部署指南。
2. 設定和需求
如果您使用 Google Cloud 帳戶建立 GKE Autopilot 叢集,請選擇路徑 1;如果您使用自己的 Kubernetes 叢集,但沒有 Google Cloud 帳戶,請選擇路徑 2。
路徑 1:設定 Google Cloud 雲端專案 (GKE Autopilot)
- 在 Google Cloud 控制台中,選取或建立 Google Cloud 專案。
- 確認專案已啟用計費功能。瞭解如何驗證帳單狀態。
- 如要開啟 Google Cloud Shell,請按一下 Google Cloud 控制台右上角的「啟用 Cloud Shell」圖示,或前往 shell.cloud.google.com。Cloud Shell 會佈建已載入
gcloud、kubectl和helm的運算環境。 - 將專案 ID 設為環境變數,並設定
gcloud:
export PROJECT_ID="<YOUR_PROJECT_ID>"
export REGION="us-central1"
export CLUSTER_NAME="omni-autopilot-cluster"
gcloud config set project ${PROJECT_ID}
gcloud config set compute/region ${REGION}
- 啟用 GKE 和 Cloud Storage 必要的 Google Cloud API:
gcloud services enable container.googleapis.com \
storage.googleapis.com \
cloudresourcemanager.googleapis.com
路徑 2:自備叢集設定 (沒有 Google Cloud 帳戶)
如果您沒有 Google Cloud 帳戶,且使用自己的 Kubernetes 叢集,請先在終端機中確認下列必要條件,再繼續操作:
- 確認
kubectl和helm可以連上叢集,且節點為Ready:
kubectl get nodes
helm version
- 確認叢集有標示為
(default)的預設StorageClass。DBCluster和BackupPlan資訊清單會使用叢集的預設StorageClass動態佈建 PersistentVolumeClaim:
kubectl get storageclass
如果沒有任何 StorageClass 標示為 (default),請先指定一個預設值,再繼續操作:
kubectl patch storageclass <YOUR_STORAGE_CLASS_NAME> \
-p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
- 確認 worker 節點符合運算子的硬體和 OS 需求:
- OS 和核心:Linux 核心 4.18 以上版本,且在 x86-64/AMD64 節點上啟用 cgroup v2。
- 叢集容量:工作站節點至少要有 8 個 vCPU 和 24 GiB 的可分配記憶體,才能同時執行高可用性資料庫執行個體 (在步驟 12 調整為 2 個 vCPU 和 8 GiB)、PITR 複製執行個體、PgBouncer 和 pgAdmin4。
- 網路存取權:可連上網際網路,從
gcr.io/alloydb-omni、quay.io/jetstack和docker.io提取容器映像檔。
3. 佈建或連線至 Kubernetes 叢集
如果您選擇路徑 1 (Google Cloud 帳戶),GKE Autopilot 會提供全代管的 Kubernetes 模式,由 Google 管理叢集基礎架構、節點佈建和自動調度資源,您不需手動操作。您可以使用 Google Cloud CLI 或 Google Cloud 控制台建立 GKE Autopilot 叢集。
選項 A:透過 CLI 建立 GKE Autopilot 叢集 (路徑 1)
在 Cloud Shell 中執行下列 gcloud 指令:
gcloud container clusters create-auto ${CLUSTER_NAME} \
--region=${REGION} \
--project=${PROJECT_ID}
方法 B:透過控制台建立 GKE Autopilot 叢集 (路徑 1)
- 在 Google Cloud 控制台中開啟「Kubernetes Engine」。
- 按一下左側導覽窗格中的「Clusters」(叢集)。
- 點選「建立」。
- 在「GKE Autopilot」部分,按一下「設定」。
- 指定叢集名稱 (例如
omni-autopilot-cluster),並選取偏好的區域 (us-central1)。 - 點選「建立」。
驗證叢集連線能力 (路徑 1 和路徑 2)
如果您在路徑 1 建立了 GKE Autopilot 叢集,請設定 kubectl 憑證:
gcloud container clusters get-credentials ${CLUSTER_NAME} --region=${REGION} --project=${PROJECT_ID}
針對路徑 1 和路徑 2,驗證與 Kubernetes 叢集的連線能力:
kubectl get nodes
4. 安裝 Operator 必要條件和 Operator
AlloyDB Omni Kubernetes 運算子需要 cert-manager,才能管理准入 Webhook TLS 憑證。
1. 安裝 cert-manager
使用官方 Helm 圖表安裝 cert-manager:
helm install \
cert-manager oci://quay.io/jetstack/charts/cert-manager \
--version v1.21.2 \
--namespace cert-manager \
--create-namespace \
--set crds.enabled=true \
--set global.leaderElection.namespace=cert-manager
確認 cert-manager Pod 正在執行:
kubectl wait --namespace cert-manager \
--for=condition=ready pod \
--selector=app.kubernetes.io/instance=cert-manager \
--timeout=120s
2. 安裝 AlloyDB Omni Operator
使用 Helm 將 AlloyDB Omni Kubernetes 運算子部署至 alloydb-omni-system 命名空間:
helm install alloydbomni-operator oci://gcr.io/alloydb-omni/alloydbomni-operator \
--version 1.8.2 \
--create-namespace \
--namespace alloydb-omni-system \
$(helm install --help | grep -q -- '--rollback-on-failure' && echo '--rollback-on-failure' || echo '--atomic') \
--timeout 5m
確認運算子 Pod 運作正常且正在執行:
kubectl get pods -n alloydb-omni-system
5. 建立單一執行個體資料庫叢集
在這個步驟中,您將建立專屬的應用程式命名空間,並部署單一執行個體 AlloyDB Omni DBCluster。
1. 建立命名空間和管理員憑證 Secret
建立資料庫工作負載的命名空間 omni-demo:
kubectl create namespace omni-demo
建立 Kubernetes Secret,儲存預設 postgres 資料庫管理員使用者的密碼:
kubectl apply -n omni-demo -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: db-pw-adbo
type: Opaque
data:
adbo: "Q2hhbmdlTWUxMjM=" # Base64 for "ChangeMe123"
EOF
2. 部署單一執行個體 DBCluster
建立單一執行個體 DBCluster 資訊清單:
kubectl apply -n omni-demo -f - <<EOF
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
name: adbo
spec:
databaseVersion: "18.3.0"
primarySpec:
adminUser:
passwordRef:
name: db-pw-adbo
resources:
cpu: 1
memory: 4Gi
disks:
- name: DataDisk
size: 10Gi
EOF
3. 驗證叢集是否就緒
監控叢集狀態,直到 DBCLUSTERPHASE 達到 DBClusterReady。初始佈建作業可能需要幾分鐘才能完成:運算子必須建立永久磁碟區並提取資料庫映像檔,在 GKE Autopilot 上,可能需要先佈建新節點。
kubectl get dbcluster -n omni-demo -w
當 DBCLUSTERPHASE 達到 DBClusterReady 時,按下 Ctrl+C 即可退出監看模式。
輸出內容範例:
NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE HAREADYSTATUS HAREADYREASON
adbo 10.128.0.45 Ready DBClusterReady
請記下 PRIMARYENDPOINT IP 位址,這是讀寫 Kubernetes Service al-adbo-rw-ilb 的 ClusterIP。AlloyDB Omni 會監聽預設的 PostgreSQL 通訊埠 5432。
檢查運算子從單一 DBCluster 資訊清單中協調的資源,包括資料庫 Pod、DataDisk PersistentVolumeClaim 和 al-adbo-rw-ilb 服務:
kubectl get pods,svc,pvc -n omni-demo
6. 升級至高可用性 (HA) 並啟用唯讀待命
AlloyDB Omni 內建高可用性 (HA) 功能,可串流複製、自動監控健康狀態、自動容錯移轉,以及提供唯讀副本。
1. 啟用高可用性和唯讀副本功能
更新 DBCluster 規格,設定 1 個待命執行個體,並啟用唯讀待命轉送功能:
kubectl patch dbcluster adbo -n omni-demo --type=merge -p '{
"spec": {
"availability": {
"numberOfStandbys": 1,
"enableStandbyAsReadReplica": true
}
}
}'
2. 驗證高可用性穩定性
等待待命執行個體佈建完成,並達到良好的串流複製狀態 (HAREADYSTATUS 達到 True,HAREADYREASON 達到 Ready),然後按下 Ctrl+C 退出監控模式:
kubectl get dbcluster adbo -n omni-demo -w
檢查 HAReady 狀態條件:
kubectl get dbcluster.alloydbomni.dbadmin.goog adbo -n omni-demo -o jsonpath='{.status.conditions[?(@.type == "HAReady")]}'
確認讀寫和唯讀端點皆已發布:
kubectl describe dbcluster adbo -n omni-demo | grep -A 8 "Endpoints:"
輸出內容範例:
Endpoints:
Name: Read-Write
Value: 10.128.0.45:5432
Name: Read-Only
Value: 10.128.0.46:5432
讀寫端點 (al-adbo-rw-ilb 服務) 會轉送至主要資料庫,唯讀端點 (al-adbo-ro-ilb 服務) 則會將讀取查詢分配至待命執行個體。
7. 設定自動備份方案 (本機和 GCS)
AlloyDB Omni 透過 BackupPlan 自訂資源提供實體備份和 WAL 封存功能。您可以設定備份保留、自動化 Cron 排程和備份目標 (本機永久磁碟區或 Google Cloud Storage)。
1. 建立本機備份方案
建立 BackupPlan,將備份寫入附加至資料庫執行個體的本機 Kubernetes 儲存空間:
kubectl apply -n omni-demo -f - <<EOF
apiVersion: alloydbomni.dbadmin.goog/v1
kind: BackupPlan
metadata:
name: backupplan-local
spec:
dbclusterRef: adbo
backupSchedules:
full: "0 2 * * *" # Daily at 02:00 UTC
incremental: "0 */4 * * *" # Every 4 hours
backupRetainDays: 7
EOF
確認本機 BackupPlan 已準備就緒:
kubectl get backupplan backupplan-local -n omni-demo
等待 PHASE 回報 Ready,且 NEXTBACKUPTIME 已排定。
2. 建立 GCS 備份計畫 (路徑 1:僅限 Google Cloud - 選用)
如要將備份儲存在外部的 Google Cloud Storage bucket,請建立 GCS bucket、設定服務帳戶金鑰密鑰,並套用雲端 BackupPlan。
- 建立 Cloud Storage bucket:
export BUCKET_NAME="${PROJECT_ID}-omni-backups"
gcloud storage buckets create gs://${BUCKET_NAME} --location=${REGION}
- 建立具備 Storage 物件管理員權限的服務帳戶,並為其建立金鑰:
export SA_NAME="omni-backup-sa"
gcloud iam service-accounts create ${SA_NAME} --display-name="AlloyDB Omni Backup SA"
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/storage.objectAdmin"
gcloud iam service-accounts keys create /tmp/gcs-key.json \
--iam-account="${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
- 在 Kubernetes 命名空間中建立 Secret:
kubectl create secret generic gcs-backup-secret \
--from-file=key.json=/tmp/gcs-key.json \
-n omni-demo
rm /tmp/gcs-key.json
- 套用 GCS
BackupPlan資訊清單。key欄位是值區中的資料夾,運算子會將備份寫入其中。開頭必須是/。
kubectl apply -n omni-demo -f - <<EOF
apiVersion: alloydbomni.dbadmin.goog/v1
kind: BackupPlan
metadata:
name: backupplan-gcs
spec:
dbclusterRef: adbo
backupSchedules:
full: "0 1 * * *"
incremental: "0 */6 * * *"
backupRetainDays: 14
backupLocation:
type: GCS
gcsOptions:
bucket: ${BUCKET_NAME}
key: /omni-backups/adbo
secretRef:
name: gcs-backup-secret
namespace: omni-demo
EOF
驗證 GCS BackupPlan 狀態:
kubectl get backupplan backupplan-gcs -n omni-demo
等待 PHASE 回報 Ready,且 NEXTBACKUPTIME 已排定。
8. 插入資料、觸發備份及測試還原
在這個步驟中,您會將初始資料填入主要資料庫、觸發隨選手動備份、新增後續資料,並從備份還原,證明資料可復原。
1. 填入初始資料
執行臨時 PostgreSQL 用戶端 Pod,透過讀寫 Service al-adbo-rw-ilb 以 postgres 使用者身分連線至資料庫:
kubectl run pg-client --rm -i --tty --image=postgres:16 --restart=Never -n omni-demo -- \
psql -h al-adbo-rw-ilb -U postgres -d postgres -c "
CREATE TABLE customers (id SERIAL PRIMARY KEY, name TEXT, created_at TIMESTAMPTZ DEFAULT pg_catalog.now());
INSERT INTO customers (name) VALUES ('Alpha Co'), ('Beta LLC');
SELECT * FROM customers;
"
系統提示您輸入密碼時,請輸入 ChangeMe123。這是您在步驟 5 中,於 db-pw-adbo Secret 進行 Base64 編碼的密碼。
2. 觸發隨選備份
手動建立參照本機 BackupPlan 的 Backup 自訂資源:
kubectl apply -n omni-demo -f - <<EOF
apiVersion: alloydbomni.dbadmin.goog/v1
kind: Backup
metadata:
name: initial-customer-backup
spec:
dbclusterRef: adbo
backupPlanRef: backupplan-local
manual: true
EOF
監控備份進度:
kubectl get backup initial-customer-backup -n omni-demo -w
等待 PHASE 轉換為 Succeeded。
3. Mutate Data (Add New Records)
在備份後插入其他記錄:
kubectl run pg-client --rm -i --tty --image=postgres:16 --restart=Never -n omni-demo \
--env="PGPASSWORD=ChangeMe123" -- \
psql -h al-adbo-rw-ilb -U postgres -d postgres -c "
INSERT INTO customers (name) VALUES ('Gamma Inc'), ('Delta Corp');
SELECT * FROM customers;
"
資料庫現在包含 4 個資料列。
4. 從備份還原
觸發還原作業,回到 initial-customer-backup 中擷取的狀態:
kubectl apply -n omni-demo -f - <<EOF
apiVersion: alloydbomni.dbadmin.goog/v1
kind: Restore
metadata:
name: restore-to-initial
spec:
sourceDBCluster: adbo
backup: initial-customer-backup
EOF
監控還原作業:
kubectl get restore restore-to-initial -n omni-demo -w
等待 PHASE 達到 ProvisionSucceeded,並確認 DBCluster 恢復為 DBClusterReady:
kubectl get dbcluster adbo -n omni-demo -w
5. 驗證還原的資料狀態
查詢 customers 資料表,確認只有備份前的記錄:
kubectl run pg-client --rm -i --tty --image=postgres:16 --restart=Never -n omni-demo \
--env="PGPASSWORD=ChangeMe123" -- \
psql -h al-adbo-rw-ilb -U postgres -d postgres -c "
SELECT * FROM customers;
"
輸出結果確認只有 2 列 (Alpha Co 和 Beta LLC),表示資料庫已還原至備份時的狀態。
9. 將資料庫復原至特定時間點 (PITR) 並複製
時間點復原 (PITR) 功能可使用基礎備份和 WAL 串流記錄,將資料庫還原至復原期間內的任何一秒,並將還原的資料佈建至新的複製資料庫叢集。
由於運算子會持續封存預寫記錄 (WAL),因此 PITR 可讓您從意外的人為或應用程式錯誤中復原,例如下午 2:15:00 發生非預期的 DELETE 或 DROP TABLE,只要將資料庫複製到錯誤發生前的確切秒數 (下午 2:14:59),即可復原,而且不會影響原始叢集。
1. 記錄目前的時間戳記並變動資料
擷取目前的世界標準時間戳記:
export PITR_TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
echo "PITR Target Timestamp: ${PITR_TIMESTAMP}"
插入測試記錄,代表在這個時間戳記之後進行的不必要修改:
kubectl run pg-client --rm -i --tty --image=postgres:16 --restart=Never -n omni-demo \
--env="PGPASSWORD=ChangeMe123" -- \
psql -h al-adbo-rw-ilb -U postgres -d postgres -c "
INSERT INTO customers (name) VALUES ('Unwanted Record Post-Timestamp');
SELECT * FROM customers;
"
2. 執行時間點還原
套用 Restore 自訂資源,設定 pointInTime 和 clonedDBClusterConfig:
kubectl apply -n omni-demo -f - <<EOF
apiVersion: alloydbomni.dbadmin.goog/v1
kind: Restore
metadata:
name: restore-pitr-clone
spec:
sourceDBCluster: adbo
pointInTime: "${PITR_TIMESTAMP}"
clonedDBClusterConfig:
dbclusterName: adbo-cloned
EOF
監控還原作業,直到 PHASE 達到 ProvisionSucceeded:
kubectl get restore restore-pitr-clone -n omni-demo -w
3. 驗證複製的資料庫
還原完成後,請等待新的複製 DBCluster 達到 DBClusterReady (按下 Ctrl+C 即可退出監控模式):
kubectl get dbcluster adbo-cloned -n omni-demo -w
透過讀寫服務 al-adbo-cloned-rw-ilb 查詢複製的資料庫 adbo-cloned:
kubectl run pg-client --rm -i --tty --image=postgres:16 --restart=Never -n omni-demo \
--env="PGPASSWORD=ChangeMe123" -- \
psql -h al-adbo-cloned-rw-ilb -U postgres -d postgres -c "
SELECT * FROM customers;
"
請注意,複製的叢集中沒有 Unwanted Record Post-Timestamp,表示已準確復原至目標時間點。
10. 部署 PgBouncer 連線集區
連線集區可減少資料庫記憶體負擔和連線延遲時間。operator 會透過 PgBouncer 自訂資源,以原生方式管理 PgBouncer 執行個體。
PostgreSQL 會為每個用戶端連線建立獨立的作業系統程序,因此來自網路服務、微服務或 AI 代理的數百個並行連線,可能會耗盡資料庫記憶體。PgBouncer 位於資料庫前端,會將多個短期用戶端連線 (最多 max_client_conn 個) 多工處理至一小組長期 PostgreSQL 伺服器連線 (每個使用者/資料庫組合 default_pool_size 個,上限為 max_db_connections 個)。
1. 部署 PgBouncer
部署 2 個副本的 PgBouncer 集區,並連結至叢集 adbo:
kubectl apply -n omni-demo -f - <<EOF
apiVersion: alloydbomni.dbadmin.goog/v1
kind: PgBouncer
metadata:
name: omni-pgbouncer
spec:
dbclusterRef: adbo
allowSuperUserAccess: true
replicaCount: 2
parameters:
pool_mode: transaction
default_pool_size: "20"
max_client_conn: "500"
max_db_connections: "100"
podSpec:
resources:
cpu: 1
memory: 1Gi
image: "gcr.io/alloydb-omni/operator/g-pgbouncer:1.4.0"
serviceOptions:
type: ClusterIP
EOF
2. 驗證 PgBouncer 狀態
觀察 PgBouncer 狀態,直到 PHASE 變成 Ready:
kubectl get pgbouncer omni-pgbouncer -n omni-demo -w
檢查執行中的 PgBouncer Pod 和服務:
kubectl get pods -n omni-demo
kubectl get svc al-omni-pgbouncer-pgb-svc -n omni-demo
3. 透過 PgBouncer 連線
透過通訊埠 6432 上的 PgBouncer 服務連結用戶端:
kubectl run pg-client --rm -i --tty --image=postgres:16 --restart=Never -n omni-demo \
--env="PGPASSWORD=ChangeMe123" -- \
psql -h al-omni-pgbouncer-pgb-svc -p 6432 -U postgres -d postgres -c "
SELECT pg_catalog.version();
SELECT * FROM customers;
"
PgBouncer 會將查詢順暢地代理至主要 AlloyDB Omni 資料庫。
11. 部署 pgAdmin4 以存取資料庫
您可以直接在 Kubernetes 叢集內執行 pgAdmin4,提供網頁式管理控制台,用於查詢、管理及檢查 AlloyDB Omni。
1. 透過 Helm 安裝 pgAdmin4
在 omni-demo 命名空間中安裝 pgadmin4:
helm install my-pgadmin oci://docker.io/dpage/pgadmin4-helm \
--namespace omni-demo \
--set ingress.enabled=false \
--set image.tag=latest \
--set auth.email="admin@example.com" \
--set auth.password="AdminPassword123"
無論 Helm 版本名稱 (my-pgadmin) 為何,這個圖表都會將 Kubernetes 資源命名為 pgadmin4 (Deployment、Service、PersistentVolumeClaim),並將 Pod 標示為 app=pgadmin4。
確認 pgAdmin4 Pod 正在運作:
kubectl wait --namespace omni-demo \
--for=condition=ready pod \
--selector=app=pgadmin4 \
--timeout=300s
2. 轉送通訊埠並存取網頁 UI
將 pgAdmin4 通訊埠轉送至本機環境或 Cloud Shell:
kubectl port-forward service/pgadmin4 5050:80 -n omni-demo
只要您使用 pgAdmin4 網頁版 UI,kubectl port-forward 就會持續在前景執行。開啟第二個終端機 (或新的 Cloud Shell 分頁) 來執行其他指令,準備好進行下一步時,請在這個終端機中按下 Ctrl+C。
開啟 pgAdmin4 網頁介面:
- 路徑 1 (Google Cloud Shell):點選右上角選單中的「網頁預覽」按鈕,選取「變更通訊埠」,輸入
5050,然後點選「變更並預覽」。 - 路徑 2 (本機工作站):在
kubectl port-forward指令執行期間,透過瀏覽器開啟http://localhost:5050。
登入方式:
- 電子郵件地址:
admin@example.com - 密碼:
AdminPassword123
3. 在 pgAdmin4 中註冊 AlloyDB Omni
- 在 pgAdmin4 中,依序在「Servers」上按一下滑鼠右鍵 >「Register」 >「Server...」。
- 在「一般」分頁下方:
- Name (名稱):
AlloyDB Omni Primary
- Name (名稱):
- 在「連線」分頁下:
- Host name/address:
al-adbo-rw-ilb.omni-demo.svc.cluster.local(PgBouncer 則為al-omni-pgbouncer-pgb-svc.omni-demo.svc.cluster.local) - 通訊埠:
5432(PgBouncer 為6432) - 維護資料庫:
postgres - 使用者名稱:
postgres - 密碼:
ChangeMe123
- Host name/address:
- 按一下「儲存」,然後驗證使用中的資料庫工作階段和資料表。
12. 透過低停機時間維護 (LDTM) 調整 CPU 和記憶體
在正式資料庫中垂直擴充運算和記憶體資源時,傳統更新會導致資料庫重新啟動,造成服務中斷。AlloyDB Omni 提供低停機時間維護 (LDTM) 功能,可透過副本推出滾動式更新,盡可能減少應用程式中斷。
1. 啟用 LDTM 註解
為 DBCluster 加上註解,啟用 LDTM 進行更新:
kubectl annotate dbclusters.alloydbomni.dbadmin.goog adbo -n omni-demo dbcluster.dbadmin.goog/enableLDTM=true --overwrite
2. 調整 CPU 和記憶體資源
將主要資源從 cpu: 1, memory: 4Gi 更新為 cpu: 2, memory: 8Gi:
kubectl patch dbcluster adbo -n omni-demo --type=merge -p '{
"spec": {
"primarySpec": {
"resources": {
"cpu": 2,
"memory": "8Gi"
}
}
}
}'
3. 監控 LDTM 擴充進度
監控滾動式更新和待命切換至主要執行個體的條件:
kubectl get dbcluster adbo -n omni-demo -o yaml | grep -A 5 -B 2 "LDTMScalingInProgress"
觀察 Pod 順利滾動:
kubectl get pods -n omni-demo -w
LDTM 會先準備更新後的待命執行個體、驗證串流複製作業、執行快速切換,並在不中斷服務的情況下更新其餘執行個體。
確認更新後的資源分配:
kubectl get dbcluster adbo -n omni-demo -o jsonpath='{.spec.primarySpec.resources}'
13. 清除資源
為釋出叢集容量,並避免 Google Cloud 帳戶產生不必要的費用,請清除本程式碼實驗室期間佈建的資源。
如果您是在新的終端機工作階段 (路徑 1) 執行清理作業,先前步驟中的環境變數就不會再設定。使用先前的值重新匯出:
export PROJECT_ID="<YOUR_PROJECT_ID>"
export REGION="us-central1"
export CLUSTER_NAME="omni-autopilot-cluster"
export BUCKET_NAME="${PROJECT_ID}-omni-backups"
export SA_NAME="omni-backup-sa"
gcloud config set project ${PROJECT_ID}
1. 刪除資料庫工作負載 (路徑 1 和路徑 2)
將兩個叢集標示為已刪除,以便通過准入 Webhook 檢查,等待運算子移除 DBCluster 資源,然後刪除命名空間:
kubectl patch dbcluster adbo -n omni-demo --type=merge -p '{"spec":{"isDeleted":true}}'
kubectl patch dbcluster adbo-cloned -n omni-demo --type=merge -p '{"spec":{"isDeleted":true}}'
kubectl wait --for=delete dbcluster/adbo dbcluster/adbo-cloned -n omni-demo --timeout=300s
kubectl delete namespace omni-demo
如果您使用自己的 Kubernetes 叢集 (路徑 2),且想移除 AlloyDB Omni operator 和 cert-manager:
helm uninstall alloydbomni-operator -n alloydb-omni-system
kubectl delete namespace alloydb-omni-system
helm uninstall cert-manager -n cert-manager
kubectl delete namespace cert-manager
2. 刪除 GCS bucket 和 IAM 服務帳戶 (僅限路徑 1)
如果您在路徑 1 建立了 Google Cloud Storage bucket 和服務帳戶:
gcloud storage rm --recursive gs://${BUCKET_NAME}
gcloud projects remove-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/storage.objectAdmin"
gcloud iam service-accounts delete ${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com --quiet
3. 刪除 GKE 叢集 (僅限路徑 1)
如果您在路徑 1 佈建 GKE Autopilot 叢集:
gcloud container clusters delete ${CLUSTER_NAME} --region=${REGION} --quiet
14. 恭喜
恭喜!您已完成「Kubernetes 中的 AlloyDB Omni」程式碼實驗室。
涵蓋內容
- 佈建 GKE Autopilot 叢集 (路徑 1),或準備現有的 Kubernetes 叢集 (路徑 2)。
- 已透過 Helm 部署
cert-manager和 AlloyDB Omni Kubernetes 運算子。 - 部署單一執行個體 AlloyDB Omni
DBCluster。 - 將叢集升級為高可用性 (HA) 叢集,並啟用同步待命和唯讀待命轉送功能。
- 為本機永久儲存空間和 Google Cloud Storage (GCS) 建立自動化
BackupPlan資源。 - 執行隨選備份,並驗證資料庫還原作業。
- 執行時間點復原 (PITR),將資料還原至新的複製資料庫叢集。
- 部署
PgBouncer連線集區,以便擴充用戶端連線。 - 部署並連結
pgAdmin4,以便管理資料庫。 - 執行低停機時間維護 (LDTM),動態調度運算和記憶體資源。
後續步驟
- 探索多叢集環境中的 AlloyDB Omni 災難復原 (DR)。
- 進一步瞭解 AlloyDB Omni AI 和 pgvector 功能。