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
相关推荐
xiezhr1 小时前
逛GitHub发现了一款免费的带AI功能的数据库管理工具
数据库·ai编程·dba
吃糖的小孩1 天前
给 QQ AI 机器人设计“可控记忆”:会话摘要、手动长期记忆与角色卡边界
数据库
笃行3502 天前
金仓数据库数据安全双防线:静态存储加密与传输加密实战
数据库
笃行3502 天前
金仓数据库物理备份实战:sys_rman 全流程演练与误覆盖抢救
数据库
笃行3502 天前
金仓数据库逻辑备份实战:从全库导出到 Schema 替换的完整闭环
数据库
运维开发故事2 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
SelectDB3 天前
阶跃星辰基于 SelectDB 构建 PB 级 Agent 可观测平台
大数据·数据库·aigc
这个DBA有点耶3 天前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构
掉头发的王富贵3 天前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql