在k8s中托管cli应用程序的最佳方法是什么?

时间:2020-06-01 18:31:37

标签: kubernetes containers kubernetes-pod

我有两个服务,一个基于http(s),另一个是cli,它位于单独的部署中(与第一个不在同一主机上)。让我们将这些服务命名为Alice和Bob。

Alice是http服务器,而bob是cli工具,用于按需将一些数据放入Alice。

到目前为止我做了什么?

Bob作为一个单独的pod存在,并且由于它没有提供http服务,因此我在其容器CMD中使用了“ sleep infinity”以使其始终运行。

我期望什么?

考虑到该服务通常不会使用,除非有人需要在Alice中供应数据。这种应用程序还有哪些其他部署选项?

我不期望什么?

由于以下原因,我不能让它与爱丽丝驻留在同一容器中

  • 不存在HTTP服务,它受时间限制,需要大量代码重构。这是我的正式项目,所以无法透露更多细节。

1 个答案:

答案 0 :(得分:1)

在我看来,您有两个选择。 选项1:Bob是不需要端点的CLI工具,因此您可以将其部署为kubernetes批处理作业。这非常容易,您可以使用玉米表达来安排它。 这是链接https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/

Alice是一项服务,因此您可以根据公开的端点执行它。因此,根据您的特定需求,它可以是入口,负载平衡器或节点端口。

选项2:您可以使用Knative体系结构。您需要基于云提供商安装knative crds。安装后,您可以简单地使用事件驱动的-knative事件来调用批处理。例如,您想基于诸如Pubsub或SNS update之类的事件来呼叫Bob,则可以很好地使用它来完成此操作。 原始服务是一种简单的服务,易于实现。就像kubernetes清单文件(它只有服务,不像kubernetes部署和服务)。因此,当您要将Alice作为服务调用时,可以将其用作端点。

希望这会有所帮助。