【问题标题】:Polling for Pod's ready state轮询 Pod 的就绪状态
【发布时间】:2018-06-22 18:22:23
【问题描述】:

我正在使用适用于 java 的 fabric8 库在 Kubernetes 集群上部署应用程序。

我想轮询 pod 的状态以了解它们何时准备就绪。我开始自己写,直到我读到了 Watcher。

我实现了类似的东西

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

【问题讨论】:

    标签: java kubernetes fabric8 poller


    【解决方案1】:

    // What causes the watcher to close?

    由于手表是使用 websocket 实现的,因此连接随时可能出于任何原因或无原因关闭。

    观察者的用例是什么?

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

    但是是的,你的问题的答案是,如果你还没有达到你期望的 Pod 状态,你需要有重试逻辑来重新建立观察者。

    【讨论】:

    • 很好的答案,谢谢!您介意提供您已阅读的文档吗?
    • 我没有阅读文档,这只是我的好奇心和运行kubectl --v=100;看来我只猜对了一半:they also use transfer-encoding: chunked
    猜你喜欢
    • 2021-08-15
    • 1970-01-01
    • 2021-07-10
    • 2020-01-25
    • 2019-07-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    相关资源
    最近更新 更多