【问题标题】:Understanding Kubernetes Watch (kubernetes-client/java api)了解 Kubernetes Watch (kubernetes-client/java api)
【发布时间】:2018-05-18 16:41:37
【问题描述】:

我正在使用 kubernetes-client/java api,我想以编程方式获取所有命名空间中所有 pod 的 pod 状态。我的代码基于这个example on Kubernetes java library

这是我的代码的 sn-p:

Watch<V1Pod> watch = Watch.createWatch(
        client,
        api.listPodForAllNamespacesCall(
            null, null, null, null, limit,
            null, null, null, watchTrue,
            null, null),
        new TypeToken<Watch.Response<V1Pod>>() {}.getType());

for (Watch.Response<V1Pod> item : watch) {
    V1PodStatus podStatus = item.object.getStatus();
    String name = item.object.getMetadata().getName();
    String status = podStatus.getPhase();
    String kind = item.object.getKind();
    String details = podStatus.toString();

    System.out.printf("NAME: %s | KIND: %s | STATUS: %s | DETAILS: %n%s%n====================%n", name, kind, status, details);
}

我的问题是: Watch 是否等同于事件处理程序?此代码向我显示了 pod 的所有状态的列表,但它会在实时发生时自动“推送”更多 pod 状态事件吗?还是只触发一次?

【问题讨论】:

  • 在我的情况下,我使用的是watch = false 并且线程没有被释放。我的意思是我可以列出 pod,但 java 应用程序不退出。你知道为什么吗?

标签: java kubernetes


【解决方案1】:

Watch 旨在发送持续更新。如果你运行你的程序一段时间并启动/停止某些东西,你会看到新的更新即将到来。

我不确定将其称为事件处理程序是否正确。这是一个不同的模式。

【讨论】:

  • 是的,这就是我试图了解它是什么类型的模式以及在延迟多长时间后它会推送任何新更新。基本上我想了解如果我创建手表,我是否会定期接收响应(如果它以预定的速率或仅在某些情况发生变化时),或者我应该只是调用 listPodForAllNamespaces 作为民意调查以获得新的状态在预定间隔。
  • Watch API 的模式是这样的: 1. 客户端接收当前状态作为列表 2. 客户端接收增量更新 保证一致,即不会错过任何事件。不过,我不知道 Java API 的详细信息。根据您想要实现的目标,您可能想要使用 Watch、List,或者如果您只想获取与特定标签匹配的所有 Pod 的 IP 地址,您可以使用更简单的无头服务并通过单个 DNS 查询获取 IP 地址.
  • 感谢您详细介绍 Watch。我创建了一个手表来查看所有 pod(如我上面的代码中所示),我缩小了几个 pod,但我没有在 Watch 中看到更新。我想我需要更多地使用它来看看它是如何工作的。将所有 pod(及其状态)列为轮询显然有效。
  • 如果 Watch 客户端实现正确,您应该会看到所有更改。作为 Watch 行为的一个简单示例,运行 kubectl get pod -w
猜你喜欢
  • 1970-01-01
  • 2018-11-29
  • 2020-08-20
  • 2020-12-23
  • 2018-08-11
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 2020-04-19
相关资源
最近更新 更多