【发布时间】:2017-08-08 03:19:42
【问题描述】:
我需要在 pod3 之前创建 pod1 和 pod2。这意味着我需要订单。我还希望将 pod3 暴露在集群外部(外部)的 80 端口。起初我想我想在 StatefulSet 中组织这些创建。
但是,Stateful Sets 似乎需要 Headless Service。
StatefulSets 目前需要一个 Headless Service 来负责 用于 Pod 的网络身份。您负责创建 此服务。
这意味着
有时您不需要或不需要负载平衡和单个服务 IP。在这种情况下,您可以通过为集群 IP (spec.clusterIP) 指定“无”来创建“无头”服务。
我需要将 pod3(通过服务)暴露在集群之外,而无头服务不允许我这样做。在 Kubernetes 中执行此操作的正确方法是什么?
【问题讨论】:
-
为什么在 pod3 之前需要 pod1 / pod2?如果 pod1/pod2 死了会发生什么?它们也是同一个应用程序(例如数据库集群分片吗?),如果不是 statefulset 则不是合适的资源。
-
@ant31 一个例子是我的 Web 客户端将连接到数据库或 api-server,因此我需要在启动我的 Web 客户端 pod 之前确保这些服务器已启动。我意识到替代方案是:首先手动启动 pod1/pod2 容器,验证 pod 是否正在运行,然后手动启动 pod3。另一种方法是编写一个脚本来检查部署状态,一旦我看到活动状态,就创建 pod3 部署。我猜想有状态集的一种方式是它们是包装器/容器,用于将服务容器组合在一起?
-
像这样的简单用例,db在api-server之前,我建议你不要担心。 api-server 将回退并尝试直到成功(当数据库准备好时)。如果你真的想要一个依赖,看看 init_containers。
标签: kubernetes