在 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 集群可以访问托管 Spanner Omni 容器的 Artifact Registry 制品。

  • 安装并配置 kubectl命令行工具Helm

  • 如果您在 vSphere 虚拟化平台机器上设置 Kubernetes 环境,请通过将 monitor_control.virtual_rdtsc = FALSE 添加到虚拟机的 .vmx 配置文件来停用时间戳计数器 (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 之间的奇数(含 1 和 9),以确保一致性的法定人数。如果服务器数量是偶数,部署可能会失败。配置可用区时,请将服务器指定为根服务器。我们建议您使用 1 个用于开发或测试,使用 3 个用于高可用性生产可用区。

示例 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.
    

观察部署(可选)

您可以将 Spanner Omni 设置为 monitoring.enabled=true,以将 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

后续步骤