作者:王志斌
编辑:钟华龙
本文来自社区小伙伴 王志斌 的投稿。从小白的角度,带你一步步实现将 RadonDB PostgreSQL 集群部署到 Kubernetes 上。文章分为上下两部分,《第一部 Kubernetes 环境准备》已经发布。第二部分将带大家部署一个 RadonDB PostgreSQL Operator 和集群。
什么是 RadonDB PostgreSQL Operator?
RadonDB PostgreSQL 是一款基于 PostgreSQL 使用 Operator 实现的数据库容器化项目。
- 广泛应用于地理空间和移动领域
[En]
widely used in geospatial and mobile fields*
- 高可用性、稳定性、数据完整性等
[En]
High availability, stability, data integrity, etc.*
- 支持在线水平扩展
- 支持故障自动转移 ,提供 HA 功能
- 提供 PostgreSQL 常用参数接口,方便调整参数
- 提供 PostGIS 插件,具备存储、查询和修改空间关系的能力
- 提供实时监控、健康检查、日志自动清理等功能
[En]
provide real-time monitoring, health check, automatic log cleaning and other functions*
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 备份卷
实际使用可根据具体情况灵活配置存储卷。
[En]
The actual use can flexibly configure the storage volume according to the specific situation.
大体步骤:
- 虚拟机添加新硬盘(每台虚拟机分别添加一块)
- 重启虚拟机
- 查看现磁盘是否正常挂载
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
挂载分区并创建新的挂载点。
[En]
Mount the partition and create a new mount point.
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 集群为示例,获取数据库账号并连接数据库。
`plain
pgo show user -n pgo radondb –show-system-accounts
CLUSTER USERNAME PASSWORD EXPIRES STATUS ERROR
Original: https://www.cnblogs.com/radondb/p/16337460.html
Author: RadonDB
Title: 给小白的 PG 容器化部署教程(下)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505322/
转载文章受原作者版权保护。转载请注明原作者出处!