共计 4445 个字符,预计需要花费 12 分钟才能阅读完成。
作者:王志斌
编辑:钟华龙
本文来自社区小伙伴 王志斌 的投稿。从小白的角度,带你一步步实现将 RadonDB PostgreSQL 集群部署到 Kubernetes 上。文章分为高低两局部,《第一部 Kubernetes 环境筹备》曾经公布。第二局部将带大家部署一个 RadonDB PostgreSQL Operator 和集群。
什么是 RadonDB PostgreSQL Operator?
RadonDB PostgreSQL 是一款基于 PostgreSQL 应用 Operator 实现的数据库容器化我的项目。
- 被广泛应用于天文空间和挪动畛域
- 具备高可用、稳定性、数据完整性等性能
- 反对在线程度扩大
- 反对故障主动转移,提供 HA 性能
- 提供 PostgreSQL 罕用参数接口,不便调整参数
- 提供 PostGIS 插件,具备存储、查问和批改空间关系的能力
- 提供实时监控、健康检查、日志主动清理等性能
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 备份卷
理论应用能够依据具体的状况,灵便配置存储卷。
大体步骤:
- 虚拟机增加新硬盘(每台虚拟机别离增加一块)
- 重启虚拟机
- 查看现磁盘是否失常挂载
fdisk -l
可看到新加的虚构硬盘,个别名为: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
查看挂载
df -h
能够看到新加的硬盘:/dev/sdb1 /dev/sdb2 /dev/sdb3
实现开机主动挂载。
vim /etc/fstab
在最初一行退出:
/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
获取更具体的部署参数帮忙。
命令行 | 命令阐明 |
---|---|
–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 上镜像的标签。 |
–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
查看 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…
致谢
RadonDB 开源社区向本文的投稿作者表示感谢!也期待更多的社区小伙伴的投稿~