【问题标题】:kubernetes-client watch till all pods are upkubernetes-client 监视直到所有 pod 都启动
【发布时间】:2021-05-17 11:57:51
【问题描述】:

我想在命名空间中轮询 pod 状态,直到所有 pod 都启动,我正在使用 kubernetes-client 库来检查它。当所有 pod 都启动时,退出条件应该是什么。当所有 pod 都启动时,我需要关闭手表,但它会一直轮询直到创建手表对象时给定的超时时间

 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);
}

【问题讨论】:

    标签: java kubernetes


    【解决方案1】:

    使用以下函数获取所有 pod 详细信息

    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:
    
                        }
    

    【讨论】:

      猜你喜欢
      • 2022-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      • 2021-03-28
      • 1970-01-01
      • 2016-05-13
      相关资源
      最近更新 更多