我在Kubernetes中建立了一个基本的体系结构,一个用于应用程序级代码的Laravel容器,以及一个用于数据库的Mysql容器。我希望实现一个代码编译API服务(作为一个单独的容器(,它接受用户生成的代码,然后我运行一个docker容器来编译代码并将输出返回给用户。
网上有一些非常原始的实现,但大多数都使用docker作为一种在隔离环境中运行用户生成的代码编译的方法(正如你应该做的那样(,但应用程序本身并不是使用容器或容器管理系统托管的。
问题是,如何旋转docker容器来处理任务,然后在关闭容器之前将输出返回到我的Laravel API容器?
显然,在docker容器中运行docker容器不是最佳实践。
流程:
- 用户向Laravel API容器发送post请求
- Laravel API容器将接受请求并运行docker容器来编译代码
- 临时docker容器将在之前将编译后的输出返回到Laravel API容器关闭
- Laravel API容器将编译后的响应返回给最终用户
我正在Kubernetes集群中运行我的应用程序,需要一个Docker/Kubernete解决方案。我不必在应用程序级代码中运行启动Docker容器的原始命令,而是有一个更高级别的解决方案。
您可以使用Kubernetes作业资源来执行此类任务。
Jobs对象可以派生为在内部运行进程,并且可以设置为之后自动终止。Kubernetes中的一个作业是执行批处理过程的pod的主管,也就是说,运行一段时间直到完成的过程。您可以在一个作业中运行多个pod实例(并行或顺序(。
有关作业的详细信息,请查看此页面。
所以基本上你的流程应该是这样的:
- 用户发送对Laravel API容器的请求
- Laravel API容器需要与API服务器交互才能创建作业
- 作业中的Pod将编译代码,编译后,将向Laravel API Pod发送一个请求,以交付编译后的二进制文件
二进制文件的交付应由用户进行编码
- Laravel API容器将向用户返回编译后的响应
此文档链接显示如何连接到API,尤其是从Pod 访问API部分