将Basdonax AI RAG部署到AWS EKS:托管Kubernetes

将Basdonax AI RAG部署到AWS EKS:托管Kubernetes

【免费下载链接】basdonax-ai-rag 【免费下载链接】basdonax-ai-rag 项目地址: https://gitcode.com/GitHub_Trending/ba/basdonax-ai-rag

在当今企业级应用部署中,容器编排已成为标准实践。本文将详细介绍如何将Basdonax AI RAG系统部署到AWS EKS(Amazon Elastic Kubernetes Service),利用托管Kubernetes服务实现高可用性和弹性扩展。通过以下步骤,您将能够在AWS云环境中构建一个生产级的RAG(检索增强生成)应用,结合Ollama大语言模型与Chroma向量数据库,为企业文档智能问答提供强大支持。

部署前准备

环境要求

部署Basdonax AI RAG到AWS EKS需要准备以下环境和工具:

  • AWS账号及管理员权限
  • AWS CLI已配置并具备EKS集群管理权限
  • kubectl命令行工具
  • eksctl(Amazon EKS CLI工具)
  • Docker Desktop(用于构建容器镜像)

项目结构分析

Basdonax AI RAG项目采用Docker Compose进行本地部署,主要包含以下核心组件:

  • Ollama服务:运行Llama3或Phi3等开源大语言模型
  • Chroma向量数据库:存储文档向量数据,支持高效检索
  • Streamlit应用:提供Web用户界面,实现文档上传和问答交互

项目的Docker Compose配置文件docker-compose.yml定义了完整的服务组合,包括GPU资源配置和服务依赖关系。应用Dockerfileapp/Dockerfile则负责构建Streamlit应用镜像,安装依赖并启动服务。

AWS EKS环境搭建

创建EKS集群

使用eksctl创建基础EKS集群,以下是基本配置示例:

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: basdonax-rag-cluster
  region: us-west-2
  version: "1.28"

nodeGroups:
  - name: ng-gpu
    instanceType: p3.2xlarge
    minSize: 1
    maxSize: 3
    volumeSize: 100
    labels:
      workload: ai
    tags:
      Name: basdonax-rag-gpu-nodes

执行创建命令:

eksctl create cluster -f eks-cluster-config.yaml

配置GPU支持

EKS集群需要安装NVIDIA设备插件以支持GPU资源调度:

kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml

验证GPU节点状态:

kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"

容器化与镜像准备

构建应用镜像

基于项目现有的Dockerfileapp/Dockerfile构建应用镜像,并推送到Amazon ECR(Elastic Container Registry):

# 创建ECR仓库
aws ecr create-repository --repository-name basdonax-rag-app --region us-west-2

