k8s 启动 postgresql 数据库

yaml 复制代码
# PostgreSQL StatefulSet 配置(开发/测试环境单副本)
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: postgres-deployment
  labels:
    app.kubernetes.io/name: postgres
    app.kubernetes.io/instance: postgres-instance
spec:
  # StatefulSet 必需:关联无头服务提供固定网络标识
  serviceName: postgres-headless
  # 单副本部署(生产环境建议≥2副本+主从复制)
  replicas: 1
  # 标签选择器:匹配Pod模板标签
  selector:
    matchLabels:
      app.kubernetes.io/name: postgres
      app.kubernetes.io/instance: postgres-instance
  template:
    metadata:
      labels:
        app.kubernetes.io/name: postgres
        app.kubernetes.io/instance: postgres-instance
    spec:
      containers:
      - name: postgres
        # 指定PostgreSQL 14.12镜像(建议使用官方镜像或可信镜像源)
        image: docker.1ms.run/postgres:14.12
        imagePullPolicy: IfNotPresent
        # 暴露PostgreSQL默认端口
        ports:
        - containerPort: 5432
          name: postgres
          protocol: TCP
        # 环境变量配置(生产环境需迁移至Secret存储敏感信息)
        env:
        - name: POSTGRES_PASSWORD
          value: "lb781023"
        # 数据库初始化参数:UTF-8编码,简化排序规则
        - name: POSTGRES_INITDB_ARGS
          value: "--encoding=UTF8 --lc-collate=C --lc-ctype=C"
        # 时区配置:亚洲/上海(统一集群时区)
        - name: TZ
          value: "Asia/Shanghai"
        # 数据目录挂载配置
        volumeMounts:
        - name: postgres-data
          mountPath: /var/lib/postgresql/data
          # 子路径:避免存储目录权限冲突,隔离数据文件
          subPath: postgres
        # 资源配额:基于工作负载需求合理配置(避免资源过度分配或饥饿)
        resources:
          requests:
            cpu: 500m
            memory: 1Gi
          limits:
            cpu: 1000m
            memory: 2Gi
  # PVC模板:为每个Pod自动创建专属持久化存储(StatefulSet核心特性)
  volumeClaimTemplates:
  - metadata:
      name: postgres-data
      labels:
        app.kubernetes.io/name: postgres
        app.kubernetes.io/instance: postgres-instance
    spec:
      # 访问模式:单节点读写(数据库存储标准配置)
      accessModes: [ "ReadWriteOnce" ]
      # 存储类:使用longhorn分布式存储(确保数据持久化可靠性)
      storageClassName: "longhorn"
      # 存储资源请求:根据数据量预估配置
      resources:
        requests:
          storage: 10Gi
---
# PostgreSQL 外部访问服务(NodePort类型)
apiVersion: v1
kind: Service
metadata:
  name: postgres-service
  labels:
    app.kubernetes.io/name: postgres
    app.kubernetes.io/instance: postgres-instance
spec:
  # 关联PostgreSQL Pod标签
  selector:
    app.kubernetes.io/name: postgres
    app.kubernetes.io/instance: postgres-instance
  # 服务类型:NodePort(开发/测试环境外部访问常用方式)
  type: NodePort
  ports:
  - name: postgres
    # Service集群内部端口(与目标端口一致,简化配置)
    port: 5432
    # 目标端口:映射至Pod暴露端口
    targetPort: 5432
    # 节点暴露端口:30000-32767范围内,需确保集群内端口唯一
    nodePort: 5432
    protocol: TCP
---
# PostgreSQL 无头服务(StatefulSet必需)
apiVersion: v1
kind: Service
metadata:
  name: postgres-headless
  labels:
    app.kubernetes.io/name: postgres
    app.kubernetes.io/instance: postgres-instance
spec:
  # 无头服务标识:clusterIP=None
  clusterIP: None
  selector:
    app.kubernetes.io/name: postgres
    app.kubernetes.io/instance: postgres-instance
  ports:
  - name: postgres
    port: 5432
    targetPort: 5432
    protocol: TCP
相关推荐
等....1 天前
Minio使用
数据库
win x1 天前
Redis 使用~如何在Java中连接使用redis
java·数据库·redis
迷枫7121 天前
DM8 数据库安装实战:从零搭建达梦数据库环境(附全套工具链接)
数据库
XDHCOM1 天前
PostgreSQL 25001: active_sql_transaction 报错原因分析,故障修复步骤详解,远程处理解决方案
数据库·sql·postgresql
卤炖阑尾炎1 天前
PostgreSQL 日常运维全指南:从基础操作到备份恢复
运维·数据库·postgresql
daad7771 天前
wifi_note
运维·服务器·数据库
xixingzhe21 天前
Mysql统计空间增量
数据库·mysql
程序员萌萌1 天前
Redis的缓存机制和淘汰策略详解
数据库·redis·缓存机制·淘汰策略
不剪发的Tony老师1 天前
SQLite 3.53.0版本发布,重要更新
数据库·sqlite
Bczheng11 天前
九.Berkeley DB数据库 序列化和钱包管理(1)
数据库