如何编写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
相关产品推荐
相关产品推荐

