SubQuery项目在Kubernetes中的部署指南
2025-07-05 07:41:15作者:董灵辛Dennis
概述
SubQuery是一个用于区块链数据索引和查询的开源项目,它允许开发者从区块链网络中提取、转换和持久化数据。本文将详细介绍如何在Kubernetes集群中部署SubQuery的完整解决方案,包括数据索引节点、PostgreSQL数据库和Hasura GraphQL服务。
核心组件架构
在Kubernetes中部署SubQuery项目需要三个主要组件协同工作:
- SubQuery节点:负责从区块链网络获取数据并进行索引
- PostgreSQL数据库:存储索引后的结构化数据
- Hasura服务:提供GraphQL接口供客户端查询数据
详细部署步骤
1. 部署SubQuery索引节点
SubQuery节点的部署采用Deployment资源,配置要点如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: subql-node-1
spec:
template:
spec:
volumes:
- name: project-dir
emptyDir: {medium: Memory}
initContainers:
- name: prepare
image: node:lts-alpine
command: [sh, -c, "apk add git && git clone 项目示例仓库 /subquery && cd /subquery/block-timestamp && npm i -g @subql/cli && yarn && subql codegen && yarn build"]
containers:
- name: indexer
image: onfinality/subql-node:v0.4.0
args: ["-f", "/subquery/block-timestamp", "--local"]
env:
- name: DB_HOST
value: subquery-db-svc
- name: DB_PORT
value: "5432"
关键配置说明:
- 使用initContainer准备项目代码和依赖
- 主容器运行SubQuery节点服务
--local
参数表示在公共schema中创建表- 内存型emptyDir卷提高临时文件访问速度
2. 部署PostgreSQL数据库
数据库采用StatefulSet确保数据持久化:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: subquery-db
spec:
serviceName: subquery-db-svc
volumeClaimTemplates:
- metadata:
name: subquery-db-pvc
spec:
accessModes: [ReadWriteOnce]
resources:
requests:
storage: 20G
template:
spec:
containers:
- name: db
image: postgres:12-alpine
env:
- name: POSTGRES_PASSWORD
value: postgres
生产环境建议:
- 使用专用数据库实例而非容器
- 根据数据量调整存储大小
- 考虑配置定期备份策略
3. 部署Hasura GraphQL服务
Hasura提供数据查询接口:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hasura-deploy
spec:
template:
spec:
containers:
- name: hasura
image: hasura/graphql-engine:v1.3.3
env:
- name: HASURA_GRAPHQL_DATABASE_URL
value: postgres://postgres:postgres@subquery-db-svc:5432/postgres
- name: HASURA_GRAPHQL_ENABLE_CONSOLE
value: 'true'
安全建议:
- 生产环境应将
HASURA_GRAPHQL_ENABLE_CONSOLE
设为false - 配置适当的访问控制
- 启用HTTPS
安全增强配置
建议添加网络策略限制不必要的网络访问:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: subquery-node-egress
spec:
podSelector:
matchLabels:
release: subql-node-1
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/8
该策略限制SubQuery节点只能访问内部网络(10.0.0.0/8)。
性能优化建议
-
索引节点:
- 根据区块链数据量调整节点资源请求
- 考虑使用更快的存储后端
- 监控索引进度和性能指标
-
数据库:
- 配置适当的索引
- 调整PostgreSQL内存参数
- 考虑读写分离
-
查询服务:
- 根据查询负载调整Hasura副本数
- 启用查询缓存
- 配置合理的限流策略
总结
本文详细介绍了在Kubernetes中部署SubQuery项目的完整方案,涵盖了从数据索引到查询接口的整个流程。生产环境部署时,建议根据实际业务需求调整资源配置和安全策略,并建立完善的监控体系。通过Kubernetes的编排能力,可以轻松实现SubQuery服务的高可用和弹性扩展。