You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Docker Compose配置迁移至Kubernetes集群?

背景

我在Celery Workers和Docker方面有丰富经验,但对Kubernetes的了解非常基础。以下是我通过多个Celery任务服务器在生产环境中部署机器学习模型的架构图(若有不清楚的地方,欢迎提问):

架构图

简单来说,用户(不一定是人类用户,也可以是前端客户端)向运行在Uvicorn上的FastAPI服务器发送请求。一个Redis服务作为ASGI(FastAPI)和Celery Workers之间的消息代理。任务接收后,终端用户会获得一个任务ID,用于轮询任务状态并获取结果。双向箭头表示用于发送任务参数、任务ID,接收状态、结果等的双向数据流。

为完整起见,以下是我用于启动所有服务并暴露FastAPI的Docker Compose配置:

version: '2'
services:
  redis: # Private redis service
    image: "redis:alpine"

  worker: # Private workers
    build:
      context: .
      dockerfile: ./docker/worker/Dockerfile
    image: worker_image
    # container_name: worker_container
    depends_on:
      - redis
    deploy:
      replicas: 3 # Replicas require unique container names 

  asgi: # Only container that is exposed to the user
    build:
      context: .
      dockerfile: ./docker/asgi/Dockerfile
    image: asgi_image
    container_name: asgi_container
    ports:
      - "8080:8080" # host:container
    depends_on:
      - worker

该配置运行正常。

目标

Docker Compose不支持跨节点的容器编排,因此我希望将部署迁移至Kubernetes以利用其水平扩展能力。我原以为组件已容器化,迁移不会太难,但不确定如何管理这三层架构(仅Worker层需要副本)。因此我需要一些关于编写Deployment、Service和Ingress清单的提示。

我使用的是托管式CIVO集群(若相关),基础配置不成问题。关于编排,我的初步想法是:

  • 将Celery容器写入Deployment清单,并设置所需的副本数
  • 将ASGI和Redis(不需要副本)放在Kubernetes之外,作为独立的非托管容器运行
  • 像之前一样仅向外部暴露ASGI

但有没有更好的方案,将所有组件都放入集群中?对应的Deployment和Service清单应该如何编写?

不需要为我编写完整的清单文件,但资深DevOps专家的一些提示将不胜感激。


内容的提问来源于stack exchange,提问作者Della

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:55:13