# 登录ECR
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin {ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com

# 构建并推送镜像
docker build -t basdonax-rag-app:latest ./app
docker tag basdonax-rag-app:latest {ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com/basdonax-rag-app:latest
docker push {ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com/basdonax-rag-app:latest

准备第三方镜像

Basdonax AI RAG依赖的Ollama和Chroma官方镜像可直接从公开镜像源拉取,在Kubernetes部署时指定相应镜像即可:

  • Ollama: ollama/ollama:latest
  • Chroma: chromadb/chroma:latest

Kubernetes部署配置

创建命名空间

为Basdonax AI RAG创建独立的Kubernetes命名空间:

apiVersion: v1
kind: Namespace
metadata:
  name: basdonax-rag

部署Chroma向量数据库

创建Chroma部署和服务配置:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: chroma
  namespace: basdonax-rag
spec:
  replicas: 1
  selector:
    matchLabels:
      app: chroma
  template:
    metadata:
      labels:
        app: chroma
    spec:
      containers:
      - name: chroma
        image: chromadb/chroma:latest
        ports:
        - containerPort: 8000
        volumeMounts:
        - name: index-data
          mountPath: /chroma/.chroma/index
  volumes:
  - name: index-data
    persistentVolumeClaim:
      claimName: chroma-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: chroma-service
  namespace: basdonax-rag
spec:
  selector:
    app: chroma
  ports:
  - port: 8000
    targetPort: 8000
  clusterIP: None  # Headless service

部署Ollama服务

创建Ollama部署配置,包含GPU资源请求:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ollama
  namespace: basdonax-rag
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ollama
  template:
    metadata:
      labels:
        app: ollama
    spec:
      containers:
      - name: ollama
        image: ollama/ollama:latest
        ports:
        - containerPort: 11434
        volumeMounts:
        - name: ollama-models
          mountPath: /ollama/models
        resources:
          limits:
            nvidia.com/gpu: 1
          requests:
            nvidia.com/gpu: 1
  volumes:
  - name: ollama-models
    persistentVolumeClaim:
      claimName: ollama-models-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: ollama-service
  namespace: basdonax-rag
spec:
  selector:
    app: ollama
  ports:
  - port: 11434
    targetPort: 11434
  clusterIP: None  # Headless service

部署Streamlit应用

创建Basdonax AI RAG应用部署,配置环境变量指向内部服务:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: basdonax-rag-app
  namespace: basdonax-rag
spec:
  replicas: 2
  selector:
    matchLabels:
      app: rag-app
  template:
    metadata:
      labels:
        app: rag-app
    spec:
      containers:
      - name: rag-app
        image: {ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com/basdonax-rag-app:latest
        ports:
        - containerPort: 8080
        environment:
        - name: MODEL
          value: "llama3"
        - name: EMBEDDINGS_MODEL_NAME
          value: "all-MiniLM-L6-v2"
        - name: TARGET_SOURCE_CHUNKS
          value: "5"
        - name: OLLAMA_HOST
          value: "ollama-service.basdonax-rag.svc.cluster.local:11434"
        - name: CHROMA_HOST
          value: "chroma-service.basdonax-rag.svc.cluster.local:8000"
---
apiVersion: v1
kind: Service
metadata:
  name: rag-app-service
  namespace: basdonax-rag
spec:
  selector:
    app: rag-app
  ports:
  - port: 80
    targetPort: 8080
  type: LoadBalancer

部署后配置与验证

安装LLM模型

部署完成后,需要在Ollama容器中安装所需的大语言模型。首先获取Ollama Pod名称:

kubectl get pods -n basdonax-rag -l app=ollama

执行模型拉取命令:

kubectl exec -it {ollama-pod-name} -n basdonax-rag -- ollama pull llama3

配置应用提示词

根据业务需求修改助手提示词,通过ConfigMap挂载自定义提示词配置:

apiVersion: v1
kind: ConfigMap
metadata:
  name: assistant-prompt-config
  namespace: basdonax-rag
data:
  assistant_prompt.py: |
    ASSISTANT_PROMPT = """
    Eres un asistente AI especializado en responder preguntas basadas en documentos proporcionados.
    Utiliza solo la información de los documentos para responder, y si no encuentras la respuesta, di que no lo sabes.
    """

在应用部署中挂载ConfigMap:

volumeMounts:
- name: prompt-config
  mountPath: /app/common/assistant_prompt.py
  subPath: assistant_prompt.py
volumes:
- name: prompt-config
  configMap:
    name: assistant-prompt-config

访问应用服务

获取Load Balancer外部IP:

kubectl get service rag-app-service -n basdonax-rag

通过浏览器访问http://{EXTERNAL-IP}即可使用Basdonax AI RAG应用。

进阶配置与优化

自动扩展配置

配置HPA(Horizontal Pod Autoscaler)实现应用自动扩缩容:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: rag-app-hpa
  namespace: basdonax-rag
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: basdonax-rag-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 80

持久化存储优化

为Chroma和Ollama配置AWS EBS gp3卷类型,提升性能并降低成本:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: chroma-pvc
  namespace: basdonax-rag
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi
  storageClassName: gp3

总结与展望

通过本文介绍的步骤,您已成功将Basdonax AI RAG部署到AWS EKS,实现了一个基于Kubernetes的企业级RAG应用。该部署架构具有以下优势:

  • 高可用性:Kubernetes确保服务持续可用,自动恢复故障实例
  • 弹性扩展:根据负载自动调整Pod数量,优化资源利用
  • 隔离性:通过命名空间和网络策略实现资源隔离与安全控制
  • 可维护性:容器化部署简化版本管理和更新流程

未来可以进一步优化的方向包括:

  1. 集成AWS CloudWatch实现全面监控
  2. 使用AWS Secrets Manager管理敏感配置
  3. 实现蓝绿部署或金丝雀发布策略
  4. 配置AWS WAF增强应用安全性

Basdonax AI RAG项目的完整部署代码和配置文件可在项目仓库中找到,更多使用细节请参考项目文档README.md。如需自定义应用行为,可以修改应用配置文件app/common/constants.py和提示词模板app/common/assistant_prompt.py

【免费下载链接】basdonax-ai-rag 【免费下载链接】basdonax-ai-rag 项目地址: https://gitcode.com/GitHub_Trending/ba/basdonax-ai-rag

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值