该文章讲述了如果在k8s中部署stolon。各大名站内外收集资料并经过多次试验后输出本文章,觉着有用的小伙伴点赞、转发,感谢!
代码如下(示例):
[root@k8s1 ~]# yum install -y git
代码如下(示例):
#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
#附件中提供pv 、pvc 、sc等yaml文件
yuaml路径:\在k8s中部署stolon\postgres-on-k8s\postgres-install\stolon
[root@k8s3 ~]# yum install -y nfs-utils rpcbind
[root@k8s1 ~]# yum install -y nfs-utils
[root@k8s2 ~]# yum install -y nfs-utils
[root@k8s3 ~]# mkdir -p /root/stolon-data/
[root@k8s3 ~]# chmod -R 777 /root/stolon-data/
[root@k8s3 ~]# vim /etc/exports
/root/stolon-data 192.168.0.0/24(sync,rw,no_root_squash)
[root@k8s3 ~]# systemctl start rpcbind
[root@k8s3 ~]# systemctl enable rpcbind
[root@k8s3 ~]# systemctl start nfs
[root@k8s3 ~]# systemctl enable 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
从网上拉取镜像包:
[root@k8s1 ~]# docker pull sorintlab/stolon:master-pg10
拉取本地镜像:附件中包含
[root@k8s1 ~]# docker pull sorintlab/stolon:master-pg10
代码如下(示例):
[root@k8s1 ~] cd postgres-on-k8s/postgres-install/stolon/
[root@k8s1 ~] kubectl apply -f role.yaml
[root@k8s1 ~] kubectl apply -f role-binding.yaml
代码如下(示例):
#该命令执行过程中创建了一个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
#创建一个为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
部署keeper之前先创建好sc->pv->pvc,keeper是PostgreSQL实例的主体。期间需要使用到共享存储。
[root@k8s1 ~] kubectl create -f sc-stolon-local.yaml
[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 是用户存储的一种声明,PVC 和 Pod 比较类似,Pod 消耗的是节点,PVC 消耗的是 PV 资源,Pod 可以请求 CPU 和内存,而 PVC 可以请求特定的存储空间和访问模式。
[root@k8s1 ~] kubectl create -f pvc.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
[root@k8s1 ~] kubectl apply -f stolon-keeper.yaml
statefulset.apps/stolon-keeper created
#这将创建一个为stolon代理定义2个副本的部署。您可以更改部署定义中的副本数
[root@k8s1 ~] kubectl create -f stolon-proxy.yaml
#代理服务用作具有固定ip和dns名称的入口点,用于访问代理。
[root@k8s1 ~] kubectl create -f stolon-proxy-service.yaml
[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
[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