给小白的 PostgreSQL 容器化部署教程(上)
作者:王志斌
编辑:钟华龙
本文来自社区小伙伴 王志斌 的投稿。从小白的角度,带你一步步实现将 RadonDB PostgreSQL 集群部署到 Kubernetes 上。文章分为上下两部分,第一部分将为大家演示如何搭建一套 Kubernetes 环境,包括详细的配置调优等。
什么是 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
部署目标
目标:准备一套 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 <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
准备 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 <<-'EOF'
{
"registry-mirrors": ["https://s2q9fn53.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload && sudo systemctl restart docker
Kubernetes 准备
1、初始化
添加 Kubernetes 阿里云的 YUM 源。
cat <<EOF > /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

节点状态正常。
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 开源社区向本文的投稿作者表示感谢!也期待更多的社区小伙伴的投稿~
给小白的 PostgreSQL 容器化部署教程(上)的更多相关文章
- 给小白的 PG 容器化部署教程(下)
作者:王志斌 编辑:钟华龙 本文来自社区小伙伴 王志斌 的投稿.从小白的角度,带你一步步实现将 RadonDB PostgreSQL 集群部署到 Kubernetes 上.文章分为上下两部分,< ...
- Gogs的Docker容器化部署流程遇到的问题
Gogs的Docker容器化部署流程遇到的问题 最近在学习CI/CD的一些方案,个人比较青睐容器化轻量级.CI方面一开始是想使用gitlab的,但是发现我自己买的服务器配置太低,内存根本不够(大写 ...
- .NET Core+MySql+Nginx 容器化部署
.NET Core容器化@Docker .NET Core容器化之多容器应用部署@Docker-Compose .NET Core+MySql+Nginx 容器化部署 GitHub-Demo:Dock ...
- 浅谈surging服务引擎中的rabbitmq组件和容器化部署
1.前言 上个星期完成了surging 的0.9.0.1 更新工作,此版本通过nuget下载引擎组件,下载后,无需通过代码build集成,引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎 ...
- 谈谈surging引擎的tcp、http、ws协议和如何容器化部署
1.前言 分布式已经成为了当前最热门的话题,分布式框架也百花齐放,群雄逐鹿.从中心化服务治理框架,到去中心化分布式服务框架,再到分布式微服务引擎,这都是通过技术不断积累改进而形成的结果.esb,网关, ...
- 1. 容器化部署一套云服务 第一讲 Jenkins(Docker + Jenkins + Yii2 + 云服务器))
容器化部署一套云服务系列 1. 容器化部署一套云服务之Jenkins 一.购买服务器 服务器
- angular应用容器化部署
angular 应用容器化部署 Intro 我自己有做一个个人主页,虽然效果不怎么样(不懂设计的典型程序猿...),但是记录了我对于前端框架及工具的一些实践, 从开始只有一个 angularjs 制作 ...
- Flask容器化部署原理与实现
本文将介绍Flask的部署方案:Flask + Nginx + uWSGI,并使用docker进行容器化部署,部署的实例来源 Flask开发初探,操作系统为ubuntu. Flask系列文章: Fla ...
- Ubuntu系统下容器化部署gitlab
容器化部署gitlab 获取镜像文件 1. 下载镜像文件 docker pull beginor/gitlab-ce:-ce. 2. 创建GitLab 的配置 (etc) . 日志 (log) .数据 ...
随机推荐
- JavaScript 的Date构造函数太迷惑了。。。
1 new Date(2021,0,1,0,0,0,0) ===> Fri Jan 01 2021 00:00:00 GMT+0800 (中国标准时间) 2 new Date(2021,1,1, ...
- 用Exception类捕获所有异常的技术是怎么用的?
3.用Exception类捕获所有异常 马克-to-win:注意,一个事实是:Exception类是所有其他异常类的父类,所以Exception类能捕获所有的异常.马克-to-win:问题是用Exc ...
- Android 预置APK
1. 预置apk,使其不可卸载 第一步: 在 "/vendor/huawei/packages/apps" 目录下创建一个对应名称的文件夹. 第二步: 将 ...
- 字符串反转&说反话
题目描述 写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串.(字符串长度不超过1000) 输入描述: 输入N个字符 输出描述: 输出该字符串反转后的字符串 示例1 输入 abcd 输出 d ...
- JavaScript实现有农历和节气节假日的日历
运行效果: 源代码: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content ...
- vue里面v-for显示红色波浪线
vue里面使用v-for代码显示红色的波浪线,解决办法: before: <div v-for="tmsgs in msg.message"></div> ...
- Springboot集成cache的key生成策略
代码接上文:深度理解springboot集成redis缓存之源码解析 ## 1.使用SpEL表达式 @Cacheable(cacheNames = "emp",key = &quo ...
- 帝国CMS灵动标签调用包含指定短语关键词关键字文章的语法
[e:loop={"select * from phome_ecms_news where title like '%这里是关键词%' and checked=1 order by news ...
- VirtualBox安装Kali
VirtualBox安装Kali 下载VBox 去Virtual Box官网下载(根据操作系统选择版本,此处以Windows为例) 打开安装程序进行安装即可 安装Kali 去Kali Linux官网下 ...
- Go Slice Tricks Cheat Sheet、Go 切片使用小妙招
AppendVector. Copy. Cut. Delete. Delete without preserving order. Cut (GC). Delete (GC). Delete with ...