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


    作者:王志斌

    编辑:钟华龙

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

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

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

    大体步骤:

    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
    

    挂载分区,创建新的挂载点。

    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
    

    file

    安装静态本地盘控制器

    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
    

    file

    部署数据库集群

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

    file

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

    file

    可以看到图中为 3 节点集群。至此,RadonDB PostgreSQL 容器化数据库搭建完成。

    引用链接

    1.local-static-provisioner:https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner

    致谢

    RadonDB 开源社区向本文的投稿作者表示感谢!也期待更多的社区小伙伴的投稿~

  • 相关阅读:
    聊聊 Redis 高可用原理
    8.3 NtGlobalFlag
    数据分析-Pandas数据探查初步柱状图
    ComPDFKit PDF SDK Crack
    快速入手node.js
    Django(三)接口自动化平台HttpRunnerManager(2)基本使用介绍
    Java8新特性:Lambda表达式、函数式接口以及方法引用
    Python学习之路02 之分支结构
    游戏中的资源动态加载
    Adaptive AUTOSAR Diagnostic Manager模块介绍(一)
  • 原文地址:https://www.cnblogs.com/radondb/p/16337460.html