AI应用的容器化部署:从Docker到Kubernetes AI应用的容器化部署从Docker到Kubernetes前言我们的产品从单服务器部署到多服务器部署时遇到了很多问题环境不一致、部署复杂、扩容困难。后来我们引入了容器化和 Kubernetes问题迎刃而解。今天分享我们的实践经验。一、容器化基础1.1 Docker 入门class DockerSetup: def create_dockerfile(self) - str: 创建 Dockerfile return FROM python:3.10-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 8000 CMD [uvicorn, main:app, --host, 0.0.0.0, --port, 8000] 1.2 Docker Composeclass DockerCompose: def create_config(self) - dict: 创建 Docker Compose 配置 return { version: 3.8, services: { web: { build: ., ports: [8000:8000], depends_on: [redis] }, redis: { image: redis:7-alpine } } }二、Kubernetes 入门2.1 Pod 配置class KubernetesPod: def create_pod(self) - dict: 创建 Pod 配置 return { apiVersion: v1, kind: Pod, metadata: {name: ai-app}, spec: { containers: [{ name: app, image: ai-app:latest, ports: [{containerPort: 8000}] }] } }2.2 Deployment 配置class KubernetesDeployment: def create_deployment(self) - dict: 创建 Deployment return { apiVersion: apps/v1, kind: Deployment, metadata: {name: ai-app}, spec: { replicas: 3, selector: {matchLabels: {app: ai-app}}, template: { metadata: {labels: {app: ai-app}}, spec: { containers: [{ name: app, image: ai-app:latest, ports: [{containerPort: 8000}] }] } } } }三、服务发现与负载均衡3.1 Service 配置class KubernetesService: def create_service(self) - dict: 创建 Service return { apiVersion: v1, kind: Service, metadata: {name: ai-app-service}, spec: { selector: {app: ai-app}, ports: [{port: 80, targetPort: 8000}], type: LoadBalancer } }3.2 Ingress 配置class KubernetesIngress: def create_ingress(self) - dict: 创建 Ingress return { apiVersion: networking.k8s.io/v1, kind: Ingress, metadata: {name: ai-app-ingress}, spec: { rules: [{ host: api.example.com, http: { paths: [{ path: /, pathType: Prefix, backend: { service: { name: ai-app-service, port: {number: 80} } } }] } }] } }四、CI/CD 集成4.1 持续集成class CICDWorkflow: def create_workflow(self) - dict: 创建 CI/CD 工作流 return { name: CI/CD, on: {push: {branches: [main]}}, jobs: { build: {steps: [checkout, build, test]}, deploy: {steps: [deploy]} } }4.2 自动部署class AutoDeployment: def deploy(self, image_tag: str) - dict: 自动部署 return { image: fai-app:{image_tag}, strategy: rollingUpdate, success: True }五、最佳实践5.1 容器化原则✅单一职责每个容器只运行一个进程✅不可变容器容器创建后不修改✅健康检查配置 liveness 和 readiness 探针✅资源限制设置 CPU 和内存限制5.2 Kubernetes 最佳实践✅副本管理使用 Deployment 管理 Pod✅服务发现使用 Service 进行服务发现✅配置管理使用 ConfigMap 和 Secret✅自动扩缩容使用 Horizontal Pod Autoscaler六、总结容器化和 Kubernetes 是现代化部署的基石。关键在于标准化环境确保开发、测试、生产环境一致自动化部署减少人工操作弹性伸缩根据负载自动调整持续改进不断优化部署流程记住容器化不是目的是手段。