将Basdonax AI RAG部署到AWS EKS:托管Kubernetes
【免费下载链接】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数量,优化资源利用
- 隔离性:通过命名空间和网络策略实现资源隔离与安全控制
- 可维护性:容器化部署简化版本管理和更新流程
未来可以进一步优化的方向包括:
- 集成AWS CloudWatch实现全面监控
- 使用AWS Secrets Manager管理敏感配置
- 实现蓝绿部署或金丝雀发布策略
- 配置AWS WAF增强应用安全性
Basdonax AI RAG项目的完整部署代码和配置文件可在项目仓库中找到,更多使用细节请参考项目文档README.md。如需自定义应用行为,可以修改应用配置文件app/common/constants.py和提示词模板app/common/assistant_prompt.py。
【免费下载链接】basdonax-ai-rag 项目地址: https://gitcode.com/GitHub_Trending/ba/basdonax-ai-rag
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



