【发布时间】:2018-05-25 16:33:04
【问题描述】:
- 当前配置:
- 16 个 pod 正在运行,基于 JBoss TCP 的集群,带有 google ping 发现。容器作为有状态集部署在 Kubernetes 集群上。
- 没有负载的初始集群按预期工作,没有任何问题,但是当负载增加时,观察到以下行为:
- 在管理初始负载期间,某些 pod 变得不可用,因此这些 pod 会自动重新启动。
- 重新启动这些 pod 后,它们会从新 IP 地址开始,但相同的主机会使用旧 IP 地址保留在 JBoss 发现文件中。结果,此发现文件包含具有多个 IP 地址的主机。
aaa-ops-stage-0 b6418a02-4db3-0397-ba2b-5a4a3e274560 10.20.0.17:7800 F
aaa-ops-stage-1 d57dc7b7-997f-236e-eb9f-a1604ddafc8f 10.20.0.10:7800 F
aaa-ops-stage-1 63a54371-111e-f9e9-3de5-65c6f6ff9dcd 10.20.0.16:7800 F
aaa-ops-stage-1 2dfeb3d8-6cc4-03e0-719e-b4dbb8a63815 10.20.1.13:7800 T
aaa-ops-stage-0 8053ed47-ba1b-5bb1-fcd2-a2cffb154703 10.20.0.9:7800 F
aaa-ops-stage-0 7068cd6c-ff83-dd5d-1610-e5c03f089605 10.20.0.9:7800 F
aaa-ops-stage-0 6230152a-1bc7-30ed-0073-816224bcdc26 10.20.0.14:7800 F
- 当发生这种情况并重新启动 pod 时,此 pod 的启动速度非常慢,因为它会尝试将集群消息发送到上面发现文件中的所有记录。因为 aaa-ops-stage-0 有一个新的并且只有一个 IP,所有其他的 aaa-ops-stage-0 只是超时。如果 pod 0 的重启次数很多,我们在发现文件中有更多记录。这通常也会增加每次 pod 重新启动时的启动时间,因为它以新 IP 出现并且超时变得更多。
- 在 pod 配置中实现了就绪探针,用于更改新启动的 pod 的状态,通过这种方式,负载均衡器知道 pod 何时准备好接收请求。不幸的是,由于上述大量超时,Pod 永远不会完全启动,因为就绪探针会在 60 秒不可用后重新启动 Pod。最终导致所有 pod 陷入重启循环,服务完全停止。
我相信,如果我们有可能使用粘性 IP,并且当 pod 以 10.20.0.17 启动时,它会在重新启动期间保持此 IP。通过这样做,我们将避免上述行为,并且不会有超时。没有超时将完全减少从就绪探测触发的重新启动,并且服务将保持正常运行并且不计我们产生的负载。
问题是,是否有可能为正在运行的 pod 使用静态或粘性 IP 地址,以及这些 IP 在重启期间是否有可能保持不变?也欢迎任何其他建议!
【问题讨论】:
-
你不会使用 kubernetes DNS 地址而不是 IP 地址吗? kubernetes.io/docs/concepts/services-networking/dns-pod-service
标签: jboss kubernetes