在 Kubernetes 上建立部署作業

本文說明如何在 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 連線至部署作業並與其互動。

  1. 執行下列指令來取得服務位址:

    kubectl get service spanner -n spanner-ns
    

    EXTERNAL-IP:PORT 是部署的 DEPLOYMENT_ENDPOINT

  2. 如果尚未下載 Spanner Omni CLI,請從 spanner-omni Cloud Storage 值區下載。

    前往 Spanner Omni 值區

  3. 使用 Spanner Omni CLI 建立 GoogleSQL 或 PostgreSQL 資料庫,並與之互動。

    GoogleSQL

    如要建立及操作 GoogleSQL 資料庫,請執行下列指令:

    spanner databases create DATABASE_NAME --deployment_endpoint DEPLOYMENT_ENDPOINT
    spanner sql --database=DATABASE_NAME --deployment_endpoint DEPLOYMENT_ENDPOINT
    

    PostgreSQL

    如要建立 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

後續步驟