如何在kubernetes中维护一组唯一的数字处理容器?

时间:2019-06-20 23:27:46

标签: kubernetes kubernetes-pod kubernetes-statefulset kubernetes-deployment

我想在kubernetes中运行一组“容器”,每个容器仅在docker环境变量上有所不同(每个容器都搜索它自己的数据集,该数据集位于网络存储上,然后缓存到容器的ram中)。例如:

  • 容器1->数据集1
  • 容器2->数据集2

随着时间的流逝,我想从此“集合”中添加(有时删除)容器,但不想这样做时重新启动所有容器。

根据我对Kubernetes的幼稚知识,我看到的唯一方法是:

  • 每个容器可以自己部署-但是有成千上万个容器,因此修改和管理很麻烦。

所以我的问题是:

  1. 我可以使用StatefulSet来管理它吗?

    1.1。当StatefulSet被“更新”时,即使它们的“ spec”没有改变,它也必须重启所有的pod吗? 1.2 StatefulSets是否允许每个唯一的容器/容器具有其自己的环境变量?

  2. 是否有任何Kubernetes概念可将部署“分组”到某个逻辑单元?
  3. 关于如何在kubernetes中实现这一点的其他想法?
  4. docker swarm(或其他容器管理平台)是否更适合我的用例?

2 个答案:

答案 0 :(得分:0)

根据您的描述,StatefulSet是您所需要的。

  

1.1。当StatefulSet被“更新”时,即使它们的“ spec”没有改变,它也必须重新启动所有Pod吗?

您可以选择适当的update strategy。我建议RollingUpdate,但您可以尝试任何适合您的方法。

也请查看此tutorial

  

1.2 StatefulSets是否允许每个唯一的容器/容器具有其自己的环境变量?

是的,因为它们的命名是一致的(name-0name-1name-2等)。您可以在其中使用主机名(主机名)索引。

请告诉我是否有帮助。

答案 1 :(得分:0)

如果您希望容器最终能够完成其工作量并终止(而不是永远处理加载在RAM中的单个项目),则应在Kubernetes上使用作业队列(例如Celery)来管理执行。在这种情况下,Celery将进行所有编排,包括在失败时重新启动作业。这比直接使用Kubernetes更容易管理。

Kubernetes甚至提供an official example这样的设置。