不忘初心,
牢记使命。

Kubernetes部署高可用PostgreSQL

2021-08-21 大聪明 0评论 67 0喜欢

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

发表评论 取消回复

电子邮件地址不会被公开。

请输入正确格式的qq邮箱
请输入以http或https开头的URL,格式如:https://libo_sober.top