Published on

AI companion CI/CD

Authors
  • avatar
    Name
    Shelton Ma
    Twitter

1. AWS 组件

  1. EKS(Elastic Kubernetes Service) 托管 Kubernetes 集群
  2. EC2(Worker Nodes) 运行容器实例
  3. ECR(Elastic Container Registry) 存储 Docker 镜像
  4. ALB(Application Load Balancer) 负载均衡流量
  5. RDS / DynamoDB 存储对话记录
  6. S3 存储音频文件

2. 代码结构

aws-k8s-deploy/
│── infra/                     # 基础设施代码(Terraform)
│   ├── eks.tf                 # EKS 集群定义
│   ├── node_group.tf          # GPU/CPU 节点池配置
│   ├── vpc.tf                 # VPC & 安全组
│   ├── outputs.tf             # Terraform 输出
│   └── variables.tf           # 配置变量
│── helm/                      # Helm Charts
│   ├── tts/                   # TTS 服务 Chart
│   ├── asr/                   # ASR 服务 Chart
│   ├── llm/                   # LLM 服务 Chart
│   └── ingress/               # 负载均衡 Chart
│── gateway/                   # API 网关(Express)
│       ├── src/
│           ├── server.ts              # 启动文件
│           ├── auth.ts                # 用户身份验证(JWT)
│           ├── kafka-producer.ts      # Kafka 生产者,推送任务
│           ├── routes.ts              # API 路由
│       ├── config.ts                   # 配置文件
│       ├── Dockerfile
│       ├── package.json
│── services/ 
│   ├──asr-service/                # 语音识别服务
│       ├── src/
│       ├── Dockerfile
│       ├── config.yaml
│       ├── package.json
│   ├── tts-service/           # 语音合成服务
│   ├── llm-service/           # LLM 服务
│   └── common/                # 共享模块
│── deployments/               # K8s 资源配置
│   ├── tts-deployment.yaml    # TTS 部署
│   ├── asr-deployment.yaml    # ASR 部署
│   ├── llm-deployment.yaml    # LLM 部署
│   ├── ingress.yaml           # 入口配置
│   ├── keda-scalers.yaml      # KEDA 扩容策略
│   └── hpa.yaml               # HPA 配置
│── monitoring/                # 监控配置
│   ├── prometheus.yaml        # Prometheus 监控
│   ├── grafana-dashboards/    # Grafana 面板
│── ci-cd/                     # 持续集成 & 交付
│   ├── github-actions/        # GitHub Actions Pipeline
│   ├── argo-cd/               # ArgoCD 配置
│── .env                       # 环境变量
│── README.md                  # 项目说明

3. 部署

1. Terraform

cd infra
terraform init
terraform apply -auto-approve

2. 配置 Kubernetes 资源

  1. TTS/ASR/LLM 部署示例

  2. Ingress 负载均衡

  3. 部署

    kubectl apply -f deployments/
    

3. 使用 ArgoCD 进行 GitOps 部署

  1. 安装 ArgoCD

    kubectl create namespace argocd
    helm install argocd argo/argo-cd --namespace argocd
    
  2. 创建应用

    argocd app create ml-inference \
    --repo <https://github.com/my-org/ml-deploy.git> \
    --path helm/ \
    --dest-server <https://kubernetes.default.svc> \
    --dest-namespace default
    

4. 使用 KEDA 进行自动扩容

  1. 基于请求数扩展 ASR 服务

  2. 应用 KEDA 规则

    kubectl apply -f deployments/keda-scalers.yaml
    

5. dockerfile

6. helm

helm install gateway helm/gateway

4. 运行 & 维护

# 服务管理
kubectl get pods
kubectl logs -f asr-service

# 查看负载均衡
kubectl get ingress

# 查看 ArgoCD 部署
argocd app list