【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