如何使用Watch从listPodForAllNamespacesCall获得正确的Kubernetes Pod更新数量

时间:2019-01-15 14:47:36

标签: java docker kubernetes kubernetes-health-check kubernetes-pod

我创建了一个watch service以获取更新的pod结果,但是它在运行时未收集正确的数据。

要进行测试,我运行了一个脚本来删除5个吊舱,然后每隔5分钟创建5个新吊舱。

我运行了监视服务,看它是否捕获了正确的结果。 Watch服务往往会在大约2个小时内捕获正确的结果,然后我看到了差异,我猜这是因为Watch服务重新启动并且显示了错误的结果。

观看服务显示的实际number of active podsnumber of pods是不同的!让我知道要获得正确的更新Pod结果需要进行哪些更改。

请找到下面的 Java 代码。

Configuration.setDefaultApiClient(client);
client.getHttpClient().setReadTimeout(180, TimeUnit.SECONDS);
api = new CoreV1Api(client);
ExecutorService executorService = Executors.newFixedThreadPool(1);

executorService.execute(() -> {
 try {
  watchPods();
 } catch (Exception e) {
  e.printStackTrace();
  try {
   Thread.sleep(15000);
  } catch (InterruptedException e1) {
   e1.printStackTrace();
  }
 }
});

private void watchPods() throws ApiException {
 while (true) {
  Watch < V1Pod > watch = Watch.createWatch(client, api.listPodForAllNamespacesCall(null, null, null, null, null,
   null, null, null, Boolean.TRUE, 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);
  }
  System.out.println("Restarting watchPods()");
 }

}

0 个答案:

没有答案