作者:王志斌

编辑:钟华龙

本文来自社区小伙伴 王志斌 的投稿。从小白的角度,带你一步步实现将 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 容器化部署教程(上)的更多相关文章

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

    作者:王志斌 编辑:钟华龙 本文来自社区小伙伴 王志斌 的投稿.从小白的角度,带你一步步实现将 RadonDB PostgreSQL 集群部署到 Kubernetes 上.文章分为上下两部分,< ...

  2. Gogs的Docker容器化部署流程遇到的问题

    Gogs的Docker容器化部署流程遇到的问题   最近在学习CI/CD的一些方案,个人比较青睐容器化轻量级.CI方面一开始是想使用gitlab的,但是发现我自己买的服务器配置太低,内存根本不够(大写 ...

  3. .NET Core+MySql+Nginx 容器化部署

    .NET Core容器化@Docker .NET Core容器化之多容器应用部署@Docker-Compose .NET Core+MySql+Nginx 容器化部署 GitHub-Demo:Dock ...

  4. 浅谈surging服务引擎中的rabbitmq组件和容器化部署

    1.前言 上个星期完成了surging 的0.9.0.1 更新工作,此版本通过nuget下载引擎组件,下载后,无需通过代码build集成,引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎 ...

  5. 谈谈surging引擎的tcp、http、ws协议和如何容器化部署

    1.前言 分布式已经成为了当前最热门的话题,分布式框架也百花齐放,群雄逐鹿.从中心化服务治理框架,到去中心化分布式服务框架,再到分布式微服务引擎,这都是通过技术不断积累改进而形成的结果.esb,网关, ...

  6. 1. 容器化部署一套云服务 第一讲 Jenkins(Docker + Jenkins + Yii2 + 云服务器))

    容器化部署一套云服务系列 1. 容器化部署一套云服务之Jenkins 一.购买服务器 服务器

  7. angular应用容器化部署

    angular 应用容器化部署 Intro 我自己有做一个个人主页,虽然效果不怎么样(不懂设计的典型程序猿...),但是记录了我对于前端框架及工具的一些实践, 从开始只有一个 angularjs 制作 ...

  8. Flask容器化部署原理与实现

    本文将介绍Flask的部署方案:Flask + Nginx + uWSGI,并使用docker进行容器化部署,部署的实例来源 Flask开发初探,操作系统为ubuntu. Flask系列文章: Fla ...

  9. Ubuntu系统下容器化部署gitlab

    容器化部署gitlab 获取镜像文件 1. 下载镜像文件 docker pull beginor/gitlab-ce:-ce. 2. 创建GitLab 的配置 (etc) . 日志 (log) .数据 ...

随机推荐

  1. 从ES6重新认识JavaScript设计模式(三): 建造者模式

    1 什么是建造者模式? 建造者模式(Builder)是将一个复杂对象的构建层与其表示层相互分离,同样的构建过程可采用不同的表示. 建造者模式的特点是分步构建一个复杂的对象,可以用不同组合或顺序建造出不 ...

  2. java中匿名内部类的匿名构造函数是怎么用的

    java中匿名内部类的匿名构造函数是怎么用的下面的例子说明匿名内部类的匿名构造函数的用法 例2.7.2_0interface FigureMark_to_win {    void whoAmI(); ...

  3. 在Nginx或Tengine服务器上安装证书

    阿里云SSL证书服务支持下载证书并安装到Nginx.Tengine服务器上,本文介绍了证书安装的具体操作. 前提条件 已准备远程登录工具,例如PuTTY或者Xshell. 背景信息 本文档以CentO ...

  4. Android实现秒开效果

    0x01 创建SplashActivity 新建一个Activity,取名为SplashActivity 0x02 新建资源 在res/drawable下新建一个splash.xml文件和名为ig_s ...

  5. Masa Blazor in Blazor Day

    2022年第一场Blazor中文社区的开发者分享活动,我们的团队也全程参与其中,在议程中,也分享了我们团队的Blazor 管理后台模板,针对于Blazor,先科普一波,避免有些朋友不了解,Blazor ...

  6. Kubernetes探针原理详解

    前言: 分布式系统和微服务体系结构的挑战之一是自动检测不正常的应用程序,并将请求(request)重新路由到其他可用系统,恢复损坏的组件.健康检查是应对该挑战的一种可靠方法.使用 Kubernetes ...

  7. k8s pod故障分类与排查

    一.Pod故障状态基本有几种Pod状态 处于PendingPod状态 处于WaitingPod状态 处于ContainerCreatingPod状态 ImagePullBackOffPod状态 Cra ...

  8. SpringMVC基础原理

    1.拦截所有请求到DispatcherServlet 2.去寻找映射器 3.根据处理器适配器处理业务,返回视图 4.视图解析器解析显示视图

  9. Blazor Bootstrap 组件库 Toast 轻量弹窗组件介绍

    轻量级 Toast 弹窗 DEMO https://www.blazor.zone/toasts 基础用法: 用户操作时,右下角给予适当的提示信息 <ToastBox class="d ...

  10. Android四大组件——Activity——Activity之间通信上

    Activity之间的跳转有显式意图和隐式意图两种. 显式意图(显式Intent): //创建一个Intent对象,明确Intent跳转时的源Activity和目标Activity.参数一为当前Act ...