0

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

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

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

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

  • 每个容器都可以是它自己的部署——但是有成千上万个容器,所以修改和管理会很痛苦。

所以我的问题是:

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

    1.1。当 StatefulSet 被“更新”时,它是否必须重新启动所有 pod,即使它们的“规范”没有改变?1.2 StatefulSets 是否允许每个独特的容器/pod 拥有自己的环境变量?

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

2 回答 2

0

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

Kubernetes 甚至提供了这种设置的官方示例

于 2019-07-09T13:57:40.007 回答
0

According to your description, the StatefulSet it's what you need.

1.1. When a StatefulSet is "updated", must it restart all pods, even if their "spec" is unchanged?

You can choose a proper update strategy. I suggest RollingUpdate but you can try whatever suits you.

Also check out this tutorial.

1.2 Do StatefulSets allow for each unique container/pod to have its own environment variable(s)?

Yes, because their naming is consistent (name-0, name-1, name-2, etc). You can use hostname (pod name) index with that.

Please let me know if that helped.

于 2019-07-03T10:11:22.627 回答