企业级Kubernetes高可用部署:Onyx生产环境完整配置指南
企业级Kubernetes高可用部署:Onyx生产环境完整配置指南
Onyx是一款支持自然语言提问并通过私有数据源提供答案的企业级工具,可与Slack、GitHub、Confluence等平台无缝集成。本指南将详细介绍如何在Kubernetes环境中实现Onyx的高可用部署,确保生产环境的稳定运行和最佳性能。
部署架构概览
Onyx在Kubernetes环境中的部署采用了多层架构设计,确保系统的高可用性和可扩展性。核心组件包括Web服务、API服务、Celery任务队列、PostgreSQL数据库、Redis缓存以及Vespa搜索引擎。这些组件通过Kubernetes的Deployment、StatefulSet等资源进行管理,并利用HorizontalPodAutoscaler实现自动扩缩容。
图1:Onyx系统监控面板展示了关键性能指标和任务状态,帮助管理员实时掌握系统运行状况
部署前准备工作
环境要求
- Kubernetes集群版本1.33及以上
- Helm 3.0+
- Terraform 1.0+
- AWS账户(如使用云服务)
- 至少3个节点的集群,每个节点至少4核CPU和16GB内存
基础设施准备
Onyx的部署可通过Terraform模块快速搭建AWS基础设施,包括VPC、EKS集群、RDS PostgreSQL、ElastiCache Redis和S3存储桶。主要模块如下:
vpc: 创建适合EKS的VPC及子网eks: 部署EKS集群及必要的附加组件postgres: 配置RDS PostgreSQL实例redis: 部署ElastiCache Redis集群s3: 创建用于文件存储的S3桶
快速部署步骤
1. 克隆代码仓库
git clone https://gitcode.com/GitHub_Trending/da/danswer
cd danswer
2. 使用Terraform搭建基础设施
module "onyx" {
source = "./deployment/terraform/modules/aws/onyx"
region = "us-west-2"
name = "onyx-prod"
postgres_username = "onyxadmin"
postgres_password = "your_secure_password"
}
执行部署:
cd deployment/terraform/modules/aws
terraform init
terraform apply
3. 使用Helm部署Onyx应用
# 设置kubectl上下文
aws eks update-kubeconfig --name onyx-prod --region us-west-2
# 创建命名空间
kubectl create namespace onyx
# 部署Helm chart
helm upgrade --install onyx ./deployment/helm/charts/onyx \
--namespace onyx \
--set postgresql.primary.persistence.enabled=true \
--set minio.enabled=false \
--set serviceAccount.create=false \
--set serviceAccount.name=onyx-s3-access
高可用配置最佳实践
1. 资源配置优化
根据Onyx官方建议,为各组件设置合理的资源限制:
# 在values.yaml中配置
api:
resources:
requests:
cpu: 1000m
memory: 2Gi
limits:
cpu: 2000m
memory: 4Gi
2. 自动扩缩容配置
Onyx支持两种自动扩缩容方式:Kubernetes HPA和KEDA。推荐生产环境使用KEDA实现更精细的扩缩容策略:
# 在values.yaml中配置
autoscaling:
engine: keda
api:
enabled: true
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
3. 持久化存储配置
确保关键数据持久化,特别是PostgreSQL和Vespa:
# 在values.yaml中配置
postgresql:
primary:
persistence:
enabled: true
size: 50Gi
storageClass: gp3
vespa:
persistence:
enabled: true
size: 100Gi
4. 安全设置
以非root用户运行容器,增强安全性:
# 在values.yaml中配置
api:
securityContext:
runAsNonRoot: true
runAsUser: 1001
vespa:
podSecurityContext:
fsGroup: 1000
securityContext:
runAsUser: 1000
privileged: false
监控与运维
关键监控指标
Onyx提供了丰富的监控指标,可通过Prometheus和Grafana进行可视化:
图2:Onyx月度使用趋势分析展示了不同用例类别的增长情况
主要监控指标包括:
- API请求量和延迟
- 任务队列长度
- 数据库连接数和查询性能
- 搜索响应时间
- 资源利用率(CPU、内存、磁盘)
常见问题排查
- Pod启动失败:检查资源是否充足,查看日志:
kubectl logs -n onyx <pod-name>
-
数据库连接问题:确认RDS实例是否允许来自EKS节点的访问,检查安全组配置。
-
自动扩缩容不触发:检查HPA/KEDA配置是否正确,确保指标数据正常收集。
部署架构选择
Onyx提供了多种部署选项,可根据团队规模和需求选择:
- Docker Compose:适合小型团队或开发环境
- Kubernetes + Helm:适合中大型团队,提供更好的可扩展性
- Terraform + Helm:适合已使用Terraform的团队,实现基础设施即代码
图3:不同用例类别的30天平均使用增长率,帮助评估资源需求
总结
通过本指南,您已了解如何在Kubernetes环境中部署高可用的Onyx生产环境。关键步骤包括使用Terraform搭建基础设施,通过Helm部署应用,并配置资源限制、自动扩缩容和安全设置。Onyx的模块化设计确保了系统的可扩展性和可靠性,满足企业级应用的需求。
如需进一步定制或优化部署,请参考以下资源:
- 官方部署文档:deployment/helm/README.md
- Terraform模块说明:deployment/terraform/modules/aws/README.md
- 高级配置指南:web/src/app/craft/README.md
更多推荐






所有评论(0)