给小白的 PG 容器化部署教程(下)

作者:王志斌
编辑:钟华龙

本文来自社区小伙伴 王志斌 的投稿。从小白的角度,带你一步步实现将 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,以下的步骤为配置集群所使用的本地持久化存储卷,配置一个一主一从的高可用集群,最低需要三个持久化存储卷:

  1. PostgreSQL Primary 数据卷
  2. PostgreSQL Replica 数据卷
  3. PostgreSQL 备份卷

实际使用可根据具体情况灵活配置存储卷。

[En]

The actual use can flexibly configure the storage volume according to the specific situation.

大体步骤:

  1. 虚拟机添加新硬盘(每台虚拟机分别添加一块)
  2. 重启虚拟机
  3. 查看现磁盘是否正常挂载
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

给小白的 PG 容器化部署教程(下)

安装静态本地盘控制器

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

给小白的 PG 容器化部署教程(下)

部署数据库集群

启用 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

给小白的 PG 容器化部署教程(下)

二、连接 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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MySQL实战45讲 6,7,8

    06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍? Connection连接与Session会话 通俗来讲,会话(Session)是通信双⽅从开始通信到通信结束期间的⼀个上下…

    数据库 2023年6月16日
    0130
  • element-ui el-table 悬停/选中 行样式,鼠标样式

    /* 用来设置当前页&am…

    数据库 2023年6月16日
    0117
  • 部署zabbix监控服务

    部署zabbix监控服务 部署zabbix监控服务 什么是zabbix zabbix的特点 zabbix的配置文件 部署zabbix zabbix服务端安装 准备工作 数据库操作 …

    数据库 2023年6月14日
    0156
  • 软件测试基础理论

    软件基础的理论 一, 什么是软件产品 它是一个逻辑产品,没有实体,包括程序,文档和数据,需要通过终端设备才能体现出来功能和作用 二, 软件产品的中间过程文档 客户需求 &#…

    数据库 2023年6月16日
    0139
  • mysql语法使用详细代码版

    mysql 1.什么是数据库 数据库:(DB,DataBase)作用:用来存储数据,管理数据。Txt,Excel,word是在数据库出现之前存储数据的。概念:数据仓库,安装在操作系…

    数据库 2023年5月24日
    0126
  • JVM-堆

    堆 JAVA技术交流群:737698533 堆核心概述 此内存区域的唯一目的就是存放对象实例 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 Java堆区在JV…

    数据库 2023年6月16日
    0156
  • 简单日期格式化的使用

    简单日期格式化的应用 简单日期格式化的使用 面试题: 有一个时间 20…

    数据库 2023年6月16日
    0111
  • 第十三章 后置处理Bean

    BeanPostProcessor: 对Spring工厂所创建的对象,进行再加工 注意: BeanPostProcessor是一个接口 程序员实现BeanPostProcessor…

    数据库 2023年6月14日
    0124
  • [spring]spring中java实现类代替注解开发

    9.使用javaconfig实现代替xml配置 The central artifacts in Spring’s new Java-configuration sup…

    数据库 2023年6月16日
    0123
  • 奶奶常说,黑白照片看的不清晰,还好我会Python,分分钟给她变成彩色的~

    咳咳~ 其实是奶奶常说,艾欧尼亚昂扬不灭,正义将指引着我们! 好吧,并不是奶奶说,只是最近回家发现一些黑白老照片,看着不够清晰,然后实验了一波用Python把老照片变成彩色的。 代…

    数据库 2023年6月14日
    0135
  • media配置及把用户头像从数据库展示到前端

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月14日
    0135
  • 简单!代码原来是这样被CPU跑起来的

    CPU对我们来说既熟悉又陌生,熟悉的是我们知道代码是被CPU执行的,当我们的线上服务出现问题时可能首先会查看CPU负载情况。陌生的是我们并不知道CPU是如何执行代码的,它对我们的代…

    数据库 2023年6月6日
    0124
  • [springmvc]ajax异步请求数据详细简单

    10.Ajax异步请求 Ajax即 Asynchronous Javascript And XML(异步JavaScript和XML在 2005年被Jesse James Garr…

    数据库 2023年6月16日
    0121
  • 微信小程序二维码

    一、获取小程序码的三个接口 不同的接口对应不同的业务场景,接口B用的较多,接口C官方不推荐使用,也就是说根据需码量来决定选择A接口还是B接口。 (1)、接口 A: 适用于需要的码数…

    数据库 2023年6月6日
    0182
  • SpringWeb 拦截器

    前言 spring拦截器能帮我们实现验证是否登陆、验签校验请求是否合法、预先设置数据等功能,那么该如何设置拦截器以及它的原理如何呢,下面将进行简单的介绍 1.设置 HandlerI…

    数据库 2023年6月16日
    0129
  • 对于Java循环中的For和For-each,哪个更快

    Which is Faster For Loop or For-each in Java 对于Java循环中的For和For-each,哪个更快 通过本文,您可以了解一些集合遍历技…

    数据库 2023年6月11日
    0139
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球