如何将 Docker Compose Manifest 迁移到 Kubernetes?

问题描述 投票:0回答:1
背景

我与 celery 工人和 docker 进行了广泛的合作,但我对 Kubernetes 的了解非常基础。这是我如何通过多个 celery 任务服务器在生产中提供一些机器学习模型的架构图。 (我希望该图传达了要点,但如果有任何不清楚的地方请问我。)

enter image description here

基本上,用户(不一定是人类用户,而是前端客户端)将请求发送到 FastAPI 服务器(通过 uvicorn 运行)。一项 Redis 服务充当 ASGI (FastAPI) 和 celery Worker 之间的消息代理。收到任务后,最终用户会获得一个任务 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。我希望由于组件已经容器化,所以这应该不难。但我不确定如何管理看似三层的架构,其中只有工作层需要复制。所以我需要一些关于如何编写部署、服务和入口清单的提示。

我正在使用托管 CIVO 集群(如果相关),因此基本配置不是问题。对于编曲,我的第一个想法是

  • 将 Celery 容器写入部署清单中,并包含必要数量的副本
  • 在 Kubernetes 之外将 ASGI 和 Redis(不需要副本)作为独立(非托管)容器运行
  • 像以前一样只将 ASGI 暴露给外界

但是有没有更好的方法,将所有内容都放在一个集群中?部署和服务清单应该是什么样子?

您不必为我写出完整的清单文件,但我们将真诚地感谢经验丰富的 DevOps 专家提供的一些提示。

docker kubernetes docker-compose redis celery
1个回答
0
投票

您可以尝试使用 https://kompose.io/ 将 docker-compose 转换为 Kubernetes 清单文件。

您可能需要为

asgi_container
https://kubernetes.io/docs/concepts/services-networking/ingress/

配置入口
© www.soinside.com 2019 - 2024. All rights reserved.