You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Hasura Kubernetes部署文件以连接多个PostgreSQL数据库

多PostgreSQL实例下的Hasura Kubernetes部署配置建议

核心配置思路

针对多PostgreSQL实例场景,核心是通过环境变量或配置映射为Hasura提供多个数据库连接串,同时保证敏感信息的安全存储与加载。


1. 基础Deployment配置

核心镜像与端口

使用官方稳定版Hasura镜像,暴露默认服务端口8080:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hasura-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hasura
  template:
    metadata:
      labels:
        app: hasura
    spec:
      containers:
      - name: hasura
        image: hasura/graphql-engine:v2.38.0 # 建议锁定稳定版本
        ports:
        - containerPort: 8080

多数据库连接配置

将非敏感的连接串模板存入ConfigMap,敏感密码单独存入Secret,避免明文泄露:

第一步:创建存储连接串模板的ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: hasura-db-config
data:
  DB_URL_1: "postgresql://user1:${DB_PASS_1}@pg-instance-1:5432/db1"
  DB_URL_2: "postgresql://user2:${DB_PASS_2}@pg-instance-2:5432/db2"

第二步:创建存储敏感密码的Secret

apiVersion: v1
kind: Secret
metadata:
  name: hasura-db-secrets
type: Opaque
data:
  db-pass-1: <base64编码的密码1> # 执行`echo -n "your-pass" | base64`生成编码值
  db-pass-2: <base64编码的密码2>
  admin-secret: <base64编码的管理员密钥>

第三步:在Deployment中引用ConfigMap与Secret

# 接续上述Deployment的containers字段
env:
- name: HASURA_GRAPHQL_DATABASE_URL_1
  valueFrom:
    configMapKeyRef:
      name: hasura-db-config
      key: DB_URL_1
- name: DB_PASS_1
  valueFrom:
    secretKeyRef:
      name: hasura-db-secrets
      key: db-pass-1
- name: HASURA_GRAPHQL_DATABASE_URL_2
  valueFrom:
    configMapKeyRef:
      name: hasura-db-config
      key: DB_URL_2
- name: DB_PASS_2
  valueFrom:
    secretKeyRef:
      name: hasura-db-secrets
      key: db-pass-2

2. 关键环境变量设置

必须配置以下核心变量保证Hasura正常运行:

  • HASURA_GRAPHQL_ADMIN_SECRET: 管理员密钥,必须通过Secret注入
  • HASURA_GRAPHQL_ENABLE_CONSOLE: 开发环境设为true启用Web控制台,生产环境建议关闭
  • HASURA_GRAPHQL_DEV_MODE: 开发环境设为true,生产环境设为false

示例注入方式:

# 加入containers的env字段
- name: HASURA_GRAPHQL_ADMIN_SECRET
  valueFrom:
    secretKeyRef:
      name: hasura-db-secrets
      key: admin-secret
- name: HASURA_GRAPHQL_ENABLE_CONSOLE
  value: "true"
- name: HASURA_GRAPHQL_DEV_MODE
  value: "false"

3. 资源与健康检查配置

资源限制

根据业务规模配置CPU/内存请求与限制,避免资源抢占:

# 加入containers字段
resources:
  requests:
    cpu: "100m"
    memory: "256Mi"
  limits:
    cpu: "500m"
    memory: "512Mi"

健康探针

配置就绪探针与存活探针,确保Hasura服务正常后再对外提供:

# 加入containers字段
readinessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 10
  periodSeconds: 5
livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10

4. 服务暴露配置

创建Service暴露Hasura服务,根据需求选择访问方式:

apiVersion: v1
kind: Service
metadata:
  name: hasura-service
spec:
  selector:
    app: hasura
  ports:
  - port: 80
    targetPort: 8080
  type: ClusterIP # 生产环境推荐用Ingress替代NodePort/LoadBalancer

5. 额外注意事项

  • 网络可达性: 确保Kubernetes集群能访问所有PostgreSQL实例(同集群可通过Service名称访问,外部实例需配置网络策略或打通网络)
  • 版本兼容性: Hasura版本需与PostgreSQL版本匹配,建议参考官方文档确认
  • 配置更新: 修改数据库连接后需重启Hasura Deployment,或配置滚动更新策略

内容的提问来源于stack exchange,提问作者Omkara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:35:25