如何将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
相关产品推荐
相关产品推荐

