文章目录
前言一、部署准备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