kubernetes Docker可以在运行时自动创建个性化/动态容器吗?

pkwftd7m  于 2023-04-05  发布在  Kubernetes
关注(0)|答案(1)|浏览(113)

我正在开发一个应用程序,允许用户提交他们的Python脚本。这些Python脚本将包含语言模型(LM),应用程序将使用这些语言模型来计算某些指标。
出于可扩展性和安全性的考虑,我计划在Docker容器中运行这些脚本。它们将充当“黑盒”,可以接受输入并返回输出,而应用程序不需要知道容器中发生了什么。
现在,我只需要进行概念验证,我假设Docker不仅允许用户手动创建容器,还允许自动创建容器。经过几个小时的搜索,我相信我错了。我读过关于Kubernetes的文章,但我不确定这是否是我需要的。
所以我的问题很简单:是否可以只使用Docker来实现这一点,或者我需要学习其他工具,如Kubernetes来实现这一点?

附加上下文

我曾经考虑过(只是为了概念验证)使用一个python程序来调用提交的代码,但我不知道它如何从提交的代码的导入中安装必要的包。我也不知道如何保持代码运行,因为LM需要保持加载才能运行,如果script1.pyscript2.py,它将不会一直执行到script 2。py已经完成运行,这意味着每次需要调用LM函数时,我都必须等待LM加载。此外,我已经有了一个docker-compose.yml文件,它会自动安装所有依赖项并容器化提交的python脚本,但它必须手动运行。
如果你想看看容器化的一些代码:
这将创建一个包含脚本的容器,该脚本充当LM和服务器之间的中间人,并自动安装LM所需的依赖项。

FROM python:3.9

WORKDIR /usr/app/src

COPY communicator.py ./
COPY lm_submission.py ./
COPY requirements.txt ./
RUN pip3 install -r requirements.txt

这个docker-compose文件手动创建“服务器”(为LM提供输入并等待输出的东西)和通信器(理论上,会有很多通信器运行多个LM和一个服务器。此外,chatGPT_roberta_model参数将是一个变量名,根据正在运行的LM的名称而变化)。

version: '3.9'

services:
  communicator:
    build: .
    command: sh -c "sleep 2s; python3 ./communicator.py chatGPT_roberta_model"
    environment:
      LISTEN_HOST: server
      LISTEN_PORT: 5555
    ports:
      - '5556:5555'
    depends_on:
      - server

  server:
    build: ./server/
    command: sh -c "python3 ./server.py"
    environment:
      SEND_HOST: server
      SEND_PORT: 5555
    ports:
      - '5555:5555'
yhuiod9q

yhuiod9q1#

如果使用正确的工具,准备POC所需的时间相对较少。
我建议你开始探索minikube,它是Kubernetes的精简版和便携版,非常适合这种类型的用例。
看看这里:https://minikube.sigs.k8s.io/docs/start/
显然,这些公司有云提供商或大型Kubernetes测试集群可用于这些需求;minikube更像是实验室的东西。
(我之所以提到Kubernetes,是因为作为一个容器编排器,它肯定是最好的选择,并且最接近可能的生产用例)
然后了解Kubernetes Deployment和Service资源,以释放您的“黑盒”应用程序。Deployment将允许您释放1个或多个Pod(应用程序+操作系统+网络的示例),Service将允许您在K8s集群内部和/或外部访问应用程序。
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
https://kubernetes.io/docs/concepts/services-networking/service/
这样就可以确保这些应用程序示例(Pod)保持启动和运行,并始终可供最终用户使用,只需遵循几个简单的步骤--〉Multi container pod with command sleep k8
最后,我建议不要创建有活跃root用户的容器(如果可能的话),并防止用户通过SSH访问这些Pod;当然,更好的解决方案可能是开发前端。
PS:如果你不知道如何生成Kubernetes清单,你可以简单地转换Docker Compose清单--〉https://kubernetes.io/docs/tasks/configure-pod-container/translate-compose-kubernetes/

相关问题