use of io.fabric8.kubernetes.api.model.metrics.v1beta1.NodeMetrics in project kubernetes-client by fabric8io.
the class TopExample method main.
public static void main(String[] args) {
try (KubernetesClient client = new KubernetesClientBuilder().build()) {
if (!client.supportsApiPath("/apis/metrics.k8s.io")) {
logger.warn("Metrics API is not enabled in your cluster");
return;
}
logger.info("==== Node Metrics ====");
client.top().nodes().metrics().getItems().forEach(nodeMetrics -> logger.info("{}\tCPU: {}{}\tMemory: {}{}", nodeMetrics.getMetadata().getName(), nodeMetrics.getUsage().get(CPU).getAmount(), nodeMetrics.getUsage().get(CPU).getFormat(), nodeMetrics.getUsage().get(MEMORY).getAmount(), nodeMetrics.getUsage().get(MEMORY).getFormat()));
final String namespace = Optional.ofNullable(client.getNamespace()).orElse("default");
logger.info("==== Pod Metrics ====");
client.top().pods().metrics(namespace).getItems().forEach(podMetrics -> podMetrics.getContainers().forEach(containerMetrics -> logger.info("{}\t{}\tCPU: {}{}\tMemory: {}{}", podMetrics.getMetadata().getName(), containerMetrics.getName(), containerMetrics.getUsage().get(CPU).getAmount(), containerMetrics.getUsage().get(CPU).getFormat(), containerMetrics.getUsage().get(MEMORY).getAmount(), containerMetrics.getUsage().get(MEMORY).getFormat())));
client.pods().inNamespace(namespace).list().getItems().stream().findFirst().map(pod -> {
logger.info("==== Individual Pod Metrics ({}) ====", pod.getMetadata().getName());
try {
return client.top().pods().metrics(namespace, pod.getMetadata().getName());
} catch (KubernetesClientException ex) {
if (ex.getCode() == HttpURLConnection.HTTP_NOT_FOUND) {
logger.info(" - Pod has not reported any metrics yet");
} else {
logger.warn(" - Error retrieving Pod metrics: {}", ex.getMessage());
}
return null;
}
}).ifPresent(podMetrics -> podMetrics.getContainers().forEach(containerMetrics -> logger.info("{}\t{}\tCPU: {}{}\tMemory: {}{}", podMetrics.getMetadata().getName(), containerMetrics.getName(), containerMetrics.getUsage().get(CPU).getAmount(), containerMetrics.getUsage().get(CPU).getFormat(), containerMetrics.getUsage().get(MEMORY).getAmount(), containerMetrics.getUsage().get(MEMORY).getFormat())));
} catch (KubernetesClientException e) {
logger.error(e.getMessage(), e);
}
}
use of io.fabric8.kubernetes.api.model.metrics.v1beta1.NodeMetrics in project kubernetes-client by fabric8io.
the class MetricsTest method testNodeMetric.
@Test
void testNodeMetric() {
server.expect().get().withPath("/apis/metrics.k8s.io/v1beta1/nodes/test-node").andReturn(200, getNodeMetric()).once();
NodeMetrics nodeMetrics = client.top().nodes().metrics("test-node");
assertEquals("foo", nodeMetrics.getMetadata().getName());
}
use of io.fabric8.kubernetes.api.model.metrics.v1beta1.NodeMetrics in project Taier by DTStack.
the class AbstractK8sResourceInfo method getResource.
public void getResource(KubernetesClient kubernetesClient) {
List<Node> nodes = kubernetesClient.nodes().list().getItems();
Map<String, NodeStatus> nodeStatusMap = new HashMap<>(nodes.size());
for (Node node : nodes) {
nodeStatusMap.put(node.getMetadata().getName(), node.getStatus());
}
NodeMetricOperationsImpl nodeMetricOperations = kubernetesClient.top().nodes();
List<NodeMetrics> nodeMetrics = nodeMetricOperations.metrics().getItems();
for (NodeMetrics nodeMetric : nodeMetrics) {
String nodeName = nodeMetric.getMetadata().getName();
NodeStatus nodeStatus = nodeStatusMap.get(nodeName);
Map<String, Quantity> allocatable = nodeStatus.getAllocatable();
Map<String, Quantity> usage = nodeMetric.getUsage();
BigDecimal cpuAllocatable = Quantity.getAmountInBytes(allocatable.get(CPU));
BigDecimal cpuUsage = Quantity.getAmountInBytes(usage.get(CPU));
BigDecimal menAllocatable = Quantity.getAmountInBytes(allocatable.get(MEMORY));
BigDecimal menUsage = Quantity.getAmountInBytes(usage.get(MEMORY));
double freeCores = cpuAllocatable.subtract(cpuUsage).doubleValue();
double freeMem = menAllocatable.subtract(menUsage).doubleValue();
this.addNodeResource(new AbstractK8sResourceInfo.NodeResourceDetail(nodeName, cpuAllocatable.doubleValue(), cpuUsage.doubleValue(), freeCores, menAllocatable.doubleValue(), menUsage.doubleValue(), freeMem));
}
calc();
}
use of io.fabric8.kubernetes.api.model.metrics.v1beta1.NodeMetrics in project kubernetes-client by fabric8io.
the class NodeMetricsTest method testMetrics.
@Test
void testMetrics() {
// Given
server.expect().withPath("/apis/metrics.k8s.io/v1beta1/nodes/the-node").andReturn(HTTP_OK, new NodeMetricsListBuilder().addToItems(new NodeMetricsBuilder().withNewMetadata().withName("the-metric").endMetadata().build()).build()).once();
// When
final NodeMetricsList result = client.top().nodes().withName("the-node").metrics();
// Then
assertThat(result).extracting(NodeMetricsList::getItems).asList().singleElement().hasFieldOrPropertyWithValue("Kind", "NodeMetrics").hasFieldOrPropertyWithValue("metadata.name", "the-metric");
}
use of io.fabric8.kubernetes.api.model.metrics.v1beta1.NodeMetrics in project yakc by manusa.
the class MetricsV1beta1ApiIT method readNodeMetrics.
@Test
@DisplayName("readNodeMetrics, cluster contains at least a Node with some metrics")
void readNodeMetrics() throws IOException, InterruptedException {
// Given
final String node = KC.create(CoreV1Api.class).listNode().stream().findFirst().map(Node::getMetadata).map(ObjectMeta::getName).orElseThrow(() -> new AssertionError("No nodes found"));
// When
final NodeMetrics result = getWithRetry(() -> KC.create(MetricsV1beta1Api.class).readNodeMetrics(node).get());
// Then
assertThat(result).hasFieldOrPropertyWithValue("metadata.name", node).hasFieldOrProperty("usage.cpu").hasFieldOrProperty("usage.memory").hasFieldOrProperty("window").extracting(NodeMetrics::getTimestamp).isNotNull();
}
Aggregations