kubernetes-клиент наблюдает, пока все модули не будут запущены

#java #kubernetes

Вопрос:

Я хочу опросить статус модуля в пространстве имен, пока все модули не будут запущены, я использую клиентскую библиотеку kubernetes, чтобы проверить это. Каким должно быть условие выхода, когда все капсулы подняты. Мне нужно закрыть часы, когда все модули работают, но он продолжает опрашивать до истечения времени ожидания, указанного при создании объекта наблюдения

  String file = "C:\Project\config.yaml";
        String content = readFromFile(file);
        InputStream kubeConfigStream = new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8));
 ApiClient client = getApiClient(kubeConfigStream);
        Configuration.setDefaultApiClient(client);
        // infinite timeout
        OkHttpClient httpClient =
                client.getHttpClient().newBuilder().readTimeout(0, TimeUnit.SECONDS).build();
        client.setHttpClient(httpClient);
        Configuration.setDefaultApiClient(client);
        CoreV1Api api = new CoreV1Api();
        String namespace = "default";

 @Cleanup
        Watch<V1Pod> watch = Watch.createWatch(
                client,
                api.listNamespacedPodCall(namespace, null, true, null,
                        null, null, 20, null, null, 190, Boolean.TRUE, 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();
   
    System.out.printf("NAME:"  name "t status" status);
}
 

Ответ №1:

Получите все сведения о капсулах, используя функцию ниже

 V1PodList listNamespacePod =
                    coreV1Api.listNamespacedPod(
                            namespace,
                            null,
                            null,
                            null,
                            null,
                            null,
                            Integer.MAX_VALUE,
                            null,
                            null,
                            40,
                            Boolean.FALSE);
 

После этого обновление в реальном времени обновляется с помощью часов

  switch (eventType) {
                        case "ADDED":
                        case "MODIFIED":
                            checkContainerStatus(v1PodResponse, podName, namespacePods);
                            break;
                        case "DELETED":
                            namespacePods.remove(podName);
                            break;
                        case "FAILED":
                            namespacePods.put(podName, eventType);
                            break;
                        default:

                    }