From a7851b7420c8b7dcd34340953ee26bc2575a3ab3 Mon Sep 17 00:00:00 2001 From: Michael Pappas Date: Mon, 8 Feb 2021 16:02:18 -0500 Subject: [PATCH 1/2] Use allocatable instead of capacity for node resources. Signed-off-by: Michael Pappas --- src/main/prometheus/lens.ts | 6 +++--- src/main/prometheus/operator.ts | 6 +++--- src/main/prometheus/stacklight.ts | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/prometheus/lens.ts b/src/main/prometheus/lens.ts index 18c4763dc9..d33768f478 100644 --- a/src/main/prometheus/lens.ts +++ b/src/main/prometheus/lens.ts @@ -55,11 +55,11 @@ export class PrometheusLens implements PrometheusProvider { `.replace(/_bytes/g, `_bytes{kubernetes_node=~"${opts.nodes}"}`), memoryRequests: `sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="memory"}) by (component)`, memoryLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="memory"}) by (component)`, - memoryCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="memory"}) by (component)`, + memoryCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="memory"}) by (component)`, cpuUsage: `sum(rate(node_cpu_seconds_total{kubernetes_node=~"${opts.nodes}", mode=~"user|system"}[${this.rateAccuracy}]))`, cpuRequests:`sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="cpu"}) by (component)`, cpuLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="cpu"}) by (component)`, - cpuCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="cpu"}) by (component)`, + cpuCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="cpu"}) by (component)`, podUsage: `sum({__name__=~"kubelet_running_pod_count|kubelet_running_pods", instance=~"${opts.nodes}"})`, podCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="pods"}) by (component)`, fsSize: `sum(node_filesystem_size_bytes{kubernetes_node=~"${opts.nodes}", mountpoint="/"}) by (kubernetes_node)`, @@ -68,7 +68,7 @@ export class PrometheusLens implements PrometheusProvider { case "nodes": return { memoryUsage: `sum (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) by (kubernetes_node)`, - memoryCapacity: `sum(kube_node_status_capacity{resource="memory"}) by (node)`, + memoryCapacity: `sum(kube_node_status_allocatable{resource="memory"}) by (node)`, cpuUsage: `sum(rate(node_cpu_seconds_total{mode=~"user|system"}[${this.rateAccuracy}])) by(kubernetes_node)`, cpuCapacity: `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`, fsSize: `sum(node_filesystem_size_bytes{mountpoint="/"}) by (kubernetes_node)`, diff --git a/src/main/prometheus/operator.ts b/src/main/prometheus/operator.ts index dead850056..0c44f7e236 100644 --- a/src/main/prometheus/operator.ts +++ b/src/main/prometheus/operator.ts @@ -65,11 +65,11 @@ export class PrometheusOperator implements PrometheusProvider { `.replace(/_bytes/g, `_bytes * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"}`), memoryRequests: `sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="memory"})`, memoryLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="memory"})`, - memoryCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="memory"})`, + memoryCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="memory"})`, cpuUsage: `sum(rate(node_cpu_seconds_total{mode=~"user|system"}[${this.rateAccuracy}])* on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"})`, cpuRequests:`sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="cpu"})`, cpuLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="cpu"})`, - cpuCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="cpu"})`, + cpuCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="cpu"})`, podUsage: `sum({__name__=~"kubelet_running_pod_count|kubelet_running_pods", node=~"${opts.nodes}"})`, podCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="pods"})`, fsSize: `sum(node_filesystem_size_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"})`, @@ -78,7 +78,7 @@ export class PrometheusOperator implements PrometheusProvider { case "nodes": return { memoryUsage: `sum((node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) * on (pod,namespace) group_left(node) kube_pod_info) by (node)`, - memoryCapacity: `sum(kube_node_status_capacity{resource="memory"}) by (node)`, + memoryCapacity: `sum(kube_node_status_allocatable{resource="memory"}) by (node)`, cpuUsage: `sum(rate(node_cpu_seconds_total{mode=~"user|system"}[${this.rateAccuracy}]) * on (pod,namespace) group_left(node) kube_pod_info) by (node)`, cpuCapacity: `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`, fsSize: `sum(node_filesystem_size_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info) by (node)`, diff --git a/src/main/prometheus/stacklight.ts b/src/main/prometheus/stacklight.ts index 0bdda6b96e..9169ca775f 100644 --- a/src/main/prometheus/stacklight.ts +++ b/src/main/prometheus/stacklight.ts @@ -55,11 +55,11 @@ export class PrometheusStacklight implements PrometheusProvider { `.replace(/_bytes/g, `_bytes{node=~"${opts.nodes}"}`), memoryRequests: `sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="memory"}) by (component)`, memoryLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="memory"}) by (component)`, - memoryCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="memory"}) by (component)`, + memoryCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="memory"}) by (component)`, cpuUsage: `sum(rate(node_cpu_seconds_total{node=~"${opts.nodes}", mode=~"user|system"}[${this.rateAccuracy}]))`, cpuRequests:`sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="cpu"}) by (component)`, cpuLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="cpu"}) by (component)`, - cpuCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="cpu"}) by (component)`, + cpuCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="cpu"}) by (component)`, podUsage: `sum({__name__=~"kubelet_running_pod_count|kubelet_running_pods", instance=~"${opts.nodes}"})`, podCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="pods"}) by (component)`, fsSize: `sum(node_filesystem_size_bytes{node=~"${opts.nodes}", mountpoint="/"}) by (node)`, @@ -68,7 +68,7 @@ export class PrometheusStacklight implements PrometheusProvider { case "nodes": return { memoryUsage: `sum (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) by (node)`, - memoryCapacity: `sum(kube_node_status_capacity{resource="memory"}) by (node)`, + memoryCapacity: `sum(kube_node_status_allocatable{resource="memory"}) by (node)`, cpuUsage: `sum(rate(node_cpu_seconds_total{mode=~"user|system"}[${this.rateAccuracy}])) by(node)`, cpuCapacity: `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`, fsSize: `sum(node_filesystem_size_bytes{mountpoint="/"}) by (node)`, From b6c0c30ebde608288bbc587201834005905c54a5 Mon Sep 17 00:00:00 2001 From: Michael Pappas Date: Fri, 21 May 2021 17:59:15 -0400 Subject: [PATCH 2/2] Add back total capacity for node resources Display both Total Capacity and Allocatable Capacity on node and cluster graphs . Signed-off-by: Michael Pappas --- src/main/prometheus/lens.ts | 15 +++++--- src/main/prometheus/operator.ts | 15 +++++--- src/main/prometheus/provider-registry.ts | 7 ++++ src/main/prometheus/stacklight.ts | 15 +++++--- src/renderer/api/endpoints/cluster.api.ts | 4 +++ src/renderer/api/endpoints/nodes.api.ts | 4 +++ .../+cluster/cluster-pie-charts.tsx | 34 ++++++++++--------- .../components/+nodes/node-charts.tsx | 18 +++++++++- src/renderer/components/+nodes/nodes.tsx | 2 +- 9 files changed, 84 insertions(+), 30 deletions(-) diff --git a/src/main/prometheus/lens.ts b/src/main/prometheus/lens.ts index d33768f478..cca2bc1b09 100644 --- a/src/main/prometheus/lens.ts +++ b/src/main/prometheus/lens.ts @@ -53,24 +53,31 @@ export class PrometheusLens implements PrometheusProvider { node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes) ) by (kubernetes_name) `.replace(/_bytes/g, `_bytes{kubernetes_node=~"${opts.nodes}"}`), + workloadMemoryUsage: `sum(container_memory_working_set_bytes{container!="POD",container!="",instance=~"${opts.nodes}"}) by (component)`, memoryRequests: `sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="memory"}) by (component)`, memoryLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="memory"}) by (component)`, - memoryCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="memory"}) by (component)`, + memoryCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="memory"}) by (component)`, + memoryAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="memory"}) by (component)`, cpuUsage: `sum(rate(node_cpu_seconds_total{kubernetes_node=~"${opts.nodes}", mode=~"user|system"}[${this.rateAccuracy}]))`, cpuRequests:`sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="cpu"}) by (component)`, cpuLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="cpu"}) by (component)`, - cpuCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="cpu"}) by (component)`, + cpuCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="cpu"}) by (component)`, + cpuAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="cpu"}) by (component)`, podUsage: `sum({__name__=~"kubelet_running_pod_count|kubelet_running_pods", instance=~"${opts.nodes}"})`, podCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="pods"}) by (component)`, + podAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="pods"}) by (component)`, fsSize: `sum(node_filesystem_size_bytes{kubernetes_node=~"${opts.nodes}", mountpoint="/"}) by (kubernetes_node)`, fsUsage: `sum(node_filesystem_size_bytes{kubernetes_node=~"${opts.nodes}", mountpoint="/"} - node_filesystem_avail_bytes{kubernetes_node=~"${opts.nodes}", mountpoint="/"}) by (kubernetes_node)` }; case "nodes": return { memoryUsage: `sum (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) by (kubernetes_node)`, - memoryCapacity: `sum(kube_node_status_allocatable{resource="memory"}) by (node)`, + workloadMemoryUsage: `sum(container_memory_working_set_bytes{container!="POD",container!=""}) by (instance)`, + memoryCapacity: `sum(kube_node_status_capacity{resource="memory"}) by (node)`, + memoryAllocatableCapacity: `sum(kube_node_status_allocatable{resource="memory"}) by (node)`, cpuUsage: `sum(rate(node_cpu_seconds_total{mode=~"user|system"}[${this.rateAccuracy}])) by(kubernetes_node)`, - cpuCapacity: `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`, + cpuCapacity: `sum(kube_node_status_capacity{resource="cpu"}) by (node)`, + cpuAllocatableCapacity: `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`, fsSize: `sum(node_filesystem_size_bytes{mountpoint="/"}) by (kubernetes_node)`, fsUsage: `sum(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) by (kubernetes_node)` }; diff --git a/src/main/prometheus/operator.ts b/src/main/prometheus/operator.ts index 0c44f7e236..6fce9bfecb 100644 --- a/src/main/prometheus/operator.ts +++ b/src/main/prometheus/operator.ts @@ -63,24 +63,31 @@ export class PrometheusOperator implements PrometheusProvider { node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes) ) `.replace(/_bytes/g, `_bytes * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"}`), + workloadMemoryUsage: `sum(container_memory_working_set_bytes{container!="POD",container!="",instance=~"${opts.nodes}"}) by (component)`, memoryRequests: `sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="memory"})`, memoryLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="memory"})`, - memoryCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="memory"})`, + memoryCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="memory"})`, + memoryAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="memory"})`, cpuUsage: `sum(rate(node_cpu_seconds_total{mode=~"user|system"}[${this.rateAccuracy}])* on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"})`, cpuRequests:`sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="cpu"})`, cpuLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="cpu"})`, - cpuCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="cpu"})`, + cpuCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="cpu"})`, + cpuAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="cpu"})`, podUsage: `sum({__name__=~"kubelet_running_pod_count|kubelet_running_pods", node=~"${opts.nodes}"})`, podCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="pods"})`, + podAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="pods"})`, fsSize: `sum(node_filesystem_size_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"})`, fsUsage: `sum(node_filesystem_size_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"} - node_filesystem_avail_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"})` }; case "nodes": return { memoryUsage: `sum((node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) * on (pod,namespace) group_left(node) kube_pod_info) by (node)`, - memoryCapacity: `sum(kube_node_status_allocatable{resource="memory"}) by (node)`, + workloadMemoryUsage: `sum(container_memory_working_set_bytes{container!="POD",container!=""}) by (instance)`, + memoryCapacity: `sum(kube_node_status_capacity{resource="memory"}) by (node)`, + memoryAllocatableCapacity: `sum(kube_node_status_allocatable{resource="memory"}) by (node)`, cpuUsage: `sum(rate(node_cpu_seconds_total{mode=~"user|system"}[${this.rateAccuracy}]) * on (pod,namespace) group_left(node) kube_pod_info) by (node)`, - cpuCapacity: `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`, + cpuCapacity: `sum(kube_node_status_capacity{resource="cpu"}) by (node)`, + cpuAllocatableCapacity: `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`, fsSize: `sum(node_filesystem_size_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info) by (node)`, fsUsage: `sum((node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) * on (pod,namespace) group_left(node) kube_pod_info) by (node)` }; diff --git a/src/main/prometheus/provider-registry.ts b/src/main/prometheus/provider-registry.ts index db40ec460b..ea2d68a61a 100644 --- a/src/main/prometheus/provider-registry.ts +++ b/src/main/prometheus/provider-registry.ts @@ -23,22 +23,29 @@ import type { CoreV1Api } from "@kubernetes/client-node"; export type PrometheusClusterQuery = { memoryUsage: string; + workloadMemoryUsage: string; memoryRequests: string; memoryLimits: string; memoryCapacity: string; + memoryAllocatableCapacity: string; cpuUsage: string; cpuRequests: string; cpuLimits: string; cpuCapacity: string; + cpuAllocatableCapacity: string; podUsage: string; podCapacity: string; + podAllocatableCapacity: string; }; export type PrometheusNodeQuery = { memoryUsage: string; + workloadMemoryUsage: string; memoryCapacity: string; + memoryAllocatableCapacity: string; cpuUsage: string; cpuCapacity: string; + cpuAllocatableCapacity: string; fsSize: string; fsUsage: string; }; diff --git a/src/main/prometheus/stacklight.ts b/src/main/prometheus/stacklight.ts index 9169ca775f..c6050cbb3f 100644 --- a/src/main/prometheus/stacklight.ts +++ b/src/main/prometheus/stacklight.ts @@ -53,24 +53,31 @@ export class PrometheusStacklight implements PrometheusProvider { node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes) ) by (kubernetes_name) `.replace(/_bytes/g, `_bytes{node=~"${opts.nodes}"}`), + workloadMemoryUsage: `sum(container_memory_working_set_bytes{container!="POD",container!="",instance=~"${opts.nodes}"}) by (component)`, memoryRequests: `sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="memory"}) by (component)`, memoryLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="memory"}) by (component)`, - memoryCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="memory"}) by (component)`, + memoryCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="memory"}) by (component)`, + memoryAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="memory"}) by (component)`, cpuUsage: `sum(rate(node_cpu_seconds_total{node=~"${opts.nodes}", mode=~"user|system"}[${this.rateAccuracy}]))`, cpuRequests:`sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="cpu"}) by (component)`, cpuLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="cpu"}) by (component)`, - cpuCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="cpu"}) by (component)`, + cpuCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="cpu"}) by (component)`, + cpuAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="cpu"}) by (component)`, podUsage: `sum({__name__=~"kubelet_running_pod_count|kubelet_running_pods", instance=~"${opts.nodes}"})`, podCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="pods"}) by (component)`, + podAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="pods"}) by (component)`, fsSize: `sum(node_filesystem_size_bytes{node=~"${opts.nodes}", mountpoint="/"}) by (node)`, fsUsage: `sum(node_filesystem_size_bytes{node=~"${opts.nodes}", mountpoint="/"} - node_filesystem_avail_bytes{node=~"${opts.nodes}", mountpoint="/"}) by (node)` }; case "nodes": return { memoryUsage: `sum (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) by (node)`, - memoryCapacity: `sum(kube_node_status_allocatable{resource="memory"}) by (node)`, + workloadMemoryUsage: `sum(container_memory_working_set_bytes{container!="POD",container!=""}) by (instance)`, + memoryCapacity: `sum(kube_node_status_capacity{resource="memory"}) by (node)`, + memoryAllocatableCapacity: `sum(kube_node_status_allocatable{resource="memory"}) by (node)`, cpuUsage: `sum(rate(node_cpu_seconds_total{mode=~"user|system"}[${this.rateAccuracy}])) by(node)`, - cpuCapacity: `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`, + cpuCapacity: `sum(kube_node_status_capacity{resource="cpu"}) by (node)`, + cpuAllocatableCapacity: `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`, fsSize: `sum(node_filesystem_size_bytes{mountpoint="/"}) by (node)`, fsUsage: `sum(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) by (node)` }; diff --git a/src/renderer/api/endpoints/cluster.api.ts b/src/renderer/api/endpoints/cluster.api.ts index 309f936ac7..a189303890 100644 --- a/src/renderer/api/endpoints/cluster.api.ts +++ b/src/renderer/api/endpoints/cluster.api.ts @@ -33,15 +33,19 @@ export class ClusterApi extends KubeApi { return metricsApi.getMetrics({ memoryUsage: opts, + workloadMemoryUsage: opts, memoryRequests: opts, memoryLimits: opts, memoryCapacity: opts, + memoryAllocatableCapacity: opts, cpuUsage: opts, cpuRequests: opts, cpuLimits: opts, cpuCapacity: opts, + cpuAllocatableCapacity: opts, podUsage: opts, podCapacity: opts, + podAllocatableCapacity: opts, fsSize: opts, fsUsage: opts }, params); diff --git a/src/renderer/api/endpoints/nodes.api.ts b/src/renderer/api/endpoints/nodes.api.ts index aea040eb77..28a5350b55 100644 --- a/src/renderer/api/endpoints/nodes.api.ts +++ b/src/renderer/api/endpoints/nodes.api.ts @@ -30,7 +30,9 @@ export class NodesApi extends KubeApi { return metricsApi.getMetrics({ memoryUsage: opts, + workloadMemoryUsage: opts, memoryCapacity: opts, + memoryAllocatableCapacity: opts, cpuUsage: opts, cpuCapacity: opts, fsSize: opts, @@ -42,7 +44,9 @@ export class NodesApi extends KubeApi { export interface INodeMetrics { [metric: string]: T; memoryUsage: T; + workloadMemoryUsage: T; memoryCapacity: T; + memoryAllocatableCapacity: T; cpuUsage: T; cpuCapacity: T; fsUsage: T; diff --git a/src/renderer/components/+cluster/cluster-pie-charts.tsx b/src/renderer/components/+cluster/cluster-pie-charts.tsx index b7b84c817d..e0d03f12b4 100644 --- a/src/renderer/components/+cluster/cluster-pie-charts.tsx +++ b/src/renderer/components/+cluster/cluster-pie-charts.tsx @@ -45,20 +45,20 @@ export const ClusterPieCharts = observer(() => { const renderCharts = () => { const data = getMetricLastPoints(clusterOverviewStore.metrics); - const { memoryUsage, memoryRequests, memoryCapacity, memoryLimits } = data; - const { cpuUsage, cpuRequests, cpuCapacity, cpuLimits } = data; - const { podUsage, podCapacity } = data; - const cpuLimitsOverload = cpuLimits > cpuCapacity; - const memoryLimitsOverload = memoryLimits > memoryCapacity; + const { memoryUsage, memoryRequests, memoryAllocatableCapacity, memoryCapacity, memoryLimits } = data; + const { cpuUsage, cpuRequests, cpuAllocatableCapacity, cpuCapacity, cpuLimits } = data; + const { podUsage, podAllocatableCapacity, podCapacity } = data; + const cpuLimitsOverload = cpuLimits > cpuAllocatableCapacity; + const memoryLimitsOverload = memoryLimits > memoryAllocatableCapacity; const defaultColor = ThemeStore.getInstance().activeTheme.colors.pieChartDefaultColor; - - if (!memoryCapacity || !cpuCapacity || !podCapacity) return null; + + if (!memoryCapacity || !cpuCapacity || !podCapacity || !memoryAllocatableCapacity || !cpuAllocatableCapacity || !podAllocatableCapacity) return null; const cpuData: ChartData = { datasets: [ { data: [ cpuUsage, - cpuUsage ? cpuCapacity - cpuUsage : 1, + cpuUsage ? cpuAllocatableCapacity - cpuUsage : 1, ], backgroundColor: [ "#c93dce", @@ -69,7 +69,7 @@ export const ClusterPieCharts = observer(() => { { data: [ cpuRequests, - cpuRequests ? cpuCapacity - cpuRequests : 1, + cpuRequests ? cpuAllocatableCapacity - cpuRequests : 1, ], backgroundColor: [ "#4caf50", @@ -80,7 +80,7 @@ export const ClusterPieCharts = observer(() => { { data: [ cpuLimits, - cpuLimitsOverload ? 0 : cpuCapacity - cpuLimits, + cpuLimitsOverload ? 0 : cpuAllocatableCapacity - cpuLimits, ], backgroundColor: [ "#3d90ce", @@ -93,6 +93,7 @@ export const ClusterPieCharts = observer(() => { `Usage: ${cpuUsage ? cpuUsage.toFixed(2) : "N/A"}`, `Requests: ${cpuRequests ? cpuRequests.toFixed(2) : "N/A"}`, `Limits: ${cpuLimits ? cpuLimits.toFixed(2) : "N/A"}`, + `Allocatable Capacity: ${cpuAllocatableCapacity || "N/A"}`, `Capacity: ${cpuCapacity || "N/A"}` ] }; @@ -101,7 +102,7 @@ export const ClusterPieCharts = observer(() => { { data: [ memoryUsage, - memoryUsage ? memoryCapacity - memoryUsage : 1, + memoryUsage ? memoryAllocatableCapacity - memoryUsage : 1, ], backgroundColor: [ "#c93dce", @@ -112,7 +113,7 @@ export const ClusterPieCharts = observer(() => { { data: [ memoryRequests, - memoryRequests ? memoryCapacity - memoryRequests : 1, + memoryRequests ? memoryAllocatableCapacity - memoryRequests : 1, ], backgroundColor: [ "#4caf50", @@ -123,7 +124,7 @@ export const ClusterPieCharts = observer(() => { { data: [ memoryLimits, - memoryLimitsOverload ? 0 : memoryCapacity - memoryLimits, + memoryLimitsOverload ? 0 : memoryAllocatableCapacity - memoryLimits, ], backgroundColor: [ "#3d90ce", @@ -136,7 +137,8 @@ export const ClusterPieCharts = observer(() => { `Usage: ${bytesToUnits(memoryUsage)}`, `Requests: ${bytesToUnits(memoryRequests)}`, `Limits: ${bytesToUnits(memoryLimits)}`, - `Capacity: ${bytesToUnits(memoryCapacity)}`, + `Allocatable Capacity: ${bytesToUnits(memoryAllocatableCapacity)}`, + `Capacity: ${bytesToUnits(memoryCapacity)}` ] }; const podsData: ChartData = { @@ -144,7 +146,7 @@ export const ClusterPieCharts = observer(() => { { data: [ podUsage, - podUsage ? podCapacity - podUsage : 1, + podUsage ? podAllocatableCapacity - podUsage : 1, ], backgroundColor: [ "#4caf50", @@ -155,7 +157,7 @@ export const ClusterPieCharts = observer(() => { ], labels: [ `Usage: ${podUsage || 0}`, - `Capacity: ${podCapacity}`, + `Capacity: ${podAllocatableCapacity}`, ] }; diff --git a/src/renderer/components/+nodes/node-charts.tsx b/src/renderer/components/+nodes/node-charts.tsx index 664da5a19b..3edcb4b12f 100644 --- a/src/renderer/components/+nodes/node-charts.tsx +++ b/src/renderer/components/+nodes/node-charts.tsx @@ -47,8 +47,10 @@ export const NodeCharts = observer(() => { const { memoryUsage, + workloadMemoryUsage, memoryRequests, memoryCapacity, + memoryAllocatableCapacity, cpuUsage, cpuRequests, cpuCapacity, @@ -92,6 +94,13 @@ export const NodeCharts = observer(() => { borderColor: "#c93dce", data: memoryUsage.map(([x, y]) => ({ x, y })) }, + { + id: `${id}-workloadMemoryUsage`, + label: `Workload Memory Usage`, + tooltip: `Workload memory usage`, + borderColor: "#9cd3ce", + data: workloadMemoryUsage.map(([x, y]) => ({ x, y })) + }, { id: "memoryRequests", label: `Requests`, @@ -99,6 +108,13 @@ export const NodeCharts = observer(() => { borderColor: "#30b24d", data: memoryRequests.map(([x, y]) => ({ x, y })) }, + { + id: `${id}-memoryAllocatableCapacity`, + label: `Allocatable Capacity`, + tooltip: `Memory allocatable capacity`, + borderColor: "#032b4d", + data: memoryAllocatableCapacity.map(([x, y]) => ({ x, y })) + }, { id: `${id}-memoryCapacity`, label: `Capacity`, @@ -148,7 +164,7 @@ export const NodeCharts = observer(() => { yAxes: [{ ticks: { callback: value => value - } + } }] }, tooltips: { diff --git a/src/renderer/components/+nodes/nodes.tsx b/src/renderer/components/+nodes/nodes.tsx index 953562b06b..e55f96691f 100644 --- a/src/renderer/components/+nodes/nodes.tsx +++ b/src/renderer/components/+nodes/nodes.tsx @@ -90,7 +90,7 @@ export class Nodes extends React.Component { } renderMemoryUsage(node: Node) { - const metrics = nodesStore.getLastMetricValues(node, ["memoryUsage", "memoryCapacity"]); + const metrics = nodesStore.getLastMetricValues(node, ["workloadMemoryUsage", "memoryAllocatableCapacity"]); if (!metrics || !metrics[1]) return ; const usage = metrics[0];