我正在使用用于Java的fabric8库在Kubernetes集群上部署应用程序。
我想轮询Pod的状态,以了解它们何时准备就绪。我开始写自己的文章,直到我了解了观察者。
我实现了这样的东西
deployment =
kubeClient.extensions().deployments().inNamespace(namespaceName).create(deployment);
kubeClient.pods().inNamespace(namespaceName).watch(new Watcher<Pod>() {
@Override
public void eventReceived(io.fabric8.kubernetes.client.Watcher.Action action,
Pod resource) {
logger.info("Pod event {} {}", action, resource);
logger.info("Pod status {} , Reason {} ", resource.getStatus().getPhase(),
resource.getStatus().getReason());
}
@Override
// What causes the watcher to close?
public void onClose(KubernetesClientException cause) {
if (cause != null) {
// throw?
logger.error("Pod event {} ", cause);
}
}
});
我不确定我是否正确理解Watcher功能。会超时吗?还是我仍然在eventReceivedMethod()中编写我的轮询器?观察者的用例是什么?
答案 0 :(得分:0)
// What causes the watcher to close?
由于手表是使用websockets实现的,因此连接可能会由于任何原因或没有原因而随时关闭。
观察者的用例是什么?
我想这有两个方面:不支付TCP / IP + SSL连接设置成本,使其更快,使系统由事件驱动而不是简单的轮询,这将使每个参与者使用更少的资源(服务器和您的客户端)。
但是,是的,您的问题的答案是,如果您尚未达到预期的Pod状态,则需要具有重试逻辑来重新建立观察程序。