首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于pgpool的Kubernetes postgres复制

基于pgpool的Kubernetes postgres复制
EN

Stack Overflow用户
提问于 2019-11-19 19:17:13
回答 1查看 2.8K关注 0票数 0

试图在kubernetes (https://github.com/paunin/PostDock/tree/master/k8s/example2-single-statefulset)部署postgres,

  1. 使用pgpool(2个副本)和1个postgres-主荚和2个从荚。
代码语言:javascript
复制
kubectl get pods -n postgres
NAME                                       READY   STATUS    RESTARTS   AGE
psql-db-pgpool-8****c-7**k             1/1     Running   0          35d
psql-db-pgpool-8****c-m**5             1/1     Running   0          35d
psql-db-node-0                         1/1     Running   0          35d
psql-db-node-1                         1/1     Running   0          35d
psql-db-node-2                         1/1     Running   0          20h
  1. 使用postgres用户从主postgres db创建用户"test“。
  2. 当试图从豆荚内连接时(节点-0),通过用户“测试”身份验证是成功的。
代码语言:javascript
复制
root@postgres-db-node-0:/# psql -h localhost postgres -U test
psql (11.4 (Debian 11.4-1.pgdg90+1))
Type "help" for help.

postgres=> \l
  1. 当试图连接kubernetes集群的NodePort IP & NodePort时,新用户"test“使用pool_passwd文件的身份验证失败,不包含用于”测试“的条目。
代码语言:javascript
复制
psql -h NODE_IP -U test -d postgres --port NODE_PORT
psql: FATAL:  md5 authentication failed
DETAIL:  pool_passwd file does not contain an entry for "test"
  1. 登录到pgpool吊舱以找出
代码语言:javascript
复制
root@psql-db-pgpool-8****c-7**k:/# cat /usr/local/etc/pool_passwd
user1:md5****422f
replica_user:md5****3

在数据库中创建的新用户"test“没有反映在pgpool中。它是否以这种方式工作,每次创建新用户时都要创建和更新pgpool?或者我是不是遗漏了这个用户更新的东西。

EN

回答 1

Stack Overflow用户

发布于 2019-11-20 11:25:46

您部署的postgres示例使用秘密对象存储用户和密码凭据。这是管理kubernetes部署中敏感数据的推荐方法。

本例中有以下使用说明

  • 通过kubectl create -f ./namespace/创建命名空间
  • 创建信任:kubectl create -f ./configs/
  • 创建卷kubectl create -f ./volumes/
  • 创建服务kubectl create -f ./services/
  • 创建节点kubectl create -f ./nodes/
  • 创建pgpool kubectl create -f ./pgpool/

如果您按照正确的顺序跟踪它们,则在从mysystem-secret调用kubectl create -f ./configs/时创建configs/secret.yml秘密对象。

代码语言:javascript
复制
apiVersion: v1
kind: Secret
metadata:
  namespace: mysystem
  name: mysystem-secret
type: Opaque
data:
  app.db.user: d2lkZQ== #wide
  app.db.password: cGFzcw== #pass
  app.db.cluster.replication.user: cmVwbGljYV91c2Vy #replica_user
  app.db.cluster.replication.password: cmVwbGljYV9wYXNz #replica_pass
  app.db.pool.users: d2lkZTpwYXNz #wide:pass
  app.db.pool.pcp.user: cGNwX3VzZXI= #pcp_user
  app.db.pool.pcp.password: cGNwX3Bhc3M= #pcp_pass

注意,每个编码密码旁边的注释都是解码密码,因此在生产设置中应该避免它。

然后,来自mysystem-secret的用户和密码凭据在kubectl create -f ./nodes/kubectl create -f ./pgpool/中作为环境值使用,这些值位于所有副本中,可用于连接到数据库。

代码语言:javascript
复制
...
            - name: "POSTGRES_USER"
              valueFrom:
                secretKeyRef:
                  name: mysystem-secret
                  key: app.db.user
            - name: "POSTGRES_PASSWORD"
              valueFrom:
                secretKeyRef:
                  name: mysystem-secret
                  key: app.db.password
...

如果要使用自己的用户和密码,则需要修改configs/secret.yml文件,并用base64编码的密码替换要修改的密码。

您可以使用以下命令轻松地将任何密码编码为base64:

代码语言:javascript
复制
echo -n 'admin' | base64
YWRtaW4=
echo -n '1f2d1e2e67df' | base64
MWYyZDFlMmU2N2Rm

更新:

要添加在集群部署后使用pgpool的其他用户,可以使用工具postgres算子。用户通过exec手动添加到pod,然后在本地创建,将不会传播到其他节点。

按照这些指令安装Postgres操作符(pgo ),并将其配置为与kubernetes一起工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58941380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档