PostgresSQL----基于Kubernetes部署PostgresSQL

【PostgresSQL----基于Kubernetes部署PostgresSQL】

文章目录

  • 一、创建SC、PV和PVC存储对象
    • [1.1 准备一个nfs服务器](#1.1 准备一个nfs服务器)
    • [1.2 编写SC、PV、PVC等存储资源文件](#1.2 编写SC、PV、PVC等存储资源文件)
    • [1.3 编写部署PostgresSQL数据库的资源声明文件](#1.3 编写部署PostgresSQL数据库的资源声明文件)
  • 二、部署PostgresSQL
    • [2.1 部署 PV、PVC等存储对象](#2.1 部署 PV、PVC等存储对象)
    • [2.2 部署PostgresSQL数据库](#2.2 部署PostgresSQL数据库)
    • [2.3 查看是否创建成功](#2.3 查看是否创建成功)

一、创建SC、PV和PVC存储对象

1.1 准备一个nfs服务器

若无nfs服务器,可参考 NFS----搭建NFS服务器 部署一个

1.2 编写SC、PV、PVC等存储资源文件

如下资源文件包含SC、PV、PVC资源的声明,主要修改以下几个位置

  • 命名空间
    命名空间需要修改为自己的namespace,一下配置中共有三处需要修改
  • nfs服务器ip地址
    设置nfs服务器ip地址即可
  • nfs 服务器供挂载目录
    设置将存储目录挂载nfs服务器上的目录路径
  • 存储空间大小
    存储空间大小根据实际需求设置,注意PV和PVC中存储空间大小要保持一致。
yaml 复制代码
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: sc-postgres
  namespace: my-namespacce                             # 命名空间
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name:  pv-postgres
  namespace: my-namespacce                             # 命名空间
  labels:
    pv: pv-postgres
spec:
  capacity:
    storage: 5Gi                                       # 存储空间大小
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: sc-postgres
  nfs:
    path: /path/to/nfs/server/                         # nfs 服务器供挂载目录
    server: nfs-server-ip                              # nfs 服务器ip地址
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-postgres
  namespace: my-namespacce                             # 命名空间
  labels:
    pvc: pvc-postgres
spec:
  storageClassName: sc-postgres
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi                                     # 存储空间大小
  selector:
    matchLabels:
      pv: pv-postgres

将修改后的配置文件,比如命名为:postgres_pvc_pv_sc.yaml

1.3 编写部署PostgresSQL数据库的资源声明文件

编写部署资源文件如下所示,包含deployment和service的声明,主要需要修改以下几个位置:

  • 命名空间
    命名空间需要统一修改为与上面部署PV和PVC一致的命名空间
  • 数据库配置
    配置数据库的用户名密码以及数据库名称,此外还需要设置最大连接数,默认的连接数为100,在实际应用中无法很难满足需求,因此这里最好在部署的时候直接设置
  • 对外开放端口
    对外开放端口用于外部访问的,在测试环境中通常是需要的,在生产环境中考虑安全性通常不需要的,这里按照测试环境的使用方式部署,即使用NodePort类型的Service,设置对外开发的端口即可

其他配置均无需修改,如修改,则需要和上面PV以及PVC等配置文件名称等统一。

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
  namespace: my-namespace                                 # 命名空间
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:latest
          env:
            - name: POSTGRES_USER
              value: postgres                             # 用户名
            - name: POSTGRES_PASSWORD
              value: postgres                             # 密码
            - name: POSTGRES_DB
              value: postgres                             # 数据库名
            - name: TZ
              value: Asia/Shanghai
            - name: POSTGRES_MAX_CONNECTIONS
              value: "20000"                              # 最大连接数
          ports:
            - containerPort: 5432
          volumeMounts:
            - name: postgres-storage
              mountPath: /var/lib/postgresql/data
      volumes:
        - name: postgres-storage
          persistentVolumeClaim:
            claimName: pvc-postgres

---
apiVersion: v1
kind: Service
metadata:
  name: postgres
  namespace: my-namespace                                 # 命名空间
spec:
  selector:
    app: postgres
  ports:
    - port: 5432
      protocol: TCP
      targetPort: 5432
      nodePort: 30101                                      # 对外开放端口
  type: NodePort

将修改后的配置文件保存为 postgres.yaml 文件

二、部署PostgresSQL

2.1 部署 PV、PVC等存储对象

执行如下命令即可

bash 复制代码
kubectl apply -f postgres_pvc_pv_sc.yaml

2.2 部署PostgresSQL数据库

执行如下命令即可

bash 复制代码
kubectl apply -f postgres.yaml

2.3 查看是否创建成功

执行如下命令,将my-namespace换成自己的命名空间,如果查看到pod状态已经running了,表示部署成功

bash 复制代码
kubectl get pod -n my-namespace
相关推荐
lwx9148526 小时前
Docker-安装SSH服务
docker·容器·ssh
艾伦_耶格宇9 小时前
【kubernetes - 1.28版本】-11 K8S核心组件
java·容器·kubernetes
时间售卖铺10 小时前
Docker实战:一键部署轻量级容器
运维·docker·云原生
月落汀兰10 小时前
拒绝配置写死镜像!K8s 存储卷与配置管理,PV/PVC、ConfigMap、Secret 实战避坑指南
运维·kubernetes
艾伦_耶格宇12 小时前
【kubernetes - 1.28版本】-10 K8S命名空间
云原生·容器·kubernetes
tedcloud12314 小时前
Docker Compose 部署 Uptime Kuma:配置 HTTPS、QQ 邮箱告警与数据备份
服务器·网络协议·ui·docker·容器·https·开源
syntaxsage15 小时前
Dive:Docker 镜像层可视化分析工具
运维·其他·docker·容器
java_logo15 小时前
Docker 部署 Samba:轻松搭建局域网文件共享
运维·docker·容器·文件共享·samba·smb·轩辕镜像
草莓熊Lotso15 小时前
【C++ 基于微服务的即时通讯系统】网关基建:cpp-httplib 与 WebSocketpp 从入门到实战
linux·开发语言·数据库·c++·redis·微服务·云原生
todoitbo1 天前
群晖NAS部署JmalCloud:Docker安装、文件管理、博客与公网访问完整教程
运维·docker·容器