企业级Kubernetes高可用部署:Onyx生产环境完整配置指南

【免费下载链接】danswer Ask Questions in natural language and get Answers backed by private sources. Connects to tools like Slack, GitHub, Confluence, etc. 【免费下载链接】danswer 项目地址: https://gitcode.com/GitHub_Trending/da/danswer

Onyx是一款支持自然语言提问并通过私有数据源提供答案的企业级工具,可与Slack、GitHub、Confluence等平台无缝集成。本指南将详细介绍如何在Kubernetes环境中实现Onyx的高可用部署,确保生产环境的稳定运行和最佳性能。

部署架构概览

Onyx在Kubernetes环境中的部署采用了多层架构设计,确保系统的高可用性和可扩展性。核心组件包括Web服务、API服务、Celery任务队列、PostgreSQL数据库、Redis缓存以及Vespa搜索引擎。这些组件通过Kubernetes的Deployment、StatefulSet等资源进行管理,并利用HorizontalPodAutoscaler实现自动扩缩容。

Onyx部署架构示例

图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进行可视化:

Onyx使用趋势分析

图2:Onyx月度使用趋势分析展示了不同用例类别的增长情况

主要监控指标包括:

  • API请求量和延迟
  • 任务队列长度
  • 数据库连接数和查询性能
  • 搜索响应时间
  • 资源利用率(CPU、内存、磁盘)

常见问题排查

  1. Pod启动失败:检查资源是否充足,查看日志:
kubectl logs -n onyx <pod-name>
  1. 数据库连接问题:确认RDS实例是否允许来自EKS节点的访问,检查安全组配置。

  2. 自动扩缩容不触发:检查HPA/KEDA配置是否正确,确保指标数据正常收集。

部署架构选择

Onyx提供了多种部署选项,可根据团队规模和需求选择:

  • Docker Compose:适合小型团队或开发环境
  • Kubernetes + Helm:适合中大型团队,提供更好的可扩展性
  • Terraform + Helm:适合已使用Terraform的团队,实现基础设施即代码

部署架构对比

图3:不同用例类别的30天平均使用增长率,帮助评估资源需求

总结

通过本指南,您已了解如何在Kubernetes环境中部署高可用的Onyx生产环境。关键步骤包括使用Terraform搭建基础设施,通过Helm部署应用,并配置资源限制、自动扩缩容和安全设置。Onyx的模块化设计确保了系统的可扩展性和可靠性,满足企业级应用的需求。

如需进一步定制或优化部署,请参考以下资源:

【免费下载链接】danswer Ask Questions in natural language and get Answers backed by private sources. Connects to tools like Slack, GitHub, Confluence, etc. 【免费下载链接】danswer 项目地址: https://gitcode.com/GitHub_Trending/da/danswer

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