给小白的 PostgreSQL 容器化部署教程(上)

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

本文来自社区小伙伴 王志斌 的投稿。从小白的角度,带你一步步实现将 RadonDB PostgreSQL 集群部署到 Kubernetes 上。文章分为上下两部分,第一部分将为大家演示如何搭建一套 Kubernetes 环境,包括详细的配置调优等。

什么是 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

部署目标

目标:准备一套 Kubernetes 作为后续数据库部署环境。

主机名 IP 角色 备注 master 192.168.137.2 kubernetes master 去除污点 node1 192.168.137.3 kubernetes node node2 192.168.137.4 kubernetes node

配置操作系统

操作系统:CentOS 7

1、修改各自主机名并修改主机列表

#192.168.137.2
vi /etc/hostname
master
cat >> /etc/hosts << EOF
192.168.137.2 master
192.168.137.3 node1
192.168.137.4 node2
EOF

#192.168.137.3
vi /etc/hostname
node1
cat >> /etc/hosts << EOF
192.168.137.2 master
192.168.137.3 node1
192.168.137.4 node2
EOF

#192.168.137.4
vi /etc/hostname
node2
cat >> /etc/hosts << EOF
192.168.137.2 master
192.168.137.3 node1
192.168.137.4 node2
EOF

2、其他配置

关闭防火墙、关闭 SELinux、关闭 SWAP ,设置时间同步。

systemctl stop firewalld && systemctl disable firewalld

sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0

swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab

yum install ntpdate -y && ntpdate time.windows.com

3、配置内核参数

将桥接的 IPv4 流量传递到 iptables 的链。

cat > /etc/sysctl.d/k8s.conf <

准备 Docker

1、 安装必要的一些系统工具

yum install -y yum-utils device-mapper-persistent-data lvm2

2、添加软件源信息

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3、更新并安装 Docker-CE

yum makecache fast
yum -y install docker-ce

4、开启 Docker 服务

systemctl start docker && systemctl enable docker
可以通过修改 daemon 配置文件 /etc/docker/daemon.json 来使用加速器

mkdir -p /etc/docker
tee /etc/docker/daemon.json <

Kubernetes 准备

1、初始化

添加 Kubernetes 阿里云的 YUM 源。

cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install kubectl-1.20.0 kubelet-1.20.0 kubeadm-1.20.0
 && systemctl enable kubelet && systemctl start kubelet

初始化集群。

#master
kubeadm init --kubernetes-version=1.20.0  \
--apiserver-advertise-address=192.168.137.2  \
--image-repository registry.aliyuncs.com/google_containers  \
--service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

其他节点加入集群。

kubeadm join 192.168.137.2:6443 --token scw8xm.x5y7fck1via4mwc2 \
  --discovery-token-ca-cert-hash sha256:8944421887121b6a2ac32987d9d1c7786fe64316cebdf7a63b6048fba183cc67

2、部署 CNI 网络插件

安装 flannel 网络插件。

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

发送 admin.conf 到所有节点,可以在任何一个节点管理集群。

scp /etc/kubernetes/admin.conf root@node1:/etc/kubernetes/admin.conf
scp /etc/kubernetes/admin.conf root@node2:/etc/kubernetes/admin.conf

在 node 节点上加入环境变量。

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile

执行完成以后可以在任意 node 节点上管理集群,查看节点是否正常。

kubectl get nodes

给小白的 PostgreSQL 容器化部署教程(上)

节点状态正常。

3、查看节点

[root@node2 images]# kubectl label node node1 node-role.kubernetes.io/worker=worker
node/node1 labeled
[root@node2 images]# kubectl label node node2 node-role.kubernetes.io/worker=worker
node/node2 labeled

4、创建默认 storageclass

vi sc.yml

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
 name: fast-disks
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

[root@master ~]# kubectl apply -f sc.yml
storageclass.storage.k8s.io/local-storage create

设置为默认。

kubectl patch storageclass fast-disks -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

5、去除污点

添加 尽量不调度 PreferNoSchedule 。

kubectl taint nodes master node-role.kubernetes.io/master:PreferNoSchedule

去除污点 NoSchedule,最后一个 “-” 代表删除。

kubectl taint nodes master node-role.kubernetes.io/master:NoSchedule-

镜像的问题

RadonDB PostgreSQL Opeartor 的安装需要准备一些镜像,但编译镜像的步骤可以省略,社区已经在 dockerhub 已经构建好了 RadonDB PostgreSQL 所有依赖的镜像,直接使用即可。

至此,我们已经准备好了 Kuberentes 环境,下一期我们将带您进行 RadonDB PostgreSQL Operator 的部署。

作者简介:

王志斌,北京航空航天大学硕士,荣获PMP和NPDP专业认证,巨杉数据库认证讲师和PostgreSQL官方认证讲师,拥有PGCM、PCTP、SCDD、KCP、OBCA等相关认证。荣获工信部中国开源软件推进联盟PostgreSQL ACE以及PostgreSQL开源社区推动贡献奖,并参与编著《PostgreSQL高可用实战》。

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

Original: https://www.cnblogs.com/radondb/p/16326524.html
Author: RadonDB
Title: 给小白的 PostgreSQL 容器化部署教程(上)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505334/

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

(0)

大家都在看

  • 【StoneDB Class】入门第一课:数据库知识科普

    在没有出现数据库之前,数据存储在文本中,这种数据存储方式不管是管理还是查询,效率都是极其低下的,数据之间没有关联性。到了1970年,IBM研究员 E.F.Codd 发表了论文&#8…

    数据库 2023年5月24日
    087
  • [spring]spring和mybatis的整合与事务处理

    1.导包 junit junit 4.13.1 mysql mysql-connector-java 8.0.29 org.mybatis mybatis 3.5.3 org.sp…

    数据库 2023年6月16日
    093
  • Java面试题(四)–RabbitMQ

    1、MQ有哪些使用场景?(高频) 异步处理:用户注册后,发送注册邮件和注册短信。用户注册完成后,提交任务到 MQ,发送模块并行获取 MQ 中的任务。 系统解耦:比如用注册完成,再加…

    数据库 2023年6月16日
    083
  • 使用postman Mock后端响应

    使用postman Mock后端响应 接口文档开发与评审后,前后端各自依照标准进行开发,此时前端人员有以下选择: 使用工具自己mock构造后端数据验证已开发页面 在项目中自己编写添…

    数据库 2023年6月6日
    0102
  • java 论坛模块设计方案

    权限管理:点开二级菜单进入三级菜单显示 角色(基础权限)和按钮权限 角色(基础权限): 分角色组和角色,独立分配菜单权限和增删改查权限。(一个用户可以多个角色) 按钮权限: 给角色…

    数据库 2023年6月6日
    084
  • MySQL max() min() 函数取值错误

    今天日志出现异常,一步一步debug发现SQL语句返回值出错,进一步发现是max()函数返回出错。点击跳转解决办法,赶时间的朋友可以去获得答案。当然我还是希望大伙看看原由。 sel…

    数据库 2023年6月16日
    0180
  • Linux 服务管理

    Linux 服务管理 1. 基本介绍 服务的本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如mysqld,sshd,防火墙等,因此我们又称为守护线程…

    数据库 2023年6月6日
    0101
  • 如何有效管理产品生命周期(How to Effectively Manage a Product Lifecycle)

    本文翻译自文章:How to Effectively Manage a Product Lifecycle文章原文链接:https://medium.com/design-boot…

    数据库 2023年6月11日
    0174
  • SQL与数据库编程学习笔记-day2

    SQL与数据库编程学习笔记-day2 修改数据库密码; – 登出数据库(修改数据库密码必须在数据库外执行命令); * – Ps:登出命令:quit* 操作完…

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

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

    数据库 2023年6月16日
    0110
  • windows安装mysql8.0.29(ZIP解压安装版本)

    一. 下载mysql 8.0.29软件包 二. 解压,初始化安装 1,打开下载后文件所在目录,使用解压软件解压,打开文件夹!(如图,文件路径不要出现中文!) 2,创建my.ini文…

    数据库 2023年6月16日
    085
  • day03-拉取在线用户功能

    多用户即时通讯系统03 4.编码实现02 4.2功能实现-拉取在线用户 4.2.1思路分析 客户端想要知道在线用户列表,就要向服务器发送请求(Message),因为只有服务器端保持…

    数据库 2023年6月11日
    0166
  • 2 Java中 == 和 equals 和 hashCode 的区别

    ==是一个比较运算符; 若比较的是基本数据类型,则比较的是值; 若比较的是引用数据类型,则比较的是它们在内存中的内存地址。 说明:对象是存放在堆中,栈中存放的是对象的引用,因此==…

    数据库 2023年6月6日
    099
  • MySQL变量、流程控制和游标

    变量、流程控制和游标 变量 在MySQL数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果的数据 系统变量 变量由系统定义,属于服务器级别 […

    数据库 2023年5月24日
    069
  • 设计模式之(1)——简单工厂模式

    创建型模式:主要用于对象的创建; 结构型模式:用于处理类或者对象的组合; 行为型模式:用于描述类或对象怎样交互和分配职责; ————————————————————————————…

    数据库 2023年6月14日
    098
  • Mysql 一主一从

    1. 主从原理 1.1 主从介绍 所谓 mysql 主从就是建立两个完全一样的数据库,其中一个为主要使用的数据库,另一个为次要的数据库,一般在企业中,存放比较重要的数据的数据库服务…

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