动态运行Docker容器以在Kubernetes中作为API服务执行任务



我在Kubernetes中建立了一个基本的体系结构,一个用于应用程序级代码的Laravel容器,以及一个用于数据库的Mysql容器。我希望实现一个代码编译API服务(作为一个单独的容器(,它接受用户生成的代码,然后我运行一个docker容器来编译代码并将输出返回给用户。

网上有一些非常原始的实现,但大多数都使用docker作为一种在隔离环境中运行用户生成的代码编译的方法(正如你应该做的那样(,但应用程序本身并不是使用容器或容器管理系统托管的。

问题是,如何旋转docker容器来处理任务,然后在关闭容器之前将输出返回到我的Laravel API容器?

显然,在docker容器中运行docker容器不是最佳实践。

流程:

  1. 用户向Laravel API容器发送post请求
  2. Laravel API容器将接受请求并运行docker容器来编译代码
  3. 临时docker容器将在之前将编译后的输出返回到Laravel API容器关闭
  4. Laravel API容器将编译后的响应返回给最终用户

我正在Kubernetes集群中运行我的应用程序,需要一个Docker/Kubernete解决方案。我不必在应用程序级代码中运行启动Docker容器的原始命令,而是有一个更高级别的解决方案。

您可以使用Kubernetes作业资源来执行此类任务。

Jobs对象可以派生为在内部运行进程,并且可以设置为之后自动终止。Kubernetes中的一个作业是执行批处理过程的pod的主管,也就是说,运行一段时间直到完成的过程。您可以在一个作业中运行多个pod实例(并行或顺序(。

有关作业的详细信息,请查看此页面。

所以基本上你的流程应该是这样的:

  1. 用户发送对Laravel API容器的请求
  2. Laravel API容器需要与API服务器交互才能创建作业
  3. 作业中的Pod将编译代码,编译后,将向Laravel API Pod发送一个请求,以交付编译后的二进制文件

二进制文件的交付应由用户进行编码

  1. Laravel API容器将向用户返回编译后的响应

此文档链接显示如何连接到API,尤其是从Pod 访问API部分

最新更新