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
相关推荐
陈桴浮海27 分钟前
Kustomize实战:从0到1实现K8s多环境配置管理与资源部署
云原生·容器·kubernetes
Goat恶霸詹姆斯34 分钟前
mysql常用语句
数据库·mysql·oracle
大模型玩家七七1 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
曾经的三心草1 小时前
redis-9-哨兵
数据库·redis·bootstrap
明哥说编程1 小时前
Dataverse自定义表查询优化:D365集成大数据量提速实战【索引配置】
数据库·查询优化·dataverse·dataverse自定义表·索引配置·d365集成·大数据量提速
张小凡vip1 小时前
Kubernetes--k8s中部署redis数据库服务
redis·kubernetes
xiaowu0801 小时前
C# 拆解 “显式接口实现 + 子类强类型扩展” 的设计思想
数据库·oracle
讯方洋哥1 小时前
HarmonyOS App开发——关系型数据库应用App开发
数据库·harmonyos
Hello.Reader2 小时前
Flink Kubernetes HA(高可用)实战原理、前置条件、配置项与数据保留机制
贪心算法·flink·kubernetes
惊讶的猫2 小时前
Redis持久化介绍
数据库·redis·缓存