【发布时间】:2020-05-23 09:58:47
【问题描述】:
我正在使用Kubernetes的official java client请求集群的Pods、Deployment等资源。
但不幸的是,我发现似乎没有 API 可以请求集群指标,例如所有 pod 使用的总 CPU 和内存。
您知道如何使用 Java 客户端获取集群指标吗?
谢谢!
【问题讨论】:
标签: java kubernetes metrics
我正在使用Kubernetes的official java client请求集群的Pods、Deployment等资源。
但不幸的是,我发现似乎没有 API 可以请求集群指标,例如所有 pod 使用的总 CPU 和内存。
您知道如何使用 Java 客户端获取集群指标吗?
谢谢!
【问题讨论】:
标签: java kubernetes metrics
将metrics-server 部署到集群。
然后,您将可以访问 metrics.k8s.io/v1beta1 API 以获取 pods 和 nodes 作为普通 kubernetes 资源。您应该可以运行kubectl top pod 进行测试。
我看不出官方 java 客户端无法发现这些资源的任何原因,但如果确实如此,它们可以在以下 URL 获得
https://api-server/apis/metrics.k8s.io/v1beta1/pods
https://api-server/apis/metrics.k8s.io/v1beta1/nodes
【讨论】:
您认为official java client 无法做到这一点。
您可以设置prometheus,将其配置为抓取指标并使用Prometheus HTTP API 以JSON 格式获取API 响应。
【讨论】:
我使用kubectl top api获取每个节点的资源消耗,并将它们相加。
import static io.kubernetes.client.extended.kubectl.Kubectl.top;
import io.kubernetes.client.custom.NodeMetrics;
import io.kubernetes.client.openapi.models.V1Node;
import org.apache.commons.lang3.tuple.Pair;
List<Pair<V1Node, NodeMetrics>> nodesMetrics = top(V1Node.class, NodeMetrics.class).apiClient(client).metric("cpu").execute();
Maven 依赖:
<dependency>
<groupId>io.kubernetes</groupId>
<artifactId>client-java</artifactId>
<version>10.0.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.kubernetes</groupId>
<artifactId>client-java-extended</artifactId>
<version>10.0.1</version>
</dependency>
【讨论】: