作者:王志斌

编辑:钟华龙

本文来自社区小伙伴 王志斌 的投稿。从小白的角度,带你一步步实现将 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、修改各自主机名并修改主机列表

  1. #192.168.137.2
  2. vi /etc/hostname
  3. master
  4. cat >> /etc/hosts << EOF
  5. 192.168.137.2 master
  6. 192.168.137.3 node1
  7. 192.168.137.4 node2
  8. EOF
  9. #192.168.137.3
  10. vi /etc/hostname
  11. node1
  12. cat >> /etc/hosts << EOF
  13. 192.168.137.2 master
  14. 192.168.137.3 node1
  15. 192.168.137.4 node2
  16. EOF
  17. #192.168.137.4
  18. vi /etc/hostname
  19. node2
  20. cat >> /etc/hosts << EOF
  21. 192.168.137.2 master
  22. 192.168.137.3 node1
  23. 192.168.137.4 node2
  24. EOF

2、其他配置

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

  1. systemctl stop firewalld && systemctl disable firewalld
  2. sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0
  3. swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab
  4. yum install ntpdate -y && ntpdate time.windows.com

3、配置内核参数

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

  1. cat > /etc/sysctl.d/k8s.conf <<EOF
  2. net.bridge.bridge-nf-call-ip6tables = 1
  3. net.bridge.bridge-nf-call-iptables = 1
  4. EOF
  5. sysctl --system

准备 Docker

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

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

2、添加软件源信息

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

3、更新并安装 Docker-CE

  1. yum makecache fast
  2. yum -y install docker-ce

4、开启 Docker 服务

  1. systemctl start docker && systemctl enable docker
  2. # 可以通过修改 daemon 配置文件 /etc/docker/daemon.json 来使用加速器
  3. mkdir -p /etc/docker
  4. tee /etc/docker/daemon.json <<-'EOF'
  5. {
  6. "registry-mirrors": ["https://s2q9fn53.mirror.aliyuncs.com"]
  7. }
  8. EOF
  9. systemctl daemon-reload && sudo systemctl restart docker

Kubernetes 准备

1、初始化

添加 Kubernetes 阿里云的 YUM 源。

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

初始化集群。

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

其他节点加入集群。

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

2、部署 CNI 网络插件

安装 flannel 网络插件。

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

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

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

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

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

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

  1. kubectl get nodes

节点状态正常。

3、查看节点

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

4、创建默认 storageclass

  1. vi sc.yml
  2. kind: StorageClass
  3. apiVersion: storage.k8s.io/v1
  4. metadata:
  5. name: fast-disks
  6. provisioner: kubernetes.io/no-provisioner
  7. volumeBindingMode: WaitForFirstConsumer
  8. [root@master ~]# kubectl apply -f sc.yml
  9. storageclass.storage.k8s.io/local-storage create

设置为默认。

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

5、去除污点

添加 尽量不调度 PreferNoSchedule 。

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

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

  1. 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. vue2实现搜索结果中的搜索关键字高亮

    // 筛选变色 brightenKeyword(val, keyword) { val = val + ''; if (val.indexOf(keyword) !== -1 && k ...

  2. 富文本编辑器CKeditor的配置和图片上传,看完不后悔

    CKeditor是一款富文本编辑器,本文将用极为简单的方式介绍一下它的使用和困扰大家很久的图片上传问题,要有耐心. 第一步:如何使用 1.官网下载https://ckeditor.com/ckedit ...

  3. nodejs教程---基于expressJs框架,实现文件上传(upload)?

    文件上传功能在nodejs初期是一件很难实现的功能,之后出现了formidable勉强能解决这个问题,但是express框架出现之后基于这个框架开发的中间件有更好的方法来处理文件上传,这个中间件就是m ...

  4. python的蟒蛇绘制

    代码: #PythonDraw.py import turtle turtle.setup(650,350,200,200) turtle.penup() turtle.fd(-250) turtle ...

  5. numpy---(精简)

    numpy get started 导入numpy库, 并查看版本 import numpy as np np.__version__ '1.14.3' # pyplot显示画图, 数据分析与可视化 ...

  6. mysql发展历程 各分支版本溯源

    首先为什么要了解mysql的历史,了解一个软件的前生后世有时候还是很有必要,特别是对于走在架构之路或者是想深入了解一个软件的时候,在不同版本中由于进行了很多的改进或者说加入了新的功能,也有可能是软件本 ...

  7. Python学习笔记.md

    Python学习笔记 1.变量类型 x=5 int x="ss" string x='a' string x=True bool #查看变量类型 type(x) 2.字符串常用操作 ...

  8. Prometheus+Grafana安装搭建

    介绍 Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB).Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本. 2016年 ...

  9. golang常用库包:Go依赖注入(DI)工具-wire使用

    google 出品的依赖注入库 wire:https://github.com/google/wire 什么是依赖注入 依赖注入 ,英文全名是 dependency injection,简写为 DI. ...

  10. 阶段性总结linux(1)

    学习安装linux系统 [网络连接方式] 桥接 ,好比所有人都在25期教室,公用这个教室的局域网段 192.168.11.0~192.168.11.255 教室内有60个同学,插上了网线,所有人都是 ...