我有一些kubernetes jobs
,需要不同的时间来完成。在4到8分钟之间。有什么方法可以让我知道一个job何时完成,我有一个测试案例,任务如下:
1) 提交kubernetes job。
2) 等待其完成。
3) 检查该jobs是否产生了预期的影响。
问题是,在我的java测试中,在kubernetes中提交部署job时,即使job完成的时间少于8分钟,我也要等待8分钟,因为我没有办法从java测试中监控job的状态。
我有一些kubernetes jobs
,需要不同的时间来完成。在4到8分钟之间。有什么方法可以让我知道一个job何时完成,我有一个测试案例,任务如下:
1) 提交kubernetes job。
2) 等待其完成。
3) 检查该jobs是否产生了预期的影响。
问题是,在我的java测试中,在kubernetes中提交部署job时,即使job完成的时间少于8分钟,我也要等待8分钟,因为我没有办法从java测试中监控job的状态。
$ kubectl wait --for=condition=complete --timeout=600s job/myjob
我发现在使用
job.getStatus()
进行轮询时,即使在使用kubectl
从命令提示符检查时,状态发生变化,JobStatus
也不会被更新。为了解决这个问题,我重新加载job处理程序。
client.extensions().jobs() .inNamespace(myJob.getMetadata().getNamespace()) .withName(myJob.getMetadata().getName()) .get();
我检查job状态的循环是这样的。
KubernetesClient client = new DefaultKubernetesClient(config); Job myJob = client.extensions().jobs() .load(new FileInputStream("/path/x.yaml")) .create(); boolean jobActive = true; while(jobActive){ myJob = client.extensions().jobs() .inNamespace(myJob.getMetadata().getNamespace()) .withName(myJob.getMetadata().getName()) .get(); JobStatus myJobStatus = myJob.getStatus(); System.out.println("=================="); System.out.println(myJobStatus.toString()); if(myJob.getStatus().getActive()==null){ jobActive = false; } else { System.out.println(myJob.getStatus().getActive()); System.out.println("Sleeping for a minute before polling again!!"); Thread.sleep(60000); } } System.out.println(myJob.getStatus().toString());
希望对你有帮助
你的答案