如何等待kubernetes服务启动?

时间:2019-07-01 07:28:49

标签: java service kubernetes

在kubernetes中,我创建了一个服务:

V1ServicePort servicePort = new V1ServicePort().port(2000);
servicePort.setName("clientPort");

V1ServiceSpec spec = new V1ServiceSpec();
spec.addPortsItem(servicePort);
spec.setType("NodePort");
spec.putSelectorItem("app", "myAppName");

V1Service service = new V1Service();
service.setMetadata(new V1ObjectMeta().name("my_service"));
service.setSpec(spec);

api.createNamespacedService(namespace, myService, null);

,但不会立即开始。我只能在10秒后使用特定端口连接到服务。

如何在Java中发出等待请求,直到服务启动

1 个答案:

答案 0 :(得分:1)

在Kubernetes中通常会崩溃。确保记录异常或错误消息。

这听起来很糟糕,但实际上会发生的情况是Kubernetes默认情况下重新启动崩溃的Pod。给定JVM启动时间,第二次启动可能会花费10秒。如果您的进程真的很快启动,您将短暂进入CrashLoopBackOff状态,这仅表示Kubernetes在重新启动Pod之间暂停。

此方法的一个重要结果是,如果后端服务实际上无法启动,则依赖该服务的服务也将显示为失败(它们将卡在CrashLoopBackOff中)。然后,您可以使用kubectl logs进行诊断,并查看实际情况。

诸如Docker Compose设置中常见的wait-for-it.sh script之类的其他技巧,或者只是将您的connect调用置于for循环中,也可以使用,但如果整个系统运行不正常,失败将花费更长的时间。