轮询Pod的就绪状态

时间:2018-06-22 18:22:24

标签: java kubernetes fabric8 poller

我正在使用用于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()中编写我的轮询器?观察者的用例是什么?

1 个答案:

答案 0 :(得分:0)

  

// What causes the watcher to close?

由于手表是使用websockets实现的,因此连接可能会由于任何原因或没有原因而随时关闭。

  

观察者的用例是什么?

我想这有两个方面:不支付TCP / IP + SSL连接设置成本,使其更快,使系统由事件驱动而不是简单的轮询,这将使每个参与者使用更少的资源(服务器和您的客户端)。

但是,是的,您的问题的答案是,如果您尚未达到预期的Pod状态,则需要具有重试逻辑来重新建立观察程序。