关于数据库:给小白的-PostgreSQL-容器化部署教程上

3次阅读

共计 4493 个字符,预计需要花费 12 分钟才能阅读完成。

作者:王志斌

编辑:钟华龙

本文来自社区小伙伴 王志斌 的投稿。从小白的角度,带你一步步实现将 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 开源社区向本文的投稿作者表示感谢!也期待更多的社区小伙伴的投稿~

正文完
 0