本页介绍了在在您自己的机器上安装或将其部署到 Kubernetes 集群后,如何运行 AlloyDB Omni 并连接到它。
准备工作
单服务器
本页中的大多数命令都使用 AlloyDB Omni CLI。
如需在您的计算机上安装此命令行工具,请参阅安装 AlloyDB Omni CLI。
Kubernetes
您需要将 AlloyDB Omni Kubernetes Operator 安装到 Kubernetes 集群,才能执行本页中介绍的任务。
本页面中针对 Kubernetes 的说明假定您对 Kubernetes 的操作有基本的了解。
运行 AlloyDB Omni
您运行 AlloyDB Omni 所用的步骤取决于您是在单个服务器上的容器中运行 AlloyDB Omni,还是在 Kubernetes 集群中运行 AlloyDB Omni。本部分将说明分为这两种部署方式。
单服务器
安装 AlloyDB Omni 会设置一个名为 alloydb-dataplane
的系统服务,该服务会配置为在机器每次启动时启动。
如需对 AlloyDB Omni 进行基本控制和监控,请使用 sudo alloydb
命令,如以下部分所示。
Kubernetes
如需控制和监控 AlloyDB Omni,请更新 Kubernetes 集群的清单,如以下部分所示。
启动 AlloyDB Omni
单服务器
sudo alloydb database-server start
如需执行测试连接,请参阅使用容器化 psql
进行连接。
Kubernetes
通过在其清单定义中将 isStopped
设置为 false
来启动已停止的数据库集群。
您可以在命令行中使用 kubectl
执行此操作:
kubectl patch dbclusters.alloydbomni.dbadmin.goog dbcluster-sample \
-p '{"spec":{"primarySpec":{"isStopped":false}}}' --type=merge
检查 AlloyDB Omni 的状态
单服务器
sudo alloydb database-server status
Kubernetes
kubectl get dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME
将 DB_CLUSTER_NAME
替换为数据库集群的名称。
停止 AlloyDB Omni
单服务器
sudo alloydb database-server stop
Kubernetes
如需停止数据库集群,请在其清单定义中将 isStopped
设置为 true
。
您可以在命令行中使用 kubectl
执行此操作:
kubectl patch dbclusters.alloydbomni.dbadmin.goog dbcluster-sample -p '{"spec":{"primarySpec":{"isStopped":true}}}' --type=merge
停用启动时启动
运行以下命令可防止 AlloyDB Omni 在机器启动时自动启动。
单服务器
sudo systemctl disable alloydb-dataplane
Kubernetes
使用 AlloyDB Omni Kubernetes Operator 时,无需执行此任务。
重新启用启动时启动
单服务器
sudo systemctl enable alloydb-dataplane
Kubernetes
使用 AlloyDB Omni Kubernetes Operator 时,无需执行此任务。
连接到在单台服务器上运行的 AlloyDB Omni
AlloyDB Omni 容器包含自己的 psql
副本,可让您使用其数据库服务器打开交互式 SQL Shell 会话。
您还可以使用自己选择的与 PostgreSQL 兼容的软件从容器外部连接到 AlloyDB Omni。
如需了解如何连接到在 Kubernetes 集群上运行的 AlloyDB Omni 数据库集群,请参阅连接到在 Kubernetes 上运行的 AlloyDB Omni。
使用容器化 psql
进行连接
如需使用 AlloyDB Omni 数据库服务器自己的容器化 psql
副本连接到该服务器,请运行以下命令:
单服务器
docker exec -it pg-service psql -h localhost -U postgres
此命令会以 postgres
用户角色将您连接到服务器,并显示 postgres=#
命令提示。您现在可以运行 psql
命令和 SQL 查询。
如需退出 psql
,请运行 \q
命令。
使用您自己的应用进行连接
任何适用于 PostgreSQL 的应用也可以与 AlloyDB Omni 搭配使用,无需进行任何修改。
如需连接到 AlloyDB Omni 数据库服务器,请使用任何与 PostgreSQL 兼容的客户端或代码库连接到运行 AlloyDB Omni 的机器的端口 5432
(默认的 PostgreSQL 数据库服务器端口)。
之所以能这样,是因为 AlloyDB Omni 容器会将自己的端口 5432
公开到其所运行机器的同一端口。
连接到数据库服务器后,您可以使用标准 PostgreSQL 通信协议通过 DML 和 SQL 查询来定义、查询和修改数据库。
由于 AlloyDB Omni 在您自己的环境中运行,因此您可以控制连接到 AlloyDB Omni 的方式。这包括根据应用的需求允许或限制对此服务的网络访问,就像对普通 PostgreSQL 服务器一样。
连接到在 Kubernetes 上运行的 AlloyDB Omni
AlloyDB Omni Kubernetes Operator 允许从同一 Kubernetes 集群内部连接到数据库集群,还可以选择使用证书进行身份验证。
使用预安装的 psql
进行连接
您可以使用已安装在运行数据库的 Pod 上的 psql
客户端建立测试连接。
为此,请运行以下命令:
export DBPOD=`kubectl get pod --selector=alloydbomni.internal.dbadmin.goog/dbcluster=DB_CLUSTER_NAME,alloydbomni.internal.dbadmin.goog/task-type=database -o jsonpath='{.items[0].metadata.name}'`
kubectl exec -ti $DBPOD -c database -- /bin/psql -h localhost -U postgres
将 DB_CLUSTER_NAME
替换为您的数据库集群的名称。该名称与您在创建数据库集群时声明的名称相同。
输入该命令后,数据库服务器会提示您输入密码。输入您在创建数据库集群时作为 Kubernetes Secret 提供的 base64 编码版本的密码。例如,如果您使用密文 Q2hhbmdlTWUxMjM=
创建了数据库集群,则此处要使用的登录密码为 ChangeMe123
。
AlloyDB Omni Operator 会以 postgres
用户角色将您连接到服务器,并显示 postgres=#
命令提示符。您现在可以运行 psql
命令和 SQL 查询。
如需退出 psql
,请运行 \q
命令。
从同一集群中的其他 pod 连接
默认情况下,运行 AlloyDB Omni 数据库集群的 Pod 允许从同一 Kubernetes 集群内进行连接。我们建议的最佳做法是使用 TLS 保护与数据库集群的所有连接。
如需提供您自己的服务器 TLS 证书,请在配置数据库集群时指定证书密钥。如果您未指定证书 Secret,AlloyDB Omni Kubernetes Operator 会根据由自签名证书授权机构签名的证书为您创建 TLS 证书 Secret。无论是哪种情况,您都可以要求数据库客户端 pod 在每次连接时都进行证书验证,以确保 TLS 安全性。
如需使用 TLS 建立安全的数据库连接,请执行以下操作:
在用于定义进行客户端连接的 pod 的清单中,指定 TLS 证书密钥。可以是下列选项之一:
您已在 Kubernetes 集群中创建的 TLS 证书 Secret。如需详细了解如何在 Kubernetes 中使用 TLS 证书 Secret,请参阅 TLS Secret。
如果您未在数据库集群的清单中指定 TLS Secret,AlloyDB Omni Kubernetes Operator 会为您创建默认的证书 Secret,名称为
DB_CLUSTER_NAME-ca-cert
。
每当客户端 pod 连接到数据库集群时,都必须先定义以下环境变量,然后才能建立连接:
将
PGSSLMODE
设置为"verify-ca"
。将
PGSSLROOTCERT
设置为客户端 pod 文件系统中相关ca.crt
文件的绝对路径。
以下示例清单展示了如何配置用于安装官方 PostgreSQL 映像(其中包含 psql
命令行客户端)的 pod。该示例假定您未在用于定义数据库集群的清单中指定任何 TLS 密钥配置。因此,AlloyDB Omni Kubernetes Operator 使用名为 dbs-al-cert-DB_CLUSTER_NAME
的默认 TLS Secret。
apiVersion: v1
kind: Pod
metadata:
name: postgres
spec:
containers:
- image: "docker.io/library/postgres:latest"
command:
- "sleep"
- "604800"
imagePullPolicy: IfNotPresent
name: db-client
volumeMounts:
- name: ca-cert
mountPath: "/DB_CLUSTER_NAME-ca-cert"
readOnly: true
volumes:
- name: ca-cert
secret:
secretName: dbs-al-cert-DB_CLUSTER_NAME
restartPolicy: Always
将 DB_CLUSTER_NAME
替换为您的数据库集群的名称。该名称与您在创建数据库集群时声明的名称相同。
现在,您可以按照以下步骤使用该 Pod 安全地连接到数据库集群:
确定数据库集群的内部 IP 地址:
kubectl get dbclusters.alloydbomni.dbadmin.goog
输出类似以下内容:
NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE DB_CLUSTER_NAME IP_ADDRESS Ready DBClusterReady
记下
IP_ADDRESS
,并在下一步中使用它。使用
psql
从客户端 pod 连接到集群,设置启用和要求 TLS 证书验证的环境变量:kubectl exec -it postgres -- bash
PGSSLMODE="verify-ca" PGSSLROOTCERT=/DB_CLUSTER_NAME-ca-cert/ca.crt psql -h IP_ADDRESS -p 5432 -U postgres -d postgres
将
IP_ADDRESS
替换为您在上一步中确定的内部 IP 地址。