本页面介绍了如何在将 AlloyDB Omni 安装到您自己的机器上或将其部署到 Kubernetes 集群后运行并连接到 AlloyDB Omni。
本页面上特定于 Kubernetes 的说明假定您基本熟悉如何操作 Kubernetes。
运行 AlloyDB Omni
您用于运行 AlloyDB Omni 的过程取决于您是在单个服务器上的容器中还是在 Kubernetes 集群中运行 AlloyDB Omni。本部分将按这两种部署方式分别进行说明。
启动 AlloyDB Omni
单个服务器
如需启动已停止的 AlloyDB Omni 容器,请运行 docker container start
命令或 podman container start
命令:
Docker
docker container start CONTAINER_NAME
将 CONTAINER_NAME
替换为您在安装 AlloyDB Omni 容器时为其分配的名称。
Podman
podman container start CONTAINER_NAME
将 CONTAINER_NAME
替换为您在安装 AlloyDB Omni 容器时为其分配的名称。
Kubernetes
通过在其清单定义中将 isStopped
设置为 false
来启动已停止的数据库集群。
您可以使用 kubectl
在命令行中执行此操作:
kubectl patch dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME \
-p '{"spec":{"primarySpec":{"isStopped":false}}}' --type=merge -n DB_CLUSTER_NAMESPACE
替换以下内容:
DB_CLUSTER_NAME
:此数据库集群的名称,例如my-db-cluster
。DB_CLUSTER_NAMESPACE
(可选):您在其中创建此数据库集群的命名空间,例如my-db-cluster-namespace
。
检查 AlloyDB Omni 的状态
单个服务器
如需检查您所运行的所有容器的状态,请运行 docker container ls
命令或 podman container ls
命令:
Docker
docker container ls
Podman
podman container ls
如果 AlloyDB Omni 容器正在运行,则其名称将显示在输出表的 NAMES
列中。相应的行会总结容器的状态。
如果容器的名称未显示在 NAMES
列中,则表示 AlloyDB Omni 未运行。
Kubernetes
kubectl get dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -n DB_CLUSTER_NAMESPACE
替换以下内容:
DB_CLUSTER_NAME
:您的数据库集群的名称。DB_CLUSTER_NAMESPACE
(可选):您在其中创建数据库集群的命名空间。
停止 AlloyDB Omni
单个服务器
如需停止 AlloyDB Omni 容器,请运行 docker container stop
命令或 podman container stop
命令:
Docker
docker container stop CONTAINER_NAME
将 CONTAINER_NAME
替换为您在安装 AlloyDB Omni 容器时为其分配的名称。
Podman
podman container stop CONTAINER_NAME
将 CONTAINER_NAME
替换为您在安装 AlloyDB Omni 容器时为其分配的名称。
Kubernetes
如需停止数据库集群,请在其清单定义中将 isStopped
设置为 true
。
您可以使用 kubectl
在命令行中执行此操作:
kubectl patch dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -p '{"spec":{"primarySpec":{"isStopped":true}}}' --type=merge -n DB_CLUSTER_NAMESPACE
替换以下内容:
DB_CLUSTER_NAME
:此数据库集群的名称,例如my-db-cluster
。DB_CLUSTER_NAMESPACE
(可选):您在其中创建此数据库集群的命名空间,例如my-db-cluster-namespace
。
连接到在单个服务器上运行的 AlloyDB Omni
AlloyDB Omni 容器包含自己的 psql
副本,可让您打开与其数据库服务器的交互式 SQL shell 会话。
您还可以使用自己选择的与 PostgreSQL 兼容的软件,从容器外部连接到 AlloyDB Omni。
如需了解如何连接到 Kubernetes 集群上运行的 AlloyDB Omni 数据库集群,请参阅连接到 Kubernetes 上运行的 AlloyDB Omni。
使用容器化 psql
进行连接
如需使用其自己的容器化 psql
副本连接到 AlloyDB Omni 数据库服务器,请运行以下命令:
Docker
docker exec -it CONTAINER_NAME psql -U postgres
将 CONTAINER_NAME
替换为您在安装 AlloyDB Omni 容器时为其分配的名称。
Podman
podman exec -it CONTAINER_NAME psql -U postgres
将 CONTAINER_NAME
替换为您在安装 AlloyDB Omni 容器时为其分配的名称。
此命令会将您以 postgres
用户角色连接到服务器,并显示 postgres=#
命令提示符。现在,您可以运行 psql
命令和 SQL 查询。
如需退出 psql
,请运行 \q
命令。
使用您自己的应用进行连接
任何与 PostgreSQL 搭配使用的应用也可以与 AlloyDB Omni 搭配使用,而无需进行任何修改。
如需连接到 AlloyDB Omni 数据库服务器,请在启动 AlloyDB Omni 时向 docker run
或 podman run
命令添加 --network=host
或 -p 5432:5432
,以便公开从 AlloyDB Omni Docker 容器到宿主机的网络。
如需选择自定义端口号,请在启动 AlloyDB Omni 时使用 -p [HOST_PORT]:5432
。然后,使用任何与 PostgreSQL 兼容的客户端或代码库连接到端口 5432
或您指定的自定义端口号。
连接到数据库服务器后,您可以使用标准 PostgreSQL 通信协议,通过 DML 和 SQL 查询来定义、查询和修改数据库。
由于 AlloyDB Omni 在您自己的环境中运行,因此您可以控制连接到 AlloyDB Omni 的方式。这包括根据应用需求允许或限制对此服务的网络访问,就像使用普通 PostgreSQL 服务器一样。
连接到 Kubernetes 上运行的 AlloyDB Omni
AlloyDB Omni Kubernetes 操作器允许从同一 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 -n DB_CLUSTER_NAMESPACE -o jsonpath='{.items[0].metadata.name}'`
kubectl exec -ti $DBPOD -n DB_CLUSTER_NAMESPACE -c database -- psql -h localhost -U postgres
将 DB_CLUSTER_NAME
替换为您的数据库集群的名称。这是您在创建数据库集群时声明的同一个名称。
如果您是在默认命名空间中创建了数据库集群,则可以跳过设置 DB_CLUSTER_NAMESPACE
的操作。
输入该命令后,数据库服务器会提示您输入密码。
输入您在创建数据库集群时,提供其 base64 编码版本作为 Kubernetes Secret 的密码。例如,如果您使用 Q2hhbmdlTWUxMjM=
Secret 创建了数据库集群,那么此处使用的登录密码为 ChangeMe123
。
AlloyDB Omni 操作器会将您以 postgres
用户角色连接到服务器,并显示 postgres=#
命令提示符。现在,您可以运行 psql
命令和 SQL 查询。
如需退出 psql
,请运行 \q
命令。
从同一集群中的单独 Pod 进行连接
默认情况下,运行 AlloyDB Omni 数据库集群的 Pod 允许从同一 Kubernetes 集群内进行连接。建议的最佳实践是使用 TLS 保护与数据库集群的所有连接。
如需提供您自己的服务器 TLS 证书,请在配置数据库集群时指定证书 Secret。如果您未指定证书 Secret,AlloyDB Omni Kubernetes 操作器会根据由自签名证书授权机构签名的证书为您创建 TLS 证书 Secret。无论是哪种情况,您都可以要求数据库客户端 Pod 对每个连接强制进行证书验证,以确保 TLS 安全性。
如需使用 TLS 建立安全的数据库连接,请执行以下操作:
在定义进行客户端连接的 Pod 的清单中,指定 TLS 证书 Secret。可以是下列选项之一:
您已在 Kubernetes 集群中创建的 TLS 证书 Secret。如需详细了解如何在 Kubernetes 中使用 TLS 证书 Secret,请参阅 TLS Secret。
当您未在数据库集群的清单中指定 TLS Secret 时,AlloyDB Omni Kubernetes 操作器为您创建的默认证书 Secret,其名称为
DB_CLUSTER_NAME-ca-cert
。
每当客户端 Pod 连接到数据库集群时,都必须在建立连接之前定义以下环境变量:
将
PGSSLMODE
设置为"verify-ca"
。将
PGSSLROOTCERT
设置为客户端 Pod 文件系统中相关ca.crt
文件的绝对路径。
以下清单示例展示了如何配置用于安装官方 PostgreSQL 映像(其中包含 psql
命令行客户端)的 Pod。此示例假定您未在定义数据库集群的清单中指定任何 TLS Secret 配置。因此,AlloyDB Omni Kubernetes 操作器会使用默认的 TLS Secret,其名称为 dbs-al-cert-DB_CLUSTER_NAME
。
apiVersion: v1
kind: Pod
metadata:
name: postgres
namespace: DB_CLUSTER_NAMESPACE
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
:您的数据库集群的名称。这是您在创建数据库集群时声明的同一个名称。DB_CLUSTER_NAMESPACE
(可选):您在其中创建数据库集群的命名空间。
现在,您可以使用以下步骤通过 Pod 安全地连接到数据库集群:
确定数据库集群的内部 IP 地址:
kubectl get dbclusters.alloydbomni.dbadmin.goog -n DB_CLUSTER_NAMESPACE
输出类似以下内容:
NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE DB_CLUSTER_NAME IP_ADDRESS Ready DBClusterReady
记下
IP_ADDRESS
,在后续步骤中会使用它。使用
psql
从客户端 Pod 连接到集群,并设置用于启用和要求进行 TLS 证书验证的环境变量:kubectl exec -it postgres -n DB_CLUSTER_NAMESPACE -- 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 地址。