Kubernetes是否提供了一个共置的Job容器?

时间:2017-02-06 12:46:36

标签: kubernetes google-cloud-platform google-kubernetes-engine

我想知道如何在部署中的Pod中实现一个共置的辅助容器,它不提供服务而是提供作业/批处理工作负载?

我的问题的背景是,我想部署一个可伸缩的服务,每个实例在启动后都需要配置。此配置通过HTTP POST到其本地共同定位的服务实例完成。我为此实现了一个辅助容器,以便从托管的功能中受益。因此,辅助容器始终知道需要配置哪个实例。

问题是,需要在Pod级别定义restartPolicy。我正在寻找服务的重启策略always和配置作业的不同重启策略onFailure

我知道k8s为这些工作负载提供了Job资源。但有没有选择将这些工作分配给Pods?

此外,我偶然发现了所谓的init容器,这些容器可能是通过注释定义的。但是这些都有缺点,k8s确保实际的Pod只在init容器运行后启动。因此,对于我的情况,它似乎不合适。

1 个答案:

答案 0 :(得分:0)

据我所知,您需要运行您的服务来配置它。

您的解决方案是可行的,您可以设置restartPolicy: always您只需要一种方法来告诉您的配置容器它已经运行。您可以创建emptyDir卷并将其附加到配置容器,在其上创建一个文件以标记配置成功并从您的流程中检查此文件。初始化后,在循环中输入sleep。缺点是该容器也将占用一些资源。

或者您可以在同一容器中添加额外的进程并进行配置(可能将上面提到的文件作为保护,以避免配置两次)。所以编写一个这样的简单shell脚本并运行它而不是主进程:

#!/bin/sh

(
  [ -f /mnt/guard-vol/stamp ] && exit 0
  /opt/my-config-process parameters && touch /mnt/guard-vol/stamp
) &

exec /opt/my-main-process "$@"

或者,您可以实现一个单独的窗格,该窗格使用标签configured=false查询kubernetes API以查找服务的窗格。配置它并使用API​​删除标签。您还应修改服务以选择configured=true广告连播。