RadonDB PostgreSQL Operator 是基于 PostgreSQL 和 PGO 开发的开源、高可用、云原生集群解决方案。
RadonDB PostgreSQL Operator 简化了在 Kubernetes 上部署和管理 PostgreSQL 集群的过程,不仅适用于开发测试环境中运行的简单 PostgreSQL 集群,还适用于业务生产环境中运行的高可用或自动容错 PostgreSQL 集群。
已创建可用 Kubernetes 集群,目前支持如下平台创建的 Kubernetes 集群。
- Kubernetes 1.17+
- OpenShift 3.1+
- Google Kubernetes Engine
- Amazon EKS
- Microsoft AKS
- VMware Tanzu
PostgreSQL Operator 支持多命名空间部署,以下示例将 Operator 及相关自定义资源部署到 pgo
的命名空间下。
- 通过原生 kubectl 工具部署。
kubectl create namespace pgo
kubectl apply -f https://raw.githubusercontent.com/radondb/radondb-postgresql-operator/main/installers/kubectl/postgres-operator.yml
查看 PostgreSQL Operator 部署后的状态。
kubectl get all -n pgo --selector=name=postgres-operator
NAME READY STATUS RESTARTS AGE
pod/postgres-operator-cb9bf568-llljs 4/4 Running 1 13d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/postgres-operator ClusterIP 10.96.46.93 <none> 8443/TCP,4171/TCP,4150/TCP 13d
NAME DESIRED CURRENT READY AGE
replicaset.apps/postgres-operator-cb9bf568 1 1 1 13d
- 通过 Helm 工具部署。
git clone https://github.com/radondb/radondb-postgresql-operator
cd radondb-postgresql-operator/installers/helm
helm install demo .
说明
您也可以选择直接操作 CRD 资源。
PGO 客户端是已编译的 postgres-operator
客户端工具,可在与 Kubernetes 集群交互的任何 Linux 环境上安装此客户端。PGO 客户端可提供与 CRD 交互的命令行 CLI,方便与 CRD 进行交互,目前已支持如下功能:
- 创建 PostgreSQL 集群
- 更新 PostgreSQL 集群资源分配
- 向 PostgreSQL 集群添加其他实用程序
- 集群备份与恢复
-
安装 PGO 客户端。
curl https://raw.githubusercontent.com/radondb/radondb-postgresql-operator/main/installers/kubectl/client-setup.sh |bash
-
设置环境变量,使其正常工作。
说明
以下参数,可根据实际情况修改。
cat <<EOF >> ~/.bashrc export PGOUSER="${HOME?}/.pgo/pgo/pgouser" export PGO_CA_CERT="${HOME?}/.pgo/pgo/client.crt" export PGO_CLIENT_CERT="${HOME?}/.pgo/pgo/client.crt" export PGO_CLIENT_KEY="${HOME?}/.pgo/pgo/client.key" export PGO_APISERVER_URL='https://127.0.0.1:8443' export PGO_NAMESPACE=pgo EOF source ~/.bashrc
-
转发
svc/postgres-operator
到本地。nohup kubectl port-forward --namespace pgo svc/postgres-operator 8443:8443 &>/dev/null &
-
启用 PGO 客户端,创建集群。
pgo create cluster radondb \
-
设置部署参数。
部分参数可参见下表,并可执行 pgo 命令行帮助获取更详细的部署参数帮助。
pgo --help pgo create cluster --help #获取更多参数项说明
命令行 命令说明 --pgbackrest-storage-type="s3" \ 备份存储的类型。支持 posix
、s3
、gcs
、posix,s3
和posix,gcs
五种类型。--replica-count=3 \ PostgeSQL 副本数量。 --ccp-image=radondb-postgres-ha \ 使用的镜像名称。
带gis
插件的镜像,例如radondb-postgres-gis-ha
。
不带gis
插件的镜像,例如radondb-postgres-ha
。--ccp-image-prefix=docker.io/radondb \ 镜像仓库。 --ccp-image-tag=debian-14.2-2.1.1 \ dockerhub 上镜像的标签。目前支持 debian-14.2-2.1.1
和debian-14.3-2.1.1
。--pgbackrest-s3-endpoint=s3.pek3b.qingstor.com \
--pgbackrest-s3-key=xxxxx \
--pgbackrest-s3-key-secret=xxxx \
--pgbackrest-s3-bucket=xxxx \
--pgbackrest-s3-region=xxx \
--pgbackrest-s3-verify-tls=false \支持 s3 协议的对象存储设置,主要用于备份。若备份存储选择了 s3 则需要设置这部分参数。 --metrics \ 启用适用于 Prometheus 的指标收集器。 --pgbadger \ 启用 pgbadger。 --debug 调试模式。 -
查看集群创建状态。
执行以下命令观察集群创建过程。待所有 Pod 状态切换为
Running
,则集群创建完成。kubectl get po -n pgo --watch
执行 pgo show user -n pgo radondb
命令,获取集群中用户账号信息。
以下以 radondb
集群为示例,获取数据库账号并连接数据库。
pgo show user -n pgo radondb --show-system-accounts
CLUSTER USERNAME PASSWORD EXPIRES STATUS ERROR
--------- -------------- ------------------------ ------- ------ -----
radondb ccp_monitoring Dwpa|MCg,b4M+rY.>ZC0ONz4 never ok
radondb pgbouncer MsTk4.auti9[0L2yDaHu/_Ni never ok
radondb postgres 1a4R-d7Po=,PS@R:-=?[gP(9 never ok
radondb primaryuser =B8x*Haf*dCq+V4hkGSfh/.} never ok
radondb testuser yTFeeH1|^DX<Bx4[?:B_/Q;M never ok
-
查看服务。
kubectl -n pgo get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE postgres-operator ClusterIP 10.96.64.37 <none> 8443/TCP,4171/TCP,4150/TCP 58m radondb ClusterIP 10.96.171.227 <none> 10000/TCP,9187/TCP,2022/TCP,5432/TCP 5m42s radondb-backrest-shared-repo ClusterIP 10.96.235.247 <none> 2022/TCP 5m42s radondb-pgbouncer ClusterIP 10.96.234.49 <none> 5432/TCP 4m16s radondb-replica ClusterIP 10.96.67.45 <none> 10000/TCP,9187/TCP,2022/TCP,5432/TCP 3m50s
-
以
testuser
账号为示例,连接到数据库。kubectl -n pgo port-forward svc/radondb 5432:5432 PGPASSWORD='yTFeeH1|^DX<Bx4[?:B_/Q;M' psql -h localhost -p 5432 -U testuser radondb
pgAdmin 是一个图形工具,可用于从 Web 浏览器连接和管理 PostgreSQL 数据库。
-
执行
pgo create pgadmin -n pgo radondb
命令,创建 pgAdmin 的实例。 -
实例创建完成后,查看可用服务列表。
kubectl -n pgo get svc radondb-pgadmin NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE radondb-pgadmin ClusterIP 10.96.239.152 <none> 5050/TCP 2m41s
-
修改初始用户账号密码。
pgo update user -n pgo radondb --username=testuser --password=radondb
-
创建端口转发并连接数据库。
kubectl -n pgo port-forward svc/radondb-pgadmin 5050:5050
-
在浏览器打开http://localhost:5050,使用数据库用户账号
testuser
和密码即可连接到数据库。