树叶云里用CrunchyData PGO搞Postgres集群,怎么建连删一步步说给你听
- 问答
- 2025-12-28 05:25:49
- 5
主要依据Crunchy Data官方PGO项目文档(github.com/CrunchyData/postgres-operator)以及相关博客文章。
咱们得知道PGO是啥,PGO是个Kubernetes的Operator,你就把它想象成是一个住在Kubernetes集群里的超级管家,你只要告诉这个管家你想要一个什么样的PostgreSQL数据库(要多大容量、几个副本、什么密码),它就会自动帮你把数据库集群创建好、管理好,包括备份、恢复、扩容这些麻烦事,它都能替你干了,树叶云就是一个用了Kubernetes的云环境,所以在上面用PGO来管PostgreSQL非常合适。
第一步:安装PGO管家
在你开始创建Postgres集群之前,你得先把PGO这个管家请到你的Kubernetes集群里来,树叶云可能已经预装好了,如果没有,你需要自己安装。
- PGO提供了一个叫
kustomize的配置文件包,你先得把这个配置包下载到你的本地电脑上。 - 你用
kubectl apply命令,把PGO需要的各种部件(比如它的Deployment、ServiceAccount、Role等等)安装到Kubernetes一个叫postgres-operator的命名空间里。 - 安装完成后,你可以用
kubectl get pods -n postgres-operator命令看看PGO管家的“小机器人”(Pod)有没有在正常运行,看到状态是Running就对了。
来源:PGO文档中的“Installation”部分。
第二步:创建第一个Postgres集群

管家就位了,现在可以下令让它创建数据库集群了,PGO管集群不是用我们常见的Kubernetes原生配置,而是用了一个它自己定义的资源类型,叫PostgresCluster。
- 你需要编写一个YAML文件,比如叫
my-cluster.yaml,在这个文件里,你会像填表格一样,告诉PGO你的数据库集群要长什么样。 - 在这个YAML里,最基本要写这几样东西:
metadata.name:给你的集群起个名字,比如hippo,这个名字以后会用到。spec.image:用哪个版本的PostgreSQL镜像,比如registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi8-14.5,这表示用PostgreSQL 14.5版本。spec.postgresVersion:PostgreSQL的主版本号,比如14。spec.instances:这是重头戏,定义实例,里面要写:replicas:你要几个数据库副本,写2就是1个主库1个从库,提高可用性。dataVolumeClaimSpec:数据库的数据存到哪里,这里要指定存储的大小(比如10Gi)和存储类型(比如树叶云提供的leaf-cloud-ssd这类StorageClass的名字)。
spec.users:定义数据库的初始用户,PGO会自动创建一个超级用户,你在这里可以指定用户名(比如hippo)并让PGO为你生成密码,或者你直接提供一个存有密码的Secret名字。
- 文件写好后,用
kubectl apply -f my-cluster.yaml命令把这个配置提交给Kubernetes,PGO管家会监听到这个命令,然后开始忙活起来。 - 你可以用
kubectl get postgrescluster命令查看集群的创建状态,用kubectl get pods可以看到数据库的Pod正在启动,等所有Pod都Running了,集群就创建好了。
来源:PGO文档中的“Tutorial”部分,特别是创建第一个集群的步骤。
第三步:怎么连接这个数据库
数据库集群跑起来了,你总得连上去用吧,连接需要几个信息:

- 找主机地址:PGO会给你的集群创建Service,你可以用
kubectl get services命令查看,通常会有一个Service名字叫你的集群名(如hippo),还有一个叫hippo-replica,你连接主库读写就用hippo这个服务名,连接只读副本可以用hippo-replica。 - 找密码:PGO会把密码存在一个Kubernetes的Secret里,Secret的名字一般是
hippo-pguser-hippo(集群名-pguser-用户名),你可以用命令kubectl get secret hippo-pguser-hippo -o jsonpath='{.data.password}' | base64 -d来把密码解密显示出来,这个命令会输出明文密码,记下来。 - 组装信息:现在你有:
- 主机名:
hippo(因为在同一个Kubernetes命名空间内,直接用Service名就行) - 端口:5432 (PostgreSQL默认端口)
- 数据库名:默认和用户名一样,比如
hippo - 用户名:你在YAML里指定的,比如
hippo - 密码:刚才用命令查出来的。
- 主机名:
- 用任何PostgreSQL客户端(比如
psql命令行,或者pgAdmin图形界面)拿着这些信息就能连了,比如在Kubernetes集群内部另一个Pod里,可以用psql postgresql://hippo:[密码]@hippo:5432/hippo这样的连接串来连接。
来源:PGO文档中关于“Connect to a Cluster”的部分。
第四步:删除集群
如果你不想要这个集群了,想清理掉,也非常简单,因为PGO是声明式的管理,你删除你声明的东西就行了。
- 直接用创建集群时用的那个YAML文件,执行删除命令:
kubectl delete -f my-cluster.yaml。 - 这个命令会告诉PGO管家:“我当初要的那个集群不要了”,管家就会开始清理工作,自动把相关的Pod、Service、Volume Claim等资源都删掉。
- 重要提醒:默认情况下,删除操作不会删除你的数据持久化卷(PVC),这是为了防止你误操作导致数据全部丢失,数据卷会保留在原地。
- 如果你确认数据也不要了,想彻底清空,你需要手动删除PVC,可以用命令
kubectl get pvc找到和你集群相关的PVC(名字里会包含集群名如hippo),然后用kubectl delete pvc [PVC名字]一个一个删除。
来源:PGO文档和Kubernetes通用知识,关于资源删除和PVC保留策略。
总结一下就是在树叶云上,用PGO搞Postgres集群就是四步:先请管家(安装PGO),再下订单(用YAML创建PostgresCluster),然后根据管家给的门牌号和钥匙连接(通过Service和Secret),最后不要了就让管家清理(删除PostgresCluster资源),整个过程你不需要去手动处理复杂的数据库配置和运维,非常省心。
本文由革姣丽于2025-12-28发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/69846.html
