我目前正在研究从基于AppEngine的服务中触发一些3D渲染。
想法是,API客户端将输入数据提交到此网络服务,然后该服务调用内部启用Kubernetes GPU的应用程序(“ 渲染后端”)努力工作。
支持GPU的集群相对昂贵($$$),因此我真的希望集群能够按需启动并运行。我正在尝试通过将渲染后端的自动缩放最小值设置为0来实现这一目标。
我可以想到的在这样的群集上“触发”渲染任务的唯一漂亮方法是通过Pub / Sub Push。基本上,我需要像Cloud Tasks这样的东西,但是这些似乎是针对在AppEngine中执行的长期运行的任务,而不是Kubernetes。另外,我喜欢Pub / Sub将Web服务与呈现后端分离的方式。
Google的发布/订阅仅允许通过HTTPS推送,并且只能推送到经过验证的域。似乎Google强迫我通过为其分配域名来完全“暴露”内部渲染后端,这听起来很荒谬。我不能只告诉发布者/订阅者调用db.query('SELECT * FROM subjects where id_enrollment =' + mysql.escape(id_enrollment))
。
这使我怀疑我的体系结构。
您将如何在GCP上构建类似的东西?
答案 0 :(得分:0)
从GKE角度来看:
您可以拥有一个群集,该群集具有基于GPU的专用节点池,并使用Taints and tolerations在此调度您的pod。此外,您可以使用Autoscaling控制节点池中的节点数,以便仅在计划/运行pod时才可以使用它们。
考虑到这需要一个额外的基于非GPU的默认节点池,该节点池正在其中运行。
对于触发,只要您的默认池正在运行,就可以部署应用程序,并且自动缩放应自动开始。为了从App Engine应用程序部署 ,您可能需要考虑直接与Kubernetes API对话through a library。
最后,考虑到您当前目标的性质(3D渲染),最好使用Kubernetes Jobs。有了这些,您就可以完成零星的计算任务,并允许节点池在完成后缩小规模。
最后,您可以拥有一个最小群集,该群集具有一个零大小的基于GPU的节点池,当要求在其中运行受污染的作业时,该群集将自动缩放,一旦工作负载完成,它就会自动缩小规模。可以使用客户端库之一从GAE触发这些操作。