当前位置: 首页 > news >正文

k8s部署pgsql集群

一、前言

        本教程是使用zalando/postgres-operator部署的pgsql集群,部署的pgsql集群有两个svc,分别用于只读从节点的svc和读写主节点的svc

二、部署pgsql集群

提前在github上下载部署pgsql-operator部署需要的文件

参考:

下载以下五个yaml文件

下载完成后编辑以下文件内容

vi configmap.yamldocker_image: xxx.xxx.com/base_image/spilo:3.0    #变更为自身的镜像地址
vi minimal-postgres-manifest.yaml apiVersion: "acid.zalan.do/v1"
kind: postgresql
metadata:name: acid-minimal-cluster
spec:teamId: "acid"volume:size: 30GistorageClass: pgsql-pv    #配置挂载的pv storageClassnumberOfInstances: 3users:zalando:  # database owner- superuser- createdbfoo_user: []  # role for application foodatabases:foo: zalando  # dbname: ownerpreparedDatabases:bar: {}postgresql:version: "14"      #指定pgsql版本
 vi postgres-operator.yaml apiVersion: apps/v1
kind: Deployment
metadata:name: postgres-operatorlabels:application: postgres-operator
spec:replicas: 1strategy:type: "Recreate"selector:matchLabels:name: postgres-operatortemplate:metadata:labels:name: postgres-operatorspec:serviceAccountName: postgres-operatorcontainers:- name: postgres-operatorimage: xxx.xxx.com/base_image/postgres-operator:v1.10.1  #配置为本地镜像地址imagePullPolicy: IfNotPresentresources:requests:cpu: 100mmemory: 250Milimits:cpu: 500mmemory: 500MisecurityContext:runAsUser: 1000runAsNonRoot: truereadOnlyRootFilesystem: trueallowPrivilegeEscalation: falseenv:# provided additional ENV vars can overwrite individual config map entries- name: CONFIG_MAP_NAMEvalue: "postgres-operator"# In order to use the CRD OperatorConfiguration instead, uncomment these lines and comment out the two lines above# - name: POSTGRES_OPERATOR_CONFIGURATION_OBJECT#  value: postgresql-operator-default-configuration# Define an ID to isolate controllers from each other# - name: CONTROLLER_ID#   value: "second-operator"imagePullSecrets:- name: pgsql-secret       #配置拉取本地镜像的secreet

配置本地镜像secret

kubectl create secret docker-registry pgsql-secret --docker-server='https://xxx.xxx.com' --docker-username=xxx --docker-password=xxxx

配置pv存储

vi pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: pgsql-0
spec:storageClassName: pgsql-pv    #定义了存储类型capacity:storage: 30GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /share/k8s/test-pgsql/pgsql0server: 10.1.60.6
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pgsql-1
spec:storageClassName: pgsql-pv    #定义了存储类型capacity:storage: 30GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /share/k8s/test-pgsql/pgsql1server: 10.1.60.6
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pgsql-2
spec:storageClassName: pgsql-pv    #定义了存储类型capacity:storage: 30GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /share/k8s/test-pgsql/pgsql2server: 10.1.60.6

启动pgsql-operator服务

kubectl apply -f api-service.yaml  
kubectl apply -f configmap.yaml 
kubectl apply -f operator-service-account-rbac.yaml  
kubectl apply -f postgres-operator.yaml

因为operator的原因需要配置一个默认的secret

kubectl edit serviceaccount defaultapiVersion: v1
imagePullSecrets:       #新增
- name: pgsql-secret   #新增
kind: ServiceAccount
metadata:creationTimestamp: "2024-01-25T01:01:12Z"name: defaultnamespace: defaultresourceVersion: "75328624"selfLink: /api/v1/namespaces/default/serviceaccounts/defaultuid: 1b6408a8-80d6-40b5-8020-3d52eff75ec0
secrets:
- name: default-token-zl4vw

部署pgsql集群

kubectl apply -f pv.yaml
kubectl apply -f minimal-postgres-manifest.yaml

至此部署完成

获取pgsql集群的初始密码(用户名为:pgsql)

kubectl get secret postgres.acid-minimal-cluster.credentials.postgresql.acid.zalan.do -o 'jsonpath={.data.password}' | base64 -d

注意:该pgsql初始密码不能变更,因为是保存在了secret中的,可以创建其他用户并设置密码使用

若是需要删除则执行以下命令

kubectl delete postgresql acid-minimal-cluster

更多部署方式参考:https://github.com/zalando/postgres-operator/blob/master/docs/quickstart.md

configmap配置项参数参考:https://github.com/zalando/postgres-operator/blob/master/docs/reference/operator_parameters.md

http://www.dtcms.com/a/353500.html

相关文章:

  • 【Spring Cloud 微服务】5.架构的智慧枢纽:深度剖析 Nacos 注册中心
  • K8s持久化存储:PV与PVC
  • K8s 二次开发漫游录
  • 前端-npm和yarn的区别
  • 时序数据库的 LSM 树介绍
  • 计算机网络——DNS,ARP,RARP,DHCP,ICMP
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘websockets’问题
  • 时序数据库全景指南:从场景选型到内核拆解
  • Linux(十九)——CPU、I/O、网络与内核参数调优指南
  • 字库原理 GB2312-80
  • rk3588开发板最新kernel6.1下载(RK3588SDK源码下载)和环境搭建
  • 基于结构化码本的分层DNN框架用于高效语音增强
  • 第18章|变量:把数据装进“盒子”的正确方式
  • 【STM32】将 FreeRTOS移植到STM32F103RCT6 详细流程
  • 【开发配置】GitLab CR(Code Review)规则配置清单
  • 论文翻译:BRILLM: BRAIN-INSPIRED LARGE LANGUAGE MODEL
  • 在Excel和WPS表格中通过查找替换对单元格批量强制换行
  • 【C++】map 容器的使用
  • 论文阅读:Gorilla: Large Language Model Connected with Massive APIs
  • Python基础:PyMySQL
  • 音视频开发学习路线梳理(附 GitHub 仓库)
  • 达梦数据库-控制文件 (二)
  • FPGA开发流程
  • 一键搭建开发环境:制作bash shell脚本
  • Apple Silicon Mac 上解决 Docker 平台不匹配和 QEMU 段错误问题
  • 腾讯云服务器重启卡住:原因分析与底层原理详解
  • AI-调查研究-62-机器人 机械臂五大应用场景详解:从焊接到手术,从农田到太空
  • Knife4j 文档展示异常的小坑
  • GBDT(Gradient Boosting Decision Tree,梯度提升决策树)总结梳理
  • 如何设置 Lustre 文件系统并在其上运行 PostgreSQL