Kubernetes部署高可用PostgreSQL
1.架构
采用了开源社区的stolon方案,stolon是一个用于PostgreSQL高可用性的云原生PostgreSQL管理器。它是云本地的,因为它可以让您在容器(kubernetes集成)中保持高可用性的PostgreSQL,但也可以在所有其他类型的基础设施(云IaaS、旧式基础设施等)上保持高可用性。

2.部署
本地文件链接(./stolon/)
如指定节点,请在stolon-keep.yaml stolon-sentinel.yaml stolon-proxy.yaml最后添加nodeSelect
2.1 创建角色
[root@k8s-master stolon] kubectl apply -f role.yaml
[root@k8s-master stolon] kubectl apply -f role-binding.yaml
2.2 初始化集群
#该命令执行过程中创建了一个pod来初始化集群,初始化成功后pod被删除。
[root@k8s-master stolon] kubectl run -i -t stolonctl --namespace=kube-public --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
2.3 创建监控
#创建一个为stolon监控,定义为2个副本。可以更改stolon-sentinel.yaml定义中的副本数.
[root@k8s-master stolon] 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
2.4 部署stolon的管理员keeper
直接挂在本地存储
①创建secret.yaml
secret.yaml内容解释:
apiVersion: v1
kind: Secret
metadata:
name: stolon
namespace: kube-public
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
#stolon-keeper.yaml
- name: data
hostPath:
# 修改为你要挂载的本地目录路径
path: /apps/observer/stolon/pgsql_data
type: DirectoryOrCreate
2.5 创建代理
#这将创建一个为stolon代理定义2个副本的部署。您可以更改部署定义中的副本数
[root@k8s1 ~] kubectl create -f stolon-proxy.yaml
2.6 创建代理服务
#代理服务用作具有固定ip和dns名称的入口点,用于访问代理。
[root@k8s1 ~] kubectl create -f stolon-proxy-service.yaml
2.7 测试
[root@k8s-master stolon] kubectl exec -ti stolon-keeper-0 /bin/bash
root@stolon-keeper-0:/# psql --host stolon-proxy-service --port 5432 postgres -U stolon -W
Password for user stolon:
psql (9.4.5, server 9.4.4)
Type "help" for help.
root@stolon-keeper-0:/# postgres=#
2.8 结果
[root@k8s-master harbor]# kubectl get podNAME READY STATUS RESTARTS AGEstolon-keeper-0 1/1 Running 0 143mstolon-keeper-1 1/1 Running 0 143mstolon-proxy-7c6c5fd47c-4qnc4 1/1 Running 0 143mstolon-proxy-7c6c5fd47c-rfjb5 1/1 Running 0 143mstolon-sentinel-8455d466f5-ghhj2 1/1 Running 0 143mstolon-sentinel-8455d466f5-kmblh 1/1 Running 0 143m