本文說明如何在 Kubernetes 上建立 Spanner Omni 部署作業。這項部署作業不會加密。如要快速設定測試或概念驗證環境來評估 Spanner Omni,建立未加密的部署作業是開始使用的最快方式,因為您不需要設定 mTLS 或其他安全措施。不過,由於存在未加密的網路流量和開放存取等安全風險,因此不建議在正式環境中使用這項設定。您可以選擇單一伺服器或跨多個區域的區域部署作業。
Spanner Omni 的預先發布版本不支援 TLS 加密,且會在您建立部署作業的 90 天後停止寫入資料。如要搶先體驗完整功能版本,請與 Google 聯絡。
事前準備
部署 Spanner Omni 前,請確認您的環境符合下列需求:
建立 Kubernetes 叢集。這項設定支援 Google Kubernetes Engine (GKE) 和 Amazon Elastic Kubernetes Service (Amazon EKS)。您可能需要自訂設定,才能在其他環境中運作。
確認 Kubernetes 叢集可以存取 Artifact Registry 構件,該構件會代管 Spanner Omni 容器。
安裝並設定
kubectl指令列工具和 Helm。如果您在 vSphere 虛擬化平台機器上設定 Kubernetes 環境,請在虛擬機器的
.vmx設定檔中加入monitor_control.virtual_rdtsc = FALSE,停用時間戳記計數器 (TSC) 虛擬化,確保 TrueTime 正常運作。確認環境符合 Spanner Omni 系統需求。
選擇部署拓撲。
準備 Helm 設定
建立 Helm 設定。詳情請參閱「建立 Helm 設定」。
建立部署作業
安裝 Helm 資訊套件,並進行特定覆寫。以下是常見部署作業的範例指令:
範例 1:在 GKE 的單一伺服器上執行 Spanner Omni,並使用監控堆疊
如要在 GKE 的單一伺服器上執行 Spanner Omni,並使用監控堆疊,請執行下列指令:
kubectl create ns monitoring
helm upgrade --install spanner-omni oci://us-central1-docker.pkg.dev/spanner-omni/helm-charts/spanner-omni --version 0.1.0 \
--set global.platform=gke \
--set deployment.singleServer=true \
--set monitoring.enabled=true \
--namespace spanner-ns \
--create-namespace
範例 2:在 GKE 的多部伺服器上執行 Spanner Omni
如要在 GKE 的單一可用區 (us-central1-a) 中,於多部伺服器上執行 Spanner Omni,請執行下列指令:
kubectl create ns monitoring
helm upgrade --install spanner-omni oci://us-central1-docker.pkg.dev/spanner-omni/helm-charts/spanner-omni --version 0.1.0 \
--set global.platform=gke \
--set deployment.replicasPerZone=5 \
--set deployment.rootServersPerZone=3 \
--set-json 'locations=[{"name":"us-central1","zones":[{"name":"us-central1-a","shortName":"a"}]}]' \
--set monitoring.enabled=true \
--namespace spanner-ns \
--create-namespace
每個區域的根伺服器數量必須是介於 1 到 9 之間的奇數 (含),以確保一致性仲裁。如果伺服器數量為偶數,部署作業可能會失敗。設定區域時,請將伺服器指定為根伺服器。建議您使用一個可用區進行開發或測試,並使用三個可用區來確保正式環境的高可用性。
範例 3:高可用性的區域部署
這項部署作業會保留三份資料副本,因此即使某個區域發生服務中斷問題,Spanner Omni 仍可繼續運作。如要建立這項部署作業,請執行下列指令:
kubectl create ns monitoring
helm upgrade --install spanner-omni oci://us-central1-docker.pkg.dev/spanner-omni/helm-charts/spanner-omni --version 0.1.0 \
--set global.platform=gke \
--set-json 'locations=[{"name":"us-central1","zones":[{"name":"us-central1-a","shortName":"a"},{"name":"us-central1-c","shortName":"b"},{"name":"us-central1-d","shortName":"c"}]}]' \
--set monitoring.enabled=true \
--namespace spanner-ns \
--create-namespace
檢查 Pod 的狀態
如要檢查 Pod 的狀態,請執行下列指令:
kubectl get pods --watch --namespace spanner-ns
輸出內容範例:
NAME READY STATUS RESTARTS AGE
spanner-a-0 1/1 Running 0 4m
spanner-a-1 1/1 Running 0 4m
spanner-a-2 1/1 Running 0 4m
spanner-a-3 1/1 Running 0 4m
spanner-a-4 1/1 Running 0 4m
spanner-b-0 1/1 Running 0 4m
spanner-b-1 1/1 Running 0 4m
spanner-b-2 1/1 Running 0 4m
spanner-b-3 1/1 Running 0 4m
spanner-b-4 1/1 Running 0 4m
spanner-c-0 1/1 Running 0 4m
spanner-c-1 1/1 Running 0 4m
spanner-c-2 1/1 Running 0 4m
spanner-c-3 1/1 Running 0 4m
spanner-c-4 1/1 Running 0 4m
與 Spanner Omni 互動
Pod 執行完畢後,您可以使用 Spanner Omni CLI 連線至部署作業並與其互動。
執行下列指令來取得服務位址:
kubectl get service spanner -n spanner-nsEXTERNAL-IP:PORT是部署的 DEPLOYMENT_ENDPOINT。如果尚未下載 Spanner Omni CLI,請從
spanner-omniCloud Storage 值區下載。使用 Spanner Omni CLI 建立 GoogleSQL 或 PostgreSQL 資料庫,並與之互動。
GoogleSQL
如要建立及操作 GoogleSQL 資料庫,請執行下列指令:
spanner databases create DATABASE_NAME --deployment_endpoint DEPLOYMENT_ENDPOINT spanner sql --database=DATABASE_NAME --deployment_endpoint DEPLOYMENT_ENDPOINTPostgreSQL
如要建立 PostgreSQL 資料庫並與之互動,請執行下列指令:
spanner databases create POSTGRESQL_DATABASE_NAME --database_dialect POSTGRESQL --deployment_endpoint DEPLOYMENT_ENDPOINT spanner sql --database=POSTGRESQL_DATABASE_NAME --deployment_endpoint DEPLOYMENT_ENDPOINT ``` You can also interact with a PostgreSQL database by following the instructions in [Connect using PGAdapter](/spanner-omni/pgadapter) to configure PGAdapter and use PostgreSQL tools, such as `psql`, with your PostgreSQL-dialect databases.
觀察部署作業 (選用)
您可以透過 monitoring.enabled=true 設定 Spanner Omni,將 Prometheus 設定為擷取 Spanner Omni 匯出的指標。這有助於分析及偵錯部署作業的問題。詳情請參閱:
如要取得服務詳細資料,請執行下列指令:
# Prometheus service details. Default port is 9090.
kubectl get service prometheus-service -n monitoring
# Grafana service details. Default port is 3000.
kubectl get service grafana -n monitoring