参考资料
官方镜像仓库地址
https://hub.docker.com/_/postgres
local-path-provisioner
https://github.com/rancher/local-path-provisioner
开始安装
- 安装 local-path-provisioner
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.36/deploy/local-path-storage.yaml - 安装 postgresql
apiVersion: v1
kind: Namespace
metadata:
name: postgres-official
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pvc
namespace: postgres-official
spec:
storageClassName: local-path # 请根据你的集群实际情况修改 (如: local-path, nfs, csi 等)
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment # 官方镜像对权限要求宽松,Deployment 即可满足
metadata:
name: postgres
namespace: postgres-official
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
# 官方镜像不需要特殊的 fsGroup,但如果需要请取消注释并调整
# securityContext:
# fsGroup: 999 # 官方镜像通常使用 UID 999
containers:
- name: postgres
image: docker.m.daocloud.io/postgres:18.3 # 这里使用了稳定的 16 版本
imagePullPolicy: IfNotPresent
env:
# 1. 必须设置:超级用户密码
- name: POSTGRES_PASSWORD
value: "MySecurePass123!" # 生产环境请务必替换并使用 Secret
# 2. 可选:创建一个默认数据库 (如果不设置,默认同用户名)
- name: POSTGRES_DB
value: "postgres"
# 3. 可选:创建一个默认用户 (如果不设置,默认为 postgres)
- name: POSTGRES_USER
value: "postgres"
# 4. (高级) 如果你使用 PG 18+,官方文档建议显式设置 PGDATA
- name: PGDATA
value: /var/lib/postgresql/18/docker
ports:
- containerPort: 5432
name: postgres
volumeMounts:
# 关键点:官方镜像默认挂载点
# 注意:文档指出在 18+ 版本中,推荐挂载到 /var/lib/postgresql
# 但在 17 及以下,通常直接挂载到 /var/lib/postgresql/data
- name: postgres-storage
mountPath: /var/lib/postgresql # 兼容 14-17 的写法
# 如果你使用 18+ 且设置了 PGDATA 环境变量,这里应改为 /var/lib/postgresql
resources:
requests:
memory: "1Gi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "1000m"
# 如果是国内环境拉取镜像慢,可以配置阿里云镜像加速
# imagePullSecrets:
# - name: aliyun-acr-secret
volumes:
- name: postgres-storage
persistentVolumeClaim:
claimName: postgres-pvc
---
apiVersion: v1
kind: Service
metadata:
name: postgres-svc
namespace: postgres-official
spec:
selector:
app: postgres
ports:
- protocol: TCP
port: 5432
targetPort: 5432
nodePort: 30432 # 如果是 NodePort 模式,指定一个端口
type: NodePort # 本地测试推荐 NodePort,云厂商推荐 LoadBalancer