如何在k8s(kubernetes)中部署postgresql的高可用stolon

it2024-11-03  6

文章目录

前言一、部署准备1.准备k8s集群①集群内的k8s版本必须相同②集群内docker版本必须相同 2.准备git下载工具3.从github下载yaml文件4.也可以使用本地yaml文件5.下载并配置nfs共享存储工具①该实验在(k8s3)中安装共享存储服务端②在集群内其它机器安装客户端③在服务端(k8s3)创建共享目录并授予777权限④修改服务端(k8s3)nfs的配置文件⑤启动RPC、NFS 服务⑥测试nfs是否能被客户端挂载 6.下载docker镜像,该镜像包包含pg10和stolon 二、开始部署1.创建角色2.初始化集群3.创建监控4.部署stolon的管理员keeper①创建sc(storageClass),通俗解释相当于一个组。②创建pv(Persistent Volume)持久化存储卷,定义一个存储卷的。③创建pvc(PersistentVolumeClaim)持久化卷声明④创建secret.yaml⑤创建stolon管理员keeper 5.创建代理6.创建代理服务7.本地下载pg并安装8.测试数据库连接 注意事项


前言

该文章讲述了如果在k8s中部署stolon。各大名站内外收集资料并经过多次试验后输出本文章,觉着有用的小伙伴点赞、转发,感谢!


一、部署准备

1.准备k8s集群

①集群内的k8s版本必须相同

②集群内docker版本必须相同

2.准备git下载工具

代码如下(示例):

[root@k8s1 ~]# yum install -y git

3.从github下载yaml文件

代码如下(示例):

#K8s版本1.9之前使用: [root@k8s1 ~]# git clone https://github.com/tzkoba/postgres-on-k8s.git #K8s版本1.9之后使用: [root@k8s1 ~]# git clone https://github.com/sorintlab/stolon.git

4.也可以使用本地yaml文件

#附件中提供pv 、pvc 、sc等yaml文件 yuaml路径:\在k8s中部署stolon\postgres-on-k8s\postgres-install\stolon

5.下载并配置nfs共享存储工具

①该实验在(k8s3)中安装共享存储服务端

[root@k8s3 ~]# yum install -y nfs-utils rpcbind

②在集群内其它机器安装客户端

[root@k8s1 ~]# yum install -y nfs-utils [root@k8s2 ~]# yum install -y nfs-utils

③在服务端(k8s3)创建共享目录并授予777权限

[root@k8s3 ~]# mkdir -p /root/stolon-data/ [root@k8s3 ~]# chmod -R 777 /root/stolon-data/

④修改服务端(k8s3)nfs的配置文件

[root@k8s3 ~]# vim /etc/exports /root/stolon-data 192.168.0.0/24(sync,rw,no_root_squash)

⑤启动RPC、NFS 服务

[root@k8s3 ~]# systemctl start rpcbind [root@k8s3 ~]# systemctl enable rpcbind [root@k8s3 ~]# systemctl start nfs [root@k8s3 ~]# systemctl enable nfs

⑥测试nfs是否能被客户端挂载

[root@k8s1 ~]# mkdir -p stolon [root@k8s1 ~]# mount 192.168.0.151:/root/stolon-data /root/stolon [root@k8s1 ~]# df -h 192.168.0.151:/root/stolon-data/pv-local-stolon-0 37G 25G 13G 67% /root/stolon

6.下载docker镜像,该镜像包包含pg10和stolon

从网上拉取镜像包:

[root@k8s1 ~]# docker pull sorintlab/stolon:master-pg10

拉取本地镜像:附件中包含

[root@k8s1 ~]# docker pull sorintlab/stolon:master-pg10

二、开始部署

1.创建角色

代码如下(示例):

[root@k8s1 ~] cd postgres-on-k8s/postgres-install/stolon/ [root@k8s1 ~] kubectl apply -f role.yaml [root@k8s1 ~] kubectl apply -f role-binding.yaml

2.初始化集群

代码如下(示例):

#该命令执行过程中创建了一个pod来初始化集群,初始化成功后pod被删除。 [root@k8s1 ~] kubectl run -i -t stolonctl --image=sorintlab/stolon:master-pg10 --restart=Never --rm -- /usr/local/bin/stolonctl --cluster-name=kube-stolon --store-backend=kubernetes --kube-resource-kind=configmap init If you don't see a command prompt, try pressing enter. Please enter 'yes' or 'no' Are you sure you want to continue? [yes/no] yes pod "stolonctl" deleted

3.创建监控

#创建一个为stolon监控,定义为2个副本。可以更改stolon-sentinel.yaml定义中的副本数. [root@k8s1 ~] kubectl create -f stolon-sentinel.yaml deployment.extensions/stolon-sentinel created

查看pod是否被创建:

[root@k8s1 ~] kubectl get pod NAME READY STATUS RESTARTS AGE stolon-sentinel-5cbc59c45-b8pd4 1/1 Running 0 62s stolon-sentinel-5cbc59c45-kchc7 1/1 Running 0 62s

4.部署stolon的管理员keeper

部署keeper之前先创建好sc->pv->pvc,keeper是PostgreSQL实例的主体。期间需要使用到共享存储。

①创建sc(storageClass),通俗解释相当于一个组。

[root@k8s1 ~] kubectl create -f sc-stolon-local.yaml

②创建pv(Persistent Volume)持久化存储卷,定义一个存储卷的。

[root@k8s1 ~] kubectl create -f pv.yaml

下方图片标记处是需要修改的内容: 执行pv.yaml文件会创建出两个pv,如下分割线以后内容。 name:该内容需要和服务端(k8s3)共享文件夹名相同; path:为服务端(k8s3)共享存储文件夹路径; 前面介绍过如何在服务端共享存储路径/root/stolon-data 在创建pv时需要提供多个共享文件夹,如只需两个副本则在(k8s3中)/root/stolon-data目录下再次创建两个文件夹分别为:pv-local-stolon-0 、 pv-local-stolon-1 。

③创建pvc(PersistentVolumeClaim)持久化卷声明

PVC 是用户存储的一种声明,PVC 和 Pod 比较类似,Pod 消耗的是节点,PVC 消耗的是 PV 资源,Pod 可以请求 CPU 和内存,而 PVC 可以请求特定的存储空间和访问模式。

[root@k8s1 ~] kubectl create -f pvc.yaml

④创建secret.yaml

secret.yaml内容解释:

apiVersion: v1 kind: Secret metadata: name: stolon type: Opaque data: password: aGlnaGdvCg== #Name:数据库的登录名 #Password:数据库登录密码,该密码需要base64加密后填入。

base64加/解密使用方法:

加密: $ echo highgo | base64 aGlnaGdvCg== 解密: $ echo aGlnaGdvCg== | base64 -d highgo

⑤创建stolon管理员keeper

[root@k8s1 ~] kubectl apply -f stolon-keeper.yaml statefulset.apps/stolon-keeper created

5.创建代理

#这将创建一个为stolon代理定义2个副本的部署。您可以更改部署定义中的副本数 [root@k8s1 ~] kubectl create -f stolon-proxy.yaml

6.创建代理服务

#代理服务用作具有固定ip和dns名称的入口点,用于访问代理。 [root@k8s1 ~] kubectl create -f stolon-proxy-service.yaml

7.本地下载pg并安装

[root@k8s1 ~] yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm [root@k8s1 stolon]# yum install postgresql10-server

8.测试数据库连接

[root@k8s1 stolon]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 192.168.0.1 <none> 443/TCP 4h39m stolon-proxy-service ClusterIP 192.168.0.35 <none> 5432/TCP 20m [root@k8s1 stolon]# psql --host 192.168.0.35 --port 5432 postgres -U stolon -W 用户 stolon 的口令: psql (10.13) 输入 "help" 来获取帮助信息. postgres=# \q

注意事项

①.当pv的容量大于pvc的需求时,pvc可以成功自动绑定pv; ②.当pv的容量小于pvc的需求时,pvc无法绑定该pv; ③.pv和pvc的绑定关系是一一对应的. ④.pv/pvc的创建顺序是:pv -> pvc -> pod ⑤.pv/pvc的销毁顺序是:pod -> pvc -> pv,顺序一定不要错

百度网盘链接可下载完整的yaml包: 链接:https://pan.baidu.com/s/1Kt91MYzFgXVQW0dylqrcPw 提取码:itit

最新回复(0)