如何在一个Kubernetes的pod中实现后处理容器

时间:2018-07-25 07:58:39

标签: kubernetes containers

我有一个golang服务器,该服务器用于将AI模型培训部署到kubernetes中,每次培训都将在pod上运行。作业完成后,我的服务器需要将模型输出上传到HDFS / S3。

因此,我需要一个后容器来处理上传任务,例如init-container在k8s pod上执行init任务。

现在,我使用一种棘手的方式将模型作业容器添加到init容器中,然后在容器中运行上载任务容器。如果init容器中没有抛出任何错误,则此方法有效。但是,如果初始化容器中有错误,则窗格状态为Init:ContainerCannotRun,正常情况下应为Failed

我知道如果图像容器使用upload-hdfs / s3命令工具,我可以在容器生命周期事件中附加一个preStop命令。但是,我不想让模型训练图像包括这些命令。所以这不是我的答案。

所以我的问题是,如何实现后处理容器,以便在工作完成后运行上传任务?

我还在github中找到一个相关的issue,如果没有其他选择,我会尝试的。

1 个答案:

答案 0 :(得分:0)

Kubernetes中有两种应对方式- preStop钩子和用于侦听 SIGTERM 信号的代码。

此外,您可以增加终止宽限期,以便有更多时间终止Pod。

您可以在Attach Handlers to Container Lifecycle EventsKubernetes best practices: terminating with grace中找到更多信息。