如何监听kubernetes job?

啊啊 发表于: 2021-08-08   最后更新时间: 2021-08-08 23:18:34   1,699 游览

我有一些kubernetes jobs,需要不同的时间来完成。在4到8分钟之间。有什么方法可以让我知道一个job何时完成,我有一个测试案例,任务如下:

1) 提交kubernetes job。
2) 等待其完成。
3) 检查该jobs是否产生了预期的影响。

问题是,在我的java测试中,在kubernetes中提交部署job时,即使job完成的时间少于8分钟,我也要等待8分钟,因为我没有办法从java测试中监控job的状态。

发表于 2021-08-08
$ 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());

希望对你有帮助

你的答案

查看kubernetes相关的其他问题或提一个您自己的问题