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

文章目录

  • 前言
  • 一、部署准备
      • 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)共享存储文件夹路径;
如何在k8s(kubernetes)中部署postgresql的高可用stolon_第1张图片
前面介绍过如何在服务端共享存储路径/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

你可能感兴趣的:(docker,kubernetes,postgresql)