k8s部署pgsql集群

一、前言

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

二、部署pgsql集群

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

参考:

下载以下五个yaml文件

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

vi configmap.yaml

docker_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: 30Gi
    storageClass: pgsql-pv    #配置挂载的pv storageClass
  numberOfInstances: 3
  users:
    zalando:  # database owner
    - superuser
    - createdb
    foo_user: []  # role for application foo
  databases:
    foo: zalando  # dbname: owner
  preparedDatabases:
    bar: {}
  postgresql:
    version: "14"      #指定pgsql版本
 vi postgres-operator.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-operator
  labels:
    application: postgres-operator
spec:
  replicas: 1
  strategy:
    type: "Recreate"
  selector:
    matchLabels:
      name: postgres-operator
  template:
    metadata:
      labels:
        name: postgres-operator
    spec:
      serviceAccountName: postgres-operator
      containers:
      - name: postgres-operator
        image: xxx.xxx.com/base_image/postgres-operator:v1.10.1  #配置为本地镜像地址
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 100m
            memory: 250Mi
          limits:
            cpu: 500m
            memory: 500Mi
        securityContext:
          runAsUser: 1000
          runAsNonRoot: true
          readOnlyRootFilesystem: true
          allowPrivilegeEscalation: false
        env:
        # provided additional ENV vars can overwrite individual config map entries
        - name: CONFIG_MAP_NAME
          value: "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: 30Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /share/k8s/test-pgsql/pgsql0
    server: 10.1.60.6
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pgsql-1
spec:
  storageClassName: pgsql-pv    #定义了存储类型
  capacity:
    storage: 30Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /share/k8s/test-pgsql/pgsql1
    server: 10.1.60.6
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pgsql-2
spec:
  storageClassName: pgsql-pv    #定义了存储类型
  capacity:
    storage: 30Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /share/k8s/test-pgsql/pgsql2
    server: 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 default

apiVersion: v1
imagePullSecrets:       #新增
- name: pgsql-secret   #新增
kind: ServiceAccount
metadata:
  creationTimestamp: "2024-01-25T01:01:12Z"
  name: default
  namespace: default
  resourceVersion: "75328624"
  selfLink: /api/v1/namespaces/default/serviceaccounts/default
  uid: 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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值