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
相关推荐
AOwhisky1 小时前
MySQL 学习笔记(第四期):SQL 语言之多表查询
linux·运维·网络·数据库·笔记·学习·mysql
ggaofeng1 小时前
glusterfs如何在k8s中使用
云原生·容器·kubernetes·glusterfs
小红卒1 小时前
mysql之udf提权
数据库·mysql·网络安全
Trouvaille ~2 小时前
【Redis篇】Redis 哨兵(Sentinel):高可用自动故障转移
数据库·redis·缓存·中间件·sentinel·高可用·哨兵
qfljg2 小时前
oracle 迁移到postgres
数据库·oracle
giaz14n9X2 小时前
Redis 分布式锁进阶第五十七篇
数据库·redis·分布式
剑神一笑3 小时前
Linux ls 命令深度解析:从目录遍历到颜色输出的实现原理
linux·服务器·数据库
IT策士3 小时前
第49篇 k8s之服务网格入门:Istio 简介
容器·kubernetes·istio
Maynor9963 小时前
Codex API 网关迁移与流量优化实战
数据库·oracle
WyCAGy8ij3 小时前
Redis 分布式锁进阶第二篇讲解
数据库·redis·分布式