我想在kubernetes中运行一组“容器”,每个容器仅在docker环境变量上有所不同(每个容器都搜索它自己的数据集,该数据集位于网络存储上,然后缓存到容器的ram中)。例如:
随着时间的流逝,我想从此“集合”中添加(有时删除)容器,但不想这样做时重新启动所有容器。
根据我对Kubernetes的幼稚知识,我看到的唯一方法是:
所以我的问题是:
我可以使用StatefulSet来管理它吗?
1.1。当StatefulSet被“更新”时,即使它们的“ spec”没有改变,它也必须重启所有的pod吗? 1.2 StatefulSets是否允许每个唯一的容器/容器具有其自己的环境变量?
答案 0 :(得分:0)
根据您的描述,StatefulSet是您所需要的。
1.1。当StatefulSet被“更新”时,即使它们的“ spec”没有改变,它也必须重新启动所有Pod吗?
您可以选择适当的update strategy。我建议RollingUpdate
,但您可以尝试任何适合您的方法。
也请查看此tutorial。
1.2 StatefulSets是否允许每个唯一的容器/容器具有其自己的环境变量?
是的,因为它们的命名是一致的(name-0
,name-1
,name-2
等)。您可以在其中使用主机名(主机名)索引。
请告诉我是否有帮助。
答案 1 :(得分:0)
如果您希望容器最终能够完成其工作量并终止(而不是永远处理加载在RAM中的单个项目),则应在Kubernetes上使用作业队列(例如Celery)来管理执行。在这种情况下,Celery将进行所有编排,包括在失败时重新启动作业。这比直接使用Kubernetes更容易管理。
Kubernetes甚至提供an official example这样的设置。