• RadonDB
  • 在 Kubesphere 部署 RadonDB Postgresql 数据库

RadonDB Postgresql 简介

RadonDB PostgreSQL 是基于 PostgreSQL 的开源、高可用、云原生集群解决方案。

  • 通过 Pgpool-II 代理 PostgreSQL 后端服务 , 用于减少 Postgresql 后端的连接开销,充当 Postgresql 的负载均衡器,增强了系统的整体吞吐量。
  • 通过 repmgr 实现 PostgreSQL 节点的故障转移,极致的性能、更低的成本

不论在单节点、多节点的集群环境中[PostgreSQL on QingCloud]都完美的保持了 PostgreSQL 集群本身的性能,同时我们还对一些关键参数进行了进一歩调整,以争取在您不需要调节任何参数的情况下为您提供极致的性能体验。同时[PostgreSQL on QingCloud]支持容量型、性能型、超高性能型多种磁盘类型,你可以根据自己的实际情况 进行选择。

PostgresSQL 凭借其经过验证的架构,可靠性,数据完整性,强大的功能集,可扩展性以及软件背后的开源社区的奉献精神赢得了良好的声誉,以始终如一地提供高性能和创新的解决方案。PostgreSQL 所有主要操作系统开始使用 PostgreSQL 从未如此简单。

Kubesphere 简介

Kubesphere 是在 Kubesphere 之上构建的以应用为中心的多租户容器平台,完全开源,支持多云与多集群管理,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。Kubesphere 提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台。

部署环境准备

Kubesphere 是由青云 QingCloud 开源的容器平台,支持在任何基础设施上安装部署。在青云公有云上支持一键部署 Kubesphere(QKE)。下面以在青云云平台快速启用 Kubesphere 容器平台为例部署 PostgreSQL 数据库,至少需要准备 3 个可调度的 node 节点。你也可以在任何 Kubesphere 集群或 Linux 系统上安装 Kubesphere,可 以参考 KubeSphere 官方文档。

1、登陆青云控制台:https://console.qingcloud.com/,点击 左侧容器平台,选择 Kubesphere,点击创建并选择合适的集群规格:

2、创建完成后登陆到 Kubesphere 平台界面:

3、点击左上角平台管理,选择访问控制,新建企业空间,这里命 名为 pg-ha-workspace、 DevOps 工程:posgresql-ha-devops operator 账户:zhangsan



4、以 zhangsan 登陆控制台,转到 posgresql-ha-devops 这个工程,在工程管理下的凭证页面创建以下凭证:

部署 PostgreSQL

  • 通过 Git 部署

步骤1:克隆 RadonDB PostgreSQL Chart

执行如下命令 , 将 RadonDB PostgreSQL Chart 克隆到 Kubernetes 中。

git clone https://github.com/zhl003/radondb-postgresql-kubernetes.git

Chart 代表 Helm 包,包含在 Kubernetes 集群内部运行应用程序、工具或服务所需的所有资源定义。

步骤2:部署

在 radondb-postgresql-kubernetes 目录路径下,选择如下方式,部署 release 实例。

release 是运行在 Kubernetes 集群中的 Chart 的实例。通过命令方式部署,需指定 release 名称。

以下命令指定 release 名为 demo,将创建一个名为 demo-postgresql-ha-postgresql 的有状态副本集。

  • 默认部署方式
<For Helm v2> 
helm install . --name demo 
<For Helm v3>
 helm install demo charts/postgresql-ha 
  • 指定参数部署方式

在 helm install 时使用 –set key=value[,key=value] ,可指定参数部署。以下示 例以创建一个3副本的 PostreSQL 集群,并设置了 Postgresql 的访问密码。

cd charts 
helm install demo \ 
--set postgresql.password = [POSTGRESQL_PASSWORD] \ 
--set postgresql.repmgrPassword = [REPMGR_PASSWORD] 
--set postgresql.replicaCount = 3 \ 
charts/postgresql-ha
  • 配置 yaml 参数方式 执行如下命令,可通过 value.yaml 配置文件,在安装时配置指定参数。更多安 装过程中可配置的参数,请参考配置。
cd charts helm install demo -f values.yaml .

通过 repo 部署

步骤 1:添加仓库
添加并更新 Helm 仓库。
登陆 Kubesphere 客户端节点,执行以下命令:

$ helm repo add pgha https://zhl003.github.io/radondb-postgresql-kubernetes 
$ helm repo update 

步骤 2:部署

以下 release 默认名为 default,将在命名空间 default 下创建一个名为 pgha-postgresql-ha-pgpool 的有状态副本集。

分别执行如下指令,查看到 release 名为 default 的有状态副本集 demo-postgresql-ha,则 RadonDB PostgreSQL 部署成功。

$ helm list -n demo NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION Defult default 1 2021-05-19 06:13:27.219204491 +0000 UTC deployed postgresql-ha-1.0.0 11.11.0 
$ kubectl get statefulsets.apps -n demo NAME READY AGE demo-postgresql-ha-postgresql 4/4 2m9s

部署校验

部署指令执行完成后,查看 RadonDB PostgreSQL 有状态副本集,pod 状态及服务。可查看到相关信息,则 RadonDB PostgreSQL 部署成功。

kubectl get statefulset,pod,svc -n demo 

查看 Radondb-PostgreSQL 集群监控

1、登陆 Kubesphere 控制台,查看有状态副本集群 demo-postgresql-ha-postgresql

2、在 Kubesphere 监控面板查看 postgresql 负载情况,可以看到 CPU、内存、网络流出速率有明显的变化;

3、查看容器组(Pod)列表,可以看到 CPU、内存、postgresql 集群默认包含了5个 pod

4、点击存储管理,查看存储卷,所有组件均使用了持久化存储:

5、查看某个存储卷用量信息,以其中一个数据节点为例,可以看到当前存储的存储容量和剩余容量等监控数据。

6、在 Kubesphere 项目首页查看 pgha-dev 项目中资源用量排行:

连接 RadonDB PostgreSQL

您需要准备一个用于连接 RadonDB PostgreSQL 的客户端。
客户端与 RadonDB PostgreSQL 在同一个 Namespace 中
当客户端与 RadonDB PostgreSQL 集群在同一个 NameSpace 中时,可使用 leader/follower service 名称代替具体的 ip 和端口。
连接 pgpool 节点(读写节点)

psql -h < service demo-postgresql-ha-pgpool 名称 > -p 5432 -U postgres -d postgres 

客户端与 RadonDB PostgreSQL 不在同一个 Namespace 中
当客户端与 RadonDB PostgreSQL 集群不在同一个 NameSpace 中时,需先分 别获取连接所需的节点地址、节点端口、服务名称。
1、查询 pod 列表和服务列表,分别获取 pod 名称和服务名称。 kubectl get pod,svc
2、开启服务网络访问。 执行如下命令,打开服务配置文件,将 spec 下 type 参数设置为 NodePort。

kubectl edit svc <服务名称> 

3、分别获取 pod 所在的节点地址和节点端口。

kubectl describe pod <pod 名称> 
kubectl describe svc <服务名称> 

4.、连接节点。

psql -h <pgpool 节点地址> -p <节点端口> -U postgres -d postgres 

通过以上操作您可以连接到 RadonDB PostgreSQL 客户端节点了。

总结参考

KubeSphere GitHub:https://github.com/kubesphere/kubesphere

1 年 后

请教一个问题,手动停止primary的pod(postgresql-0),primary自动切换到postgresql-1,postgresql-0这个pod的状态就一直是CrashLoopBackOff,这个要怎么恢复解决呢