在 Kubernetes 上创建部署

本文档介绍了如何在 Kubernetes 上创建 Spanner Omni 部署。此部署未加密。如果您想快速设置测试或概念验证环境来评估 Spanner Omni,那么创建不含加密功能的部署是快速入门的最佳方式,因为这样无需配置 mTLS 或其他安全措施。不过,由于存在安全风险(例如未加密的网络流量和开放式访问),不建议在生产环境中使用此配置。您可以选择单服务器部署或跨多个可用区的区域级部署。

准备工作

在部署 Spanner Omni 之前,请确保您的环境满足以下要求:

  • 创建 Kubernetes 集群。该配置支持 Google Kubernetes Engine (GKE) 和 Amazon Elastic Kubernetes Service (Amazon EKS)。您可能需要自定义配置,才能在其他环境中运行。

  • 确保 Kubernetes 集群可以访问托管 Spanner Omni 容器的 Artifact Registry 制品。

  • 安装并配置 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-docker.pkg.dev/spanner-omni/charts/spanner-omni --version 1.0.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-docker.pkg.dev/spanner-omni/charts/spanner-omni --version 1.0.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-docker.pkg.dev/spanner-omni/charts/spanner-omni --version 1.0.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

后续步骤