作者:王志斌
编辑:钟华龙
本文来自社区小伙伴 王志斌 的投稿。从小白的角度,带你一步步实现将 RadonDB PostgreSQL 集群部署到 Kubernetes 上。文章分为上下两部分,《第一部 Kubernetes 环境准备》已经发布。第二部分将带大家部署一个 RadonDB PostgreSQL Operator 和集群。
什么是 RadonDB PostgreSQL Operator?
RadonDB PostgreSQL 是一款基于 PostgreSQL 使用 Operator 实现的数据库容器化项目。
RadonDB PostgreSQL Operator 可基于 KubeSphere、OpenShift、Rancher 等 Kubernetes 容器平台交付。可自动执行与运行 RadonDB PostgreSQL 集群有关的任务。
RadonDB PostgreSQL Operator 基于 https://github.com/CrunchyData/postgres-operator 项目实现,进行了改进优化,后续会持续回馈给社区。
仓库地址:https://github.com/radondb/radondb-postgresql-operator
一、部署 RadonDB PostgreSQL 集群
安装 Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
复制代码
准备本地存储
本次实验 RadonDB PostgreSQL 集群数据持久化采用 Local Persistent Volumes
,以下的步骤为配置集群所使用的本地持久化存储卷,配置一个一主一从的高可用集群,最低需要三个持久化存储卷:
PostgreSQL Primary 数据卷
PostgreSQL Replica 数据卷
PostgreSQL 备份卷
实际使用可以根据具体的情况,灵活配置存储卷。
大体步骤:
虚拟机添加新硬盘(每台虚拟机分别添加一块)
重启虚拟机
查看现磁盘是否正常挂载
可看到新加的虚拟硬盘,一般名为: Disk /dev/sdb 给新加的硬盘分区。
fdisk /dev/sdb
#按照提示增加新分区
/dev/sdb1 /dev/sdb2 /dev/sdb13
复制代码
格式化磁盘分区。用 ext4 格式对 /dev/sdb1
进入格式化。
mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2
mkfs.ext4 /dev/sdb3
复制代码
挂载分区,创建新的挂载点。
mkdir -p /data/pgdata/pv{1..3}
复制代码
将新磁盘分区挂载到 /work
目录下。
mount -t ext4 /dev/sdb1 /data/pgdata/pv1
mount -t ext4 /dev/sdb3 /data/pgdata/pv2
mount -t ext4 /dev/sdb4 /data/pgdata/pv3
复制代码
查看挂载
可以看到新加的硬盘: /dev/sdb1 /dev/sdb2 /dev/sdb3 实现开机自动挂载。
在最后一行加入:
/dev/sdb1 /data/pgdata/pv1 ext4 defaults 0 2
/dev/sdb2 /data/pgdata/pv2 ext4 defaults 0 2
/dev/sdb3 /data/pgdata/pv3 ext4 defaults 0 2
复制代码
创建命名空间
kubectl create namespace pgo
复制代码
部署 PostgreSQL Operator
kubectl apply -f https://github.com/radondb/radondb-postgresql-operator/blob/main/installers/kubectl/postgres-operator.yml -n pgo
# 查看状态
kubectl get all -n pgo --selector=name=postgres-operator
复制代码
安装静态本地盘控制器
Kubernetes 当前支持静态分配的本地存储。可使用 local-static-provisioner[1] 项目中的 local-volume-provisioner
程序创建本地存储对象。
git clone https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner.git
cd sig-storage-local-static-provisioner
# 主要修改行号
vi helm/provisioner/values.yaml
66 classes:
67 - name: fast-disks
70 hostDir: /data/pgdata
76 volumeMode: Filesystem
81 fsType: ext4
116 image: quay.io/external_storage/local-volume-provisioner:v2.4.0
#
helm install localprovi . -n kube-system
# podpv
kubectl get po -n kube-system -l app.kubernetes.io/name=provisioner
复制代码
部署数据库集群
启用 PGO 客户端,创建数据库集群。
kubectl exec -it -n pgo $(kubectl get po -n pgo -l name=pgo-client -o jsonpath='{range .items[*]}{.metadata.name}{end}') -- bash
pgo create cluster radondb --storage-config=fast-disks
复制代码
部分参数可参见下表,并可执行 pgo 命令行帮助 pgo --help
获取更详细的部署参数帮助。
执行以下命令观察集群创建过程。待所有 Pod 状态切换为 Running,则集群创建完成。
kubectl get po -n pgo --watch
复制代码
检查 local pv 是否正常绑定
kubectl get pv -n pgo |grep ^local
复制代码
二、连接 RadonDB PostgreSQL 集群
通过执行 pgo 命令连接,获取集群中用户账号信息。
pgo show user -n pgo radondb
复制代码
以下以 RadonDB PostgreSQL 集群为示例,获取数据库账号并连接数据库。
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 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
复制代码
此外,还可以通过 psql 工具连接。
查看服务:
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='xxxxxxxxxxxxxxxxxxxxxxxx' psql -h localhost -p 5432 -U testuser radondb
复制代码
查看集群
kubectl exec -it rp1-65798ccf5c-ftbp9 -n pgo -c database bash
复制代码
可以看到图中为 3 节点集群。至此,RadonDB PostgreSQL 容器化数据库搭建完成。
引用链接
1.local-static-provisioner:https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner
致谢
RadonDB 开源社区向本文的投稿作者表示感谢!也期待更多的社区小伙伴的投稿~
评论