在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中发出等待请求,直到服务启动?
答案 0 :(得分:1)
在Kubernetes中通常会崩溃。确保记录异常或错误消息。
这听起来很糟糕,但实际上会发生的情况是Kubernetes默认情况下重新启动崩溃的Pod。给定JVM启动时间,第二次启动可能会花费10秒。如果您的进程真的很快启动,您将短暂进入CrashLoopBackOff状态,这仅表示Kubernetes在重新启动Pod之间暂停。
此方法的一个重要结果是,如果后端服务实际上无法启动,则依赖该服务的服务也将显示为失败(它们将卡在CrashLoopBackOff中)。然后,您可以使用kubectl logs
进行诊断,并查看实际情况。
诸如Docker Compose设置中常见的wait-for-it.sh script之类的其他技巧,或者只是将您的connect调用置于for循环中,也可以使用,但如果整个系统运行不正常,失败将花费更长的时间。