【问题标题】:Access Kubernetes Api from a Pod with Java-Client Library使用 Java 客户端库从 Pod 访问 Kubernetes Api
【发布时间】:2021-07-14 19:49:24
【问题描述】:

我目前使用客户端 java kubernetes 库从 Kubernetes API 获取指标

<dependency>
    <groupId>io.kubernetes</groupId>
    <artifactId>client-java</artifactId>
    <version>12.0.0</version>
</dependency>

我发现位于 https://kubernetes.default.svc/api/v1/nodes/worker02/proxy/metrics/cadvisor 这个路径下的一些关于网络和文件系统 I/O 的指标非常有趣。

container_network_receive_bytes_total{container="",id="/kubepods/besteffort/podb6bf750b-4501-4082-9a50-3751ff1e4f0f/72f84fc52547c628baeee527a47faa204eadd660ba4cbb94d8889562ff0b7789",image="docker.io/rancher/pause:3.1",interface="eth0",name="72f84fc52547c628baeee527a47faa204eadd660ba4cbb94d8889562ff0b7789",namespace="kube-system",pod="svclb-traefik-2wlkz"} 50398 1618932055188

但是,由于它们采用 prometheus 指标格式,因此库不支持它们。

我后来意识到,使用 http 客户端获取信息不成功(javax.net.ssl.SSLHandshakeException),因为我没有传递令牌和证书。有没有办法使用 client-java 库来获取 API 的原始答案?

我正在考虑这样的事情,提前谢谢

String apiAnswer = client.getRaw("/api/v1/nodes/worker02/proxy/metrics/cadvisor");

【问题讨论】:

    标签: kubernetes kubernetes-apiserver kubernetes-metrics


    【解决方案1】:

    您可以直接使用ApiClient 拨打电话。像这样的。

    ApiClient client = Config.defaultClient();
    ApiResponse<Object> result = client.execute(client.buildCall(...));
    

    【讨论】:

    • 嗨,我尝试了以下 'ApiResponse 结果 = client.execute(client.buildCall("/api/v1/nodes/worker01/proxy/metrics/cadvisor", "GET",空,空,空,空,空,空,空,空)); ' 但是我得到了一个运行时异常,因为 authNames 为空。您能否提供一个关于要传递哪些参数的示例?
    猜你喜欢
    • 2020-09-11
    • 2018-05-07
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2019-09-18
    • 2018-06-26
    • 2019-08-15
    • 1970-01-01
    相关资源
    最近更新 更多