本文档介绍了如何在 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 连接到部署并与之互动。
运行以下命令以获取服务地址:
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.
观察部署(可选)
您可以将 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