我想知道如何在部署中的Pod中实现一个共置的辅助容器,它不提供服务而是提供作业/批处理工作负载?
我的问题的背景是,我想部署一个可伸缩的服务,每个实例在启动后都需要配置。此配置通过HTTP POST到其本地共同定位的服务实例完成。我为此实现了一个辅助容器,以便从托管的功能中受益。因此,辅助容器始终知道需要配置哪个实例。
问题是,需要在Pod级别定义restartPolicy
。我正在寻找服务的重启策略always
和配置作业的不同重启策略onFailure
。
我知道k8s为这些工作负载提供了Job
资源。但有没有选择将这些工作分配给Pods?
此外,我偶然发现了所谓的init容器,这些容器可能是通过注释定义的。但是这些都有缺点,k8s确保实际的Pod只在init容器运行后启动。因此,对于我的情况,它似乎不合适。
答案 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
广告连播。