AI应用的容器化部署:从Docker到Kubernetes

AI应用的容器化部署:从Docker到Kubernetes

前言

我们的产品从单服务器部署到多服务器部署时,遇到了很多问题:环境不一致、部署复杂、扩容困难。

后来我们引入了容器化和 Kubernetes,问题迎刃而解。今天,分享我们的实践经验。

一、容器化基础

1.1 Docker 入门

python 复制代码
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 Compose

python 复制代码
class 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 配置

python 复制代码
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 配置

python 复制代码
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 配置

python 复制代码
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 配置

python 复制代码
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 持续集成

python 复制代码
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 自动部署

python 复制代码
class AutoDeployment:
    def deploy(self, image_tag: str) -> dict:
        """自动部署"""
        return {
            "image": f"ai-app:{image_tag}",
            "strategy": "rollingUpdate",
            "success": True
        }

五、最佳实践

5.1 容器化原则

  • ✅ 单一职责:每个容器只运行一个进程
  • ✅ 不可变容器:容器创建后不修改
  • ✅ 健康检查:配置 liveness 和 readiness 探针
  • ✅ 资源限制:设置 CPU 和内存限制

5.2 Kubernetes 最佳实践

  • ✅ 副本管理:使用 Deployment 管理 Pod
  • ✅ 服务发现:使用 Service 进行服务发现
  • ✅ 配置管理:使用 ConfigMap 和 Secret
  • ✅ 自动扩缩容:使用 Horizontal Pod Autoscaler

六、总结

容器化和 Kubernetes 是现代化部署的基石。关键在于:

  1. 标准化环境:确保开发、测试、生产环境一致
  2. 自动化部署:减少人工操作
  3. 弹性伸缩:根据负载自动调整
  4. 持续改进:不断优化部署流程

记住:容器化不是目的,是手段。

相关推荐
skywalk816310 分钟前
给DeepSeek harness发布R107任务撰写工作:还有一些其它遗留问题,你也一并放到这一轮任务里!你写并行任务文档,我来分发!
人工智能·调试·deepseek
EatFan14 分钟前
AI 从「能生成」到「能交付」:2026年9月智能体(Agentic)成为产业主线的多源证据与开发者应对清单
人工智能·大模型·rag·智能体·mcp·agentic ai
水如烟15 分钟前
孤能子视角:从 EIS 的意识论、感质论与认知论解读病理
人工智能
百度一下吧25 分钟前
Codex 使用操作指南
人工智能
正经教主25 分钟前
【FDE系列】阶段3:Day 55:综合实战 — 巡检报告生成器与本周收官
人工智能·fde
和裕36 分钟前
全纸结构重型纸箱能否满足 1 吨以上设备出口熏蒸豁免要求?通关合规性全解析
大数据·运维·网络·人工智能·算法
Ai-_Man43 分钟前
您您这可以把Microsofat Copilot的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭
javascript·人工智能·ai·小程序·电脑·copilot
2601_9659690644 分钟前
教师考完AI证书后,应该完成哪些教学项目?
人工智能
七牛云行业应用1 小时前
GPT-6.1 Sol 发布:性能接近 Astra,价格只要五分之一
gpt·ai·大模型
代码方舟1 小时前
零信任架构实战:基于天远运营商三要素简版V即时版查询构建自动化电子投保实名核验网关
大数据·人工智能·架构·自动化