diff --git a/admin/upgrade_cluster.sh b/admin/upgrade_cluster.sh
index dfc26e68..c48285e7 100755
--- a/admin/upgrade_cluster.sh
+++ b/admin/upgrade_cluster.sh
@@ -25,18 +25,8 @@ control_plane_upgrade kubeadm_upgrade
# shellcheck disable=SC2015
#argo_used && kubectl edit app kubezero -n argocd || kubectl edit cm kubezero-values -n kube-system
-### v1.28
-# - remove old argocd app, all resources will be taken over by argo.argo-cd
-argo_used && rc=$? || rc=$?
-if [ $rc -eq 0 ]; then
- kubectl patch app argocd -n argocd \
- --type json \
- --patch='[ { "op": "remove", "path": "/metadata/finalizers" } ]' && \
- kubectl delete app argocd -n argocd || true
-
- # remove legacy argocd app resources, but NOT kubezero-git-sync nor the appproject
- kubectl api-resources --verbs=list --namespaced -o name | grep -ve 'app.*argoproj' | xargs -n 1 kubectl delete --ignore-not-found -l argocd.argoproj.io/instance=argocd -n argocd
-fi
+### v1.29
+#
# upgrade modules
control_plane_upgrade "apply_network, apply_addons, apply_storage, apply_operators"
@@ -49,9 +39,9 @@ echo "Applying remaining KubeZero modules..."
control_plane_upgrade "apply_cert-manager, apply_istio, apply_istio-ingress, apply_istio-private-ingress, apply_logging, apply_metrics, apply_telemetry, apply_argo"
# Trigger backup of upgraded cluster state
-kubectl create job --from=cronjob/kubezero-backup kubezero-backup-$VERSION -n kube-system
+kubectl create job --from=cronjob/kubezero-backup kubezero-backup-$KUBE_VERSION -n kube-system
while true; do
- kubectl wait --for=condition=complete job/kubezero-backup-$VERSION -n kube-system 2>/dev/null && kubectl delete job kubezero-backup-$VERSION -n kube-system && break
+ kubectl wait --for=condition=complete job/kubezero-backup-$KUBE_VERSION -n kube-system 2>/dev/null && kubectl delete job kubezero-backup-$KUBE_VERSION -n kube-system && break
sleep 1
done
diff --git a/charts/kubezero-cert-manager/Chart.yaml b/charts/kubezero-cert-manager/Chart.yaml
index 8fbab0a3..6dd2effb 100644
--- a/charts/kubezero-cert-manager/Chart.yaml
+++ b/charts/kubezero-cert-manager/Chart.yaml
@@ -2,7 +2,7 @@ apiVersion: v2
name: kubezero-cert-manager
description: KubeZero Umbrella Chart for cert-manager
type: application
-version: 0.9.7
+version: 0.9.8
home: https://kubezero.com
icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png
keywords:
@@ -16,6 +16,6 @@ dependencies:
version: ">= 0.1.6"
repository: https://cdn.zero-downtime.net/charts/
- name: cert-manager
- version: v1.14.4
+ version: v1.15.1
repository: https://charts.jetstack.io
kubeVersion: ">= 1.26.0"
diff --git a/charts/kubezero-cert-manager/README.md b/charts/kubezero-cert-manager/README.md
index 103f1139..4f3fcef9 100644
--- a/charts/kubezero-cert-manager/README.md
+++ b/charts/kubezero-cert-manager/README.md
@@ -1,6 +1,6 @@
# kubezero-cert-manager
-![Version: 0.9.7](https://img.shields.io/badge/Version-0.9.7-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square)
+![Version: 0.9.8](https://img.shields.io/badge/Version-0.9.8-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square)
KubeZero Umbrella Chart for cert-manager
@@ -19,7 +19,7 @@ Kubernetes: `>= 1.26.0`
| Repository | Name | Version |
|------------|------|---------|
| https://cdn.zero-downtime.net/charts/ | kubezero-lib | >= 0.1.6 |
-| https://charts.jetstack.io | cert-manager | v1.14.4 |
+| https://charts.jetstack.io | cert-manager | v1.15.1 |
## AWS - OIDC IAM roles
@@ -37,6 +37,7 @@ If your resolvers need additional sercrets like CloudFlare API tokens etc. make
| cert-manager.cainjector.nodeSelector."node-role.kubernetes.io/control-plane" | string | `""` | |
| cert-manager.cainjector.tolerations[0].effect | string | `"NoSchedule"` | |
| cert-manager.cainjector.tolerations[0].key | string | `"node-role.kubernetes.io/control-plane"` | |
+| cert-manager.crds.enabled | bool | `true` | |
| cert-manager.enableCertificateOwnerRef | bool | `true` | |
| cert-manager.enabled | bool | `true` | |
| cert-manager.extraArgs[0] | string | `"--logging-format=json"` | |
diff --git a/charts/kubezero-cert-manager/jsonnetfile.lock.json b/charts/kubezero-cert-manager/jsonnetfile.lock.json
index da77c083..80cbb9e6 100644
--- a/charts/kubezero-cert-manager/jsonnetfile.lock.json
+++ b/charts/kubezero-cert-manager/jsonnetfile.lock.json
@@ -18,8 +18,8 @@
"subdir": "contrib/mixin"
}
},
- "version": "5a53a708d8ab9ef936ac5b8062ffc66c77a2c18f",
- "sum": "xuUBd2vqF7asyVDe5CE08uPT/RxAdy8O75EjFJoMXXU="
+ "version": "010d462c0ff03a70f5c5fd32efbb76ad4c1e7c81",
+ "sum": "IXI3LQIT9NmTPJAk8WLUJd5+qZfcGpeNCyWIK7oEpws="
},
{
"source": {
@@ -58,8 +58,8 @@
"subdir": "gen/grafonnet-latest"
}
},
- "version": "6ac1593ca787638da223380ff4a3fd0f96e953e1",
- "sum": "GxEO83uxgsDclLp/fmlUJZDbSGpeUZY6Ap3G2cgdL1g="
+ "version": "5a66b0f6a0f4f7caec754dd39a0e263b56a0f90a",
+ "sum": "eyuJ0jOXeA4MrobbNgU4/v5a7ASDHslHZ0eS6hDdWoI="
},
{
"source": {
@@ -68,18 +68,18 @@
"subdir": "gen/grafonnet-v10.0.0"
}
},
- "version": "6ac1593ca787638da223380ff4a3fd0f96e953e1",
- "sum": "W7sLuAvMSJPkC7Oo31t45Nz/cUdJV7jzNSJTd3F1daM="
+ "version": "5a66b0f6a0f4f7caec754dd39a0e263b56a0f90a",
+ "sum": "xdcrJPJlpkq4+5LpGwN4tPAuheNNLXZjE6tDcyvFjr0="
},
{
"source": {
"git": {
"remote": "https://github.com/grafana/grafonnet.git",
- "subdir": "gen/grafonnet-v10.4.0"
+ "subdir": "gen/grafonnet-v11.0.0"
}
},
- "version": "6ac1593ca787638da223380ff4a3fd0f96e953e1",
- "sum": "ZSmDT7i/qU9P8ggmuPuJT+jonq1ZEsBRCXycW/H5L/A="
+ "version": "5a66b0f6a0f4f7caec754dd39a0e263b56a0f90a",
+ "sum": "Fuo+qTZZzF+sHDBWX/8fkPsUmwW6qhH8hRVz45HznfI="
},
{
"source": {
@@ -88,8 +88,8 @@
"subdir": "grafana-builder"
}
},
- "version": "7561fd330312538d22b00e0c7caecb4ba66321ea",
- "sum": "+z5VY+bPBNqXcmNAV8xbJcbsRA+pro1R3IM7aIY8OlU="
+ "version": "1d877bb0651ef92176f651d0be473c06e372a8a0",
+ "sum": "udZaafkbKYMGodLqsFhEe+Oy/St2p0edrK7hiMPEey0="
},
{
"source": {
@@ -98,8 +98,8 @@
"subdir": ""
}
},
- "version": "72a094ff162bbd93921803994241d73900592c9a",
- "sum": "h+YvBTXL5A02165i3yt3SxSAbFftChtXYJ0nYFnOAqo="
+ "version": "b6a425db5c72b0159e3b8666b373e21bf487df9a",
+ "sum": "6KgWSzBFX09sycxfM3mYsY9Ua16ydCVpyFGYS0ZkpIo="
},
{
"source": {
@@ -118,8 +118,8 @@
"subdir": ""
}
},
- "version": "fc2e57a8839902ed4ba6cab5a99d642500f7102b",
- "sum": "43waffw1QzvpY4rKcWoo3L7Vpee+DCYexwLDd5cPG0M="
+ "version": "63d430b69a95741061c2f7fc9d84b1a778511d9c",
+ "sum": "qiZi3axUSXCVzKUF83zSAxklwrnitMmrDK4XAfjPMdE="
},
{
"source": {
@@ -128,8 +128,8 @@
"subdir": ""
}
},
- "version": "a1c276d7a46c4b06fa5d8b4a64441939d398efe5",
- "sum": "b/mEai1MvVnZ22YvZlXEO4jWDZledrtJg8eOS1ZUj0M="
+ "version": "3dfa72d1d1ab31a686b1f52ec28bbf77c972bd23",
+ "sum": "7ufhpvzoDqAYLrfAsGkTAIRmu2yWQkmHukTE//jOsJU="
},
{
"source": {
@@ -138,8 +138,8 @@
"subdir": "jsonnet/kube-state-metrics"
}
},
- "version": "9ba1c3702142918e09e8eb5ca530e15198624259",
- "sum": "msMZyUvcebzRILLzNlTIiSOwa1XgQKtP7jbZTkiqwM0="
+ "version": "7104d579e93d672754c018a924d6c3f7ec23874e",
+ "sum": "pvInhJNQVDOcC3NGWRMKRIP954mAvLXCQpTlafIg7fA="
},
{
"source": {
@@ -148,7 +148,7 @@
"subdir": "jsonnet/kube-state-metrics-mixin"
}
},
- "version": "9ba1c3702142918e09e8eb5ca530e15198624259",
+ "version": "7104d579e93d672754c018a924d6c3f7ec23874e",
"sum": "qclI7LwucTjBef3PkGBkKxF0mfZPbHnn4rlNWKGtR4c="
},
{
@@ -158,8 +158,8 @@
"subdir": "jsonnet/kube-prometheus"
}
},
- "version": "76f2e1ef95be0df752037baa040781c5219e1fb3",
- "sum": "IgpAgyyBZ7VT2vr9kSYQP/lkZUNQnbqpGh2sYCtUKs0="
+ "version": "defa2bd1e242519c62a5c2b3b786b1caa6d906d4",
+ "sum": "INKeZ+QIIPImq+TrfHT8CpYdoRzzxRk0txG07XlOo/Q="
},
{
"source": {
@@ -168,7 +168,7 @@
"subdir": "jsonnet/mixin"
}
},
- "version": "71d9433ba612f4b826ffa38520b23a7985b50db3",
+ "version": "609424db53853b992277b7a9a0e5cf59f4cc24f3",
"sum": "gi+knjdxs2T715iIQIntrimbHRgHnpM8IFBJDD1gYfs=",
"name": "prometheus-operator-mixin"
},
@@ -179,8 +179,8 @@
"subdir": "jsonnet/prometheus-operator"
}
},
- "version": "71d9433ba612f4b826ffa38520b23a7985b50db3",
- "sum": "S4LFa0h1AzANixqGMowtwVswVP+y6f+fXloxpO7hMes="
+ "version": "609424db53853b992277b7a9a0e5cf59f4cc24f3",
+ "sum": "z2/5LjQpWC7snhT+n/mtQqoy5986uI95sTqcKQziwGU="
},
{
"source": {
@@ -189,7 +189,7 @@
"subdir": "doc/alertmanager-mixin"
}
},
- "version": "14cbe6301c732658d6fe877ec55ad5b738abcf06",
+ "version": "eb8369ec510d76f63901379a8437c4b55885d6c5",
"sum": "IpF46ZXsm+0wJJAPtAre8+yxTNZA57mBqGpBP/r7/kw=",
"name": "alertmanager"
},
@@ -200,8 +200,8 @@
"subdir": "docs/node-mixin"
}
},
- "version": "3accd4cf8286e69d70516abdced6bf186274322a",
- "sum": "vWhHvFqV7+fxrQddTeGVKi1e4EzB3VWtNyD8TjSmevY="
+ "version": "b9d0932179a0c5b3a8863f3d6cdafe8584cedc8e",
+ "sum": "rhUvbqviGjQ2mwsRhHKMN0TiS3YvnYpUXHew3XlQ+Wg="
},
{
"source": {
@@ -210,8 +210,8 @@
"subdir": "documentation/prometheus-mixin"
}
},
- "version": "773170f372e0a57949854b74231ee3e09185f728",
- "sum": "u/Fpz2MPkezy71/q+c7mF0vc3hE9fWt2W/YbvF0LP/8=",
+ "version": "ac85bd47e1cfa0d63520e4c0b4e26900c42c326b",
+ "sum": "dYLcLzGH4yF3qB7OGC/7z4nqeTNjv42L7Q3BENU8XJI=",
"name": "prometheus"
},
{
@@ -232,7 +232,7 @@
"subdir": "mixin"
}
},
- "version": "93c79b61825ec00889188e35a58635eee247bc36",
+ "version": "35c0dbec856f97683a846e9c53f83156a3a44ff3",
"sum": "HhSSbGGCNHCMy1ee5jElYDm0yS9Vesa7QB2/SHKdjsY=",
"name": "thanos-mixin"
}
diff --git a/charts/kubezero-cert-manager/values.yaml b/charts/kubezero-cert-manager/values.yaml
index e35137ee..a0913d98 100644
--- a/charts/kubezero-cert-manager/values.yaml
+++ b/charts/kubezero-cert-manager/values.yaml
@@ -19,6 +19,9 @@ localCA:
cert-manager:
enabled: true
+ crds:
+ enabled: true
+
global:
leaderElection:
namespace: "cert-manager"
diff --git a/charts/kubezero-metrics/README.md b/charts/kubezero-metrics/README.md
index 49f89bfc..6f26f8eb 100644
--- a/charts/kubezero-metrics/README.md
+++ b/charts/kubezero-metrics/README.md
@@ -1,6 +1,6 @@
# kubezero-metrics
-![Version: 0.9.8](https://img.shields.io/badge/Version-0.9.8-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square)
+![Version: 0.9.9](https://img.shields.io/badge/Version-0.9.9-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square)
KubeZero Umbrella Chart for Prometheus, Grafana and Alertmanager as well as all Kubernetes integrations.
@@ -19,9 +19,9 @@ Kubernetes: `>= 1.26.0`
| Repository | Name | Version |
|------------|------|---------|
| https://cdn.zero-downtime.net/charts/ | kubezero-lib | >= 0.1.6 |
-| https://prometheus-community.github.io/helm-charts | kube-prometheus-stack | 58.0.0 |
+| https://prometheus-community.github.io/helm-charts | kube-prometheus-stack | 58.7.2 |
| https://prometheus-community.github.io/helm-charts | prometheus-adapter | 4.10.0 |
-| https://prometheus-community.github.io/helm-charts | prometheus-pushgateway | 2.10.0 |
+| https://prometheus-community.github.io/helm-charts | prometheus-pushgateway | 2.14.0 |
## Values
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/Chart.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/Chart.yaml
index 85e9d896..12b0c52e 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/Chart.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/Chart.yaml
@@ -7,7 +7,7 @@ annotations:
url: https://github.com/prometheus-operator/kube-prometheus
artifacthub.io/operator: "true"
apiVersion: v2
-appVersion: v0.73.0
+appVersion: v0.73.2
dependencies:
- condition: crds.enabled
name: crds
@@ -16,11 +16,11 @@ dependencies:
- condition: kubeStateMetrics.enabled
name: kube-state-metrics
repository: https://prometheus-community.github.io/helm-charts
- version: 5.18.*
+ version: 5.19.*
- condition: nodeExporter.enabled
name: prometheus-node-exporter
repository: https://prometheus-community.github.io/helm-charts
- version: 4.32.*
+ version: 4.34.*
- condition: grafana.enabled
name: grafana
repository: https://grafana.github.io/helm-charts
@@ -62,4 +62,4 @@ sources:
- https://github.com/prometheus-community/helm-charts
- https://github.com/prometheus-operator/kube-prometheus
type: application
-version: 58.0.0
+version: 58.7.2
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-alertmanagerconfigs.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-alertmanagerconfigs.yaml
index b22990ba..ea4e3440 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-alertmanagerconfigs.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-alertmanagerconfigs.yaml
@@ -1,11 +1,11 @@
-# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml
+# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.2/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
- operator.prometheus.io/version: 0.73.0
+ operator.prometheus.io/version: 0.73.2
argocd.argoproj.io/sync-options: ServerSideApply=true
name: alertmanagerconfigs.monitoring.coreos.com
spec:
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-alertmanagers.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-alertmanagers.yaml
index 7f14815b..2ef5a069 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-alertmanagers.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-alertmanagers.yaml
@@ -1,11 +1,11 @@
-# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml
+# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.2/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
- operator.prometheus.io/version: 0.73.0
+ operator.prometheus.io/version: 0.73.2
argocd.argoproj.io/sync-options: ServerSideApply=true
name: alertmanagers.monitoring.coreos.com
spec:
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-podmonitors.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-podmonitors.yaml
index 87a2f2cd..f2f160c9 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-podmonitors.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-podmonitors.yaml
@@ -1,11 +1,11 @@
-# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml
+# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.2/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
- operator.prometheus.io/version: 0.73.0
+ operator.prometheus.io/version: 0.73.2
argocd.argoproj.io/sync-options: ServerSideApply=true
name: podmonitors.monitoring.coreos.com
spec:
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-probes.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-probes.yaml
index fe811f35..e6c21a69 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-probes.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-probes.yaml
@@ -1,11 +1,11 @@
-# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.0/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml
+# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.2/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
- operator.prometheus.io/version: 0.73.0
+ operator.prometheus.io/version: 0.73.2
argocd.argoproj.io/sync-options: ServerSideApply=true
name: probes.monitoring.coreos.com
spec:
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheusagents.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheusagents.yaml
index ec3a0a29..cbf22c68 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheusagents.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheusagents.yaml
@@ -1,11 +1,11 @@
-# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusagents.yaml
+# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.2/example/prometheus-operator-crd/monitoring.coreos.com_prometheusagents.yaml
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
- operator.prometheus.io/version: 0.73.0
+ operator.prometheus.io/version: 0.73.2
argocd.argoproj.io/sync-options: ServerSideApply=true
name: prometheusagents.monitoring.coreos.com
spec:
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheuses.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheuses.yaml
index 2466fe2a..d33868a1 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheuses.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheuses.yaml
@@ -1,11 +1,11 @@
-# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml
+# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.2/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
- operator.prometheus.io/version: 0.73.0
+ operator.prometheus.io/version: 0.73.2
argocd.argoproj.io/sync-options: ServerSideApply=true
name: prometheuses.monitoring.coreos.com
spec:
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheusrules.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheusrules.yaml
index 18dd91f5..337a7dfe 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheusrules.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheusrules.yaml
@@ -1,11 +1,11 @@
-# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml
+# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.2/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
- operator.prometheus.io/version: 0.73.0
+ operator.prometheus.io/version: 0.73.2
argocd.argoproj.io/sync-options: ServerSideApply=true
name: prometheusrules.monitoring.coreos.com
spec:
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-scrapeconfigs.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-scrapeconfigs.yaml
index 332e377b..8de08ddd 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-scrapeconfigs.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-scrapeconfigs.yaml
@@ -1,11 +1,11 @@
-# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.0/example/prometheus-operator-crd/monitoring.coreos.com_scrapeconfigs.yaml
+# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.2/example/prometheus-operator-crd/monitoring.coreos.com_scrapeconfigs.yaml
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
- operator.prometheus.io/version: 0.73.0
+ operator.prometheus.io/version: 0.73.2
argocd.argoproj.io/sync-options: ServerSideApply=true
name: scrapeconfigs.monitoring.coreos.com
spec:
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-servicemonitors.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-servicemonitors.yaml
index 02bfc4a8..6e6da08b 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-servicemonitors.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-servicemonitors.yaml
@@ -1,11 +1,11 @@
-# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml
+# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.2/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
- operator.prometheus.io/version: 0.73.0
+ operator.prometheus.io/version: 0.73.2
argocd.argoproj.io/sync-options: ServerSideApply=true
name: servicemonitors.monitoring.coreos.com
spec:
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-thanosrulers.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-thanosrulers.yaml
index 976c4ef5..8337889a 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-thanosrulers.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/crds/crds/crd-thanosrulers.yaml
@@ -1,11 +1,11 @@
-# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.0/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml
+# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.73.2/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
- operator.prometheus.io/version: 0.73.0
+ operator.prometheus.io/version: 0.73.2
argocd.argoproj.io/sync-options: ServerSideApply=true
name: thanosrulers.monitoring.coreos.com
spec:
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/Chart.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/Chart.yaml
index d95d7c2a..a0272399 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/Chart.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/Chart.yaml
@@ -6,7 +6,7 @@ annotations:
- name: Upstream Project
url: https://github.com/grafana/grafana
apiVersion: v2
-appVersion: 10.4.0
+appVersion: 10.4.1
description: The leading tool for querying and visualizing time series and metrics.
home: https://grafana.com
icon: https://artifacthub.io/image/b4fed1a7-6c8f-4945-b99d-096efa3e4116
@@ -30,4 +30,4 @@ sources:
- https://github.com/grafana/grafana
- https://github.com/grafana/helm-charts
type: application
-version: 7.3.7
+version: 7.3.11
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/_helpers.tpl b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/_helpers.tpl
index 790d5a29..f3ebc37c 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/_helpers.tpl
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/_helpers.tpl
@@ -145,13 +145,11 @@ Return the appropriate apiVersion for ingress.
Return the appropriate apiVersion for Horizontal Pod Autoscaler.
*/}}
{{- define "grafana.hpa.apiVersion" -}}
-{{- if $.Capabilities.APIVersions.Has "autoscaling/v2/HorizontalPodAutoscaler" }}
-{{- print "autoscaling/v2" }}
-{{- else if $.Capabilities.APIVersions.Has "autoscaling/v2beta2/HorizontalPodAutoscaler" }}
-{{- print "autoscaling/v2beta2" }}
-{{- else }}
-{{- print "autoscaling/v2beta1" }}
-{{- end }}
+{{- if .Capabilities.APIVersions.Has "autoscaling/v2" }}
+{{- print "autoscaling/v2" }}
+{{- else }}
+{{- print "autoscaling/v2beta2" }}
+{{- end }}
{{- end }}
{{/*
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/pvc.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/pvc.yaml
index eb8f87f0..c0edad2c 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/pvc.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/pvc.yaml
@@ -25,6 +25,9 @@ spec:
resources:
requests:
storage: {{ .Values.persistence.size | quote }}
+ {{- if (lookup "v1" "PersistentVolumeClaim" (include "grafana.namespace" .) (include "grafana.fullname" .)) }}
+ volumeName: {{ (lookup "v1" "PersistentVolumeClaim" (include "grafana.namespace" .) (include "grafana.fullname" .)).spec.volumeName }}
+ {{- end }}
{{- with .Values.persistence.storageClassName }}
storageClassName: {{ . }}
{{- end }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/tests/test.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/tests/test.yaml
index 15067ae3..9e88afcf 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/tests/test.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/tests/test.yaml
@@ -41,6 +41,10 @@ spec:
- mountPath: /tests
name: tests
readOnly: true
+ {{- with .Values.testFramework.resources }}
+ resources:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
volumes:
- name: tests
configMap:
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/values.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/values.yaml
index 81fcda59..a327a7a0 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/values.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/values.yaml
@@ -121,6 +121,13 @@ testFramework:
tag: "v1.4.1"
imagePullPolicy: IfNotPresent
securityContext: {}
+ resources: {}
+ # limits:
+ # cpu: 100m
+ # memory: 128Mi
+ # requests:
+ # cpu: 100m
+ # memory: 128Mi
# dns configuration for pod
dnsPolicy: ~
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/kube-state-metrics/Chart.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/kube-state-metrics/Chart.yaml
index 1f8618d0..11a00204 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/kube-state-metrics/Chart.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/kube-state-metrics/Chart.yaml
@@ -23,4 +23,4 @@ name: kube-state-metrics
sources:
- https://github.com/kubernetes/kube-state-metrics/
type: application
-version: 5.18.1
+version: 5.19.0
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/service.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/service.yaml
index 6c486a66..90c23514 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/service.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/service.yaml
@@ -14,6 +14,10 @@ metadata:
{{- end }}
spec:
type: "{{ .Values.service.type }}"
+ {{- if .Values.service.ipDualStack.enabled }}
+ ipFamilies: {{ toYaml .Values.service.ipDualStack.ipFamilies | nindent 4 }}
+ ipFamilyPolicy: {{ .Values.service.ipDualStack.ipFamilyPolicy }}
+ {{- end }}
ports:
- name: "http"
protocol: TCP
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/kube-state-metrics/values.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/kube-state-metrics/values.yaml
index 443f309a..2e8283a8 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/kube-state-metrics/values.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/kube-state-metrics/values.yaml
@@ -56,6 +56,10 @@ service:
port: 8080
# Default to clusterIP for backward compatibility
type: ClusterIP
+ ipDualStack:
+ enabled: false
+ ipFamilies: ["IPv6", "IPv4"]
+ ipFamilyPolicy: "PreferDualStack"
nodePort: 0
loadBalancerIP: ""
# Only allow access to the loadBalancerIP from these IPs
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/prometheus-node-exporter/Chart.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/prometheus-node-exporter/Chart.yaml
index 38e456b4..3f5ca429 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/prometheus-node-exporter/Chart.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/prometheus-node-exporter/Chart.yaml
@@ -4,7 +4,7 @@ annotations:
- name: Chart Source
url: https://github.com/prometheus-community/helm-charts
apiVersion: v2
-appVersion: 1.7.0
+appVersion: 1.8.0
description: A Helm chart for prometheus node-exporter
home: https://github.com/prometheus/node_exporter/
keywords:
@@ -22,4 +22,4 @@ name: prometheus-node-exporter
sources:
- https://github.com/prometheus/node_exporter/
type: application
-version: 4.32.0
+version: 4.34.0
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/prometheus-node-exporter/templates/service.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/prometheus-node-exporter/templates/service.yaml
index a065e46e..cd3ee55a 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/prometheus-node-exporter/templates/service.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/prometheus-node-exporter/templates/service.yaml
@@ -14,6 +14,9 @@ spec:
{{- if .Values.service.ipDualStack.enabled }}
ipFamilies: {{ toYaml .Values.service.ipDualStack.ipFamilies | nindent 4 }}
ipFamilyPolicy: {{ .Values.service.ipDualStack.ipFamilyPolicy }}
+{{- end }}
+{{- if .Values.service.externalTrafficPolicy }}
+ externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }}
{{- end }}
type: {{ .Values.service.type }}
ports:
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/prometheus-node-exporter/values.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/prometheus-node-exporter/values.yaml
index 615fc6ce..88bc435e 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/prometheus-node-exporter/values.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/prometheus-node-exporter/values.yaml
@@ -98,6 +98,7 @@ service:
enabled: false
ipFamilies: ["IPv6", "IPv4"]
ipFamilyPolicy: "PreferDualStack"
+ externalTrafficPolicy: ""
# Set a NetworkPolicy with:
# ingress only on service.port
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/_helpers.tpl b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/_helpers.tpl
index aa0ed4c7..3bd3bc87 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/_helpers.tpl
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/_helpers.tpl
@@ -57,9 +57,14 @@ The longest name that gets created adds and extra 37 characters, so truncation s
{{- end }}
{{- end }}
-{{/* Fullname suffixed with thanos-ruler */}}
-{{- define "kube-prometheus-stack.thanosRuler.fullname" -}}
-{{- printf "%s-thanos-ruler" (include "kube-prometheus-stack.fullname" .) -}}
+{{/* ThanosRuler custom resource instance name */}}
+{{/* Subtracting 1 from 26 truncation of kube-prometheus-stack.fullname */}}
+{{- define "kube-prometheus-stack.thanosRuler.crname" -}}
+{{- if .Values.cleanPrometheusOperatorObjectNames }}
+{{- include "kube-prometheus-stack.fullname" . }}
+{{- else }}
+{{- print (include "kube-prometheus-stack.fullname" . | trunc 25 | trimSuffix "-") "-thanos-ruler" -}}
+{{- end }}
{{- end }}
{{/* Shortened name suffixed with thanos-ruler */}}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/alertmanager.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/alertmanager.yaml
index 7bd16476..19008893 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/alertmanager.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/alertmanager.yaml
@@ -23,7 +23,7 @@ spec:
{{- else }}
image: "{{ $registry }}/{{ .Values.alertmanager.alertmanagerSpec.image.repository }}"
{{- end }}
- version: {{ .Values.alertmanager.alertmanagerSpec.image.tag }}
+ version: {{ default .Values.alertmanager.alertmanagerSpec.image.tag .Values.alertmanager.alertmanagerSpec.version }}
{{- if .Values.alertmanager.alertmanagerSpec.image.sha }}
sha: {{ .Values.alertmanager.alertmanagerSpec.image.sha }}
{{- end }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/service.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/service.yaml
index 373de328..6446f010 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/service.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/service.yaml
@@ -65,4 +65,8 @@ spec:
timeoutSeconds: {{ .Values.alertmanager.service.sessionAffinityConfig.clientIP.timeoutSeconds }}
{{- end }}
type: "{{ .Values.alertmanager.service.type }}"
+{{- if .Values.alertmanager.service.ipDualStack.enabled }}
+ ipFamilies: {{ toYaml .Values.alertmanager.service.ipDualStack.ipFamilies | nindent 4 }}
+ ipFamilyPolicy: {{ .Values.alertmanager.service.ipDualStack.ipFamilyPolicy }}
{{- end }}
+{{- end }}
\ No newline at end of file
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/core-dns/service.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/core-dns/service.yaml
index b8618f75..5dedc369 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/core-dns/service.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/core-dns/service.yaml
@@ -10,6 +10,10 @@ metadata:
namespace: kube-system
spec:
clusterIP: None
+ {{- if .Values.coreDns.service.ipDualStack.enabled }}
+ ipFamilies: {{ toYaml .Values.coreDns.service.ipDualStack.ipFamilies | nindent 4 }}
+ ipFamilyPolicy: {{ .Values.coreDns.service.ipDualStack.ipFamilyPolicy }}
+ {{- end }}
ports:
- name: {{ .Values.coreDns.serviceMonitor.port }}
port: {{ .Values.coreDns.service.port }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-controller-manager/service.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-controller-manager/service.yaml
index 43b1a976..0a901c4a 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-controller-manager/service.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-controller-manager/service.yaml
@@ -10,6 +10,10 @@ metadata:
namespace: kube-system
spec:
clusterIP: None
+ {{- if .Values.kubeControllerManager.service.ipDualStack.enabled }}
+ ipFamilies: {{ toYaml .Values.kubeControllerManager.service.ipDualStack.ipFamilies | nindent 4 }}
+ ipFamilyPolicy: {{ .Values.kubeControllerManager.service.ipDualStack.ipFamilyPolicy }}
+ {{- end }}
ports:
- name: {{ .Values.kubeControllerManager.serviceMonitor.port }}
{{- $kubeControllerManagerDefaultInsecurePort := 10252 }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-dns/service.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-dns/service.yaml
index 81b2c993..478f4194 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-dns/service.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-dns/service.yaml
@@ -10,6 +10,10 @@ metadata:
namespace: kube-system
spec:
clusterIP: None
+ {{- if .Values.kubeDns.service.ipDualStack.enabled }}
+ ipFamilies: {{ toYaml .Values.kubeDns.service.ipDualStack.ipFamilies | nindent 4 }}
+ ipFamilyPolicy: {{ .Values.kubeDns.service.ipDualStack.ipFamilyPolicy }}
+ {{- end }}
ports:
- name: http-metrics-dnsmasq
port: {{ .Values.kubeDns.service.dnsmasq.port }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-etcd/service.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-etcd/service.yaml
index d07d4f35..a62059aa 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-etcd/service.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-etcd/service.yaml
@@ -10,6 +10,10 @@ metadata:
namespace: kube-system
spec:
clusterIP: None
+ {{- if .Values.kubeEtcd.service.ipDualStack.enabled }}
+ ipFamilies: {{ toYaml .Values.kubeEtcd.service.ipDualStack.ipFamilies | nindent 4 }}
+ ipFamilyPolicy: {{ .Values.kubeEtcd.service.ipDualStack.ipFamilyPolicy }}
+ {{- end }}
ports:
- name: {{ .Values.kubeEtcd.serviceMonitor.port }}
port: {{ .Values.kubeEtcd.service.port }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-proxy/service.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-proxy/service.yaml
index 8ccb2210..672f5492 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-proxy/service.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-proxy/service.yaml
@@ -10,6 +10,10 @@ metadata:
namespace: kube-system
spec:
clusterIP: None
+ {{- if .Values.kubeProxy.service.ipDualStack.enabled }}
+ ipFamilies: {{ toYaml .Values.kubeProxy.service.ipDualStack.ipFamilies | nindent 4 }}
+ ipFamilyPolicy: {{ .Values.kubeProxy.service.ipDualStack.ipFamilyPolicy }}
+ {{- end }}
ports:
- name: {{ .Values.kubeProxy.serviceMonitor.port }}
port: {{ .Values.kubeProxy.service.port }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-scheduler/service.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-scheduler/service.yaml
index 90b3a800..8663d79f 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-scheduler/service.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kube-scheduler/service.yaml
@@ -10,6 +10,10 @@ metadata:
namespace: kube-system
spec:
clusterIP: None
+ {{- if .Values.kubeScheduler.service.ipDualStack.enabled }}
+ ipFamilies: {{ toYaml .Values.kubeScheduler.service.ipDualStack.ipFamilies | nindent 4 }}
+ ipFamilyPolicy: {{ .Values.kubeScheduler.service.ipDualStack.ipFamilyPolicy }}
+ {{- end }}
ports:
- name: {{ .Values.kubeScheduler.serviceMonitor.port }}
{{- $kubeSchedulerDefaultInsecurePort := 10251 }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kubelet/servicemonitor.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kubelet/servicemonitor.yaml
index f27f232a..a3e28d71 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kubelet/servicemonitor.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/exporters/kubelet/servicemonitor.yaml
@@ -35,7 +35,7 @@ spec:
{{- end }}
tlsConfig:
caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
- insecureSkipVerify: true
+ insecureSkipVerify: {{ .Values.kubelet.serviceMonitor.insecureSkipVerify }}
bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
honorLabels: {{ .Values.kubelet.serviceMonitor.honorLabels }}
honorTimestamps: {{ .Values.kubelet.serviceMonitor.honorTimestamps }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/grafana/configmaps-datasources.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/grafana/configmaps-datasources.yaml
index 3d4f3b17..1fdfa5b8 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/grafana/configmaps-datasources.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/grafana/configmaps-datasources.yaml
@@ -22,7 +22,7 @@ data:
datasources:
{{- $scrapeInterval := .Values.grafana.sidecar.datasources.defaultDatasourceScrapeInterval | default .Values.prometheus.prometheusSpec.scrapeInterval | default "30s" }}
{{- if .Values.grafana.sidecar.datasources.defaultDatasourceEnabled }}
- - name: Prometheus
+ - name: {{ .Values.grafana.sidecar.datasources.name }}
type: prometheus
uid: {{ .Values.grafana.sidecar.datasources.uid }}
{{- if .Values.grafana.sidecar.datasources.url }}
@@ -45,7 +45,7 @@ data:
{{- end }}
{{- if .Values.grafana.sidecar.datasources.createPrometheusReplicasDatasources }}
{{- range until (int .Values.prometheus.prometheusSpec.replicas) }}
- - name: Prometheus-{{ . }}
+ - name: {{ .Values.grafana.sidecar.datasources.name }}-{{ . }}
type: prometheus
uid: {{ $.Values.grafana.sidecar.datasources.uid }}-replica-{{ . }}
url: http://prometheus-{{ template "kube-prometheus-stack.prometheus.crname" $ }}-{{ . }}.prometheus-operated:9090/{{ trimPrefix "/" $.Values.prometheus.prometheusSpec.routePrefix }}
@@ -61,7 +61,7 @@ data:
{{- end }}
{{- end }}
{{- if .Values.grafana.sidecar.datasources.alertmanager.enabled }}
- - name: Alertmanager
+ - name: {{ .Values.grafana.sidecar.datasources.alertmanager.name }}
type: alertmanager
uid: {{ .Values.grafana.sidecar.datasources.alertmanager.uid }}
{{- if .Values.grafana.sidecar.datasources.alertmanager.url }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/deployment/pdb.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/deployment/pdb.yaml
index 52dd78f6..04458b96 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/deployment/pdb.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/deployment/pdb.yaml
@@ -1,5 +1,5 @@
{{- if .Values.prometheusOperator.admissionWebhooks.deployment.podDisruptionBudget -}}
-apiVersion: policy/v1{{ ternary "" "beta1" ($.Capabilities.APIVersions.Has "policy/v1/PodDisruptionBudget") }}
+apiVersion: {{ include "kube-prometheus-stack.pdb.apiVersion" . }}
kind: PodDisruptionBudget
metadata:
name: {{ template "kube-prometheus-stack.operator.fullname" . }}-webhook
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/deployment/service.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/deployment/service.yaml
index b06c1291..6de9cbb7 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/deployment/service.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/deployment/service.yaml
@@ -18,6 +18,10 @@ spec:
{{- if .Values.prometheusOperator.admissionWebhooks.deployment.service.clusterIP }}
clusterIP: {{ .Values.prometheusOperator.admissionWebhooks.deployment.service.clusterIP }}
{{- end }}
+{{- if .Values.prometheusOperator.admissionWebhooks.deployment.service.ipDualStack.enabled }}
+ ipFamilies: {{ toYaml .Values.prometheusOperator.admissionWebhooks.deployment.service.ipDualStack.ipFamilies | nindent 4 }}
+ ipFamilyPolicy: {{ .Values.prometheusOperator.admissionWebhooks.deployment.service.ipDualStack.ipFamilyPolicy }}
+{{- end }}
{{- if .Values.prometheusOperator.admissionWebhooks.deployment.service.externalIPs }}
externalIPs:
{{ toYaml .Values.prometheusOperator.admissionWebhooks.deployment.service.externalIPs | indent 4 }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/job-patch/job-createSecret.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/job-patch/job-createSecret.yaml
index 96e4f928..6440d3cb 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/job-patch/job-createSecret.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/job-patch/job-createSecret.yaml
@@ -14,10 +14,7 @@ metadata:
app: {{ template "kube-prometheus-stack.name" $ }}-admission-create
{{- include "kube-prometheus-stack.prometheus-operator-webhook.labels" $ | nindent 4 }}
spec:
- {{- if .Capabilities.APIVersions.Has "batch/v1alpha1" }}
- # Alpha feature since k8s 1.12
- ttlSecondsAfterFinished: 0
- {{- end }}
+ ttlSecondsAfterFinished: {{ .Values.prometheusOperator.admissionWebhooks.patch.ttlSecondsAfterFinished }}
template:
metadata:
name: {{ template "kube-prometheus-stack.fullname" . }}-admission-create
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/job-patch/job-patchWebhook.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/job-patch/job-patchWebhook.yaml
index b53a6ded..92eeae39 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/job-patch/job-patchWebhook.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/job-patch/job-patchWebhook.yaml
@@ -14,10 +14,7 @@ metadata:
app: {{ template "kube-prometheus-stack.name" $ }}-admission-patch
{{- include "kube-prometheus-stack.prometheus-operator-webhook.labels" $ | nindent 4 }}
spec:
- {{- if .Capabilities.APIVersions.Has "batch/v1alpha1" }}
- # Alpha feature since k8s 1.12
- ttlSecondsAfterFinished: 0
- {{- end }}
+ ttlSecondsAfterFinished: {{ .Values.prometheusOperator.admissionWebhooks.patch.ttlSecondsAfterFinished }}
template:
metadata:
name: {{ template "kube-prometheus-stack.fullname" . }}-admission-patch
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/job-patch/serviceaccount.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/job-patch/serviceaccount.yaml
index 02594547..8dab40c6 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/job-patch/serviceaccount.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/job-patch/serviceaccount.yaml
@@ -1,4 +1,4 @@
-{{- if and .Values.prometheusOperator.enabled .Values.prometheusOperator.admissionWebhooks.enabled .Values.prometheusOperator.admissionWebhooks.patch.enabled .Values.global.rbac.create (not .Values.prometheusOperator.admissionWebhooks.certManager.enabled) }}
+{{- if and .Values.prometheusOperator.enabled .Values.prometheusOperator.admissionWebhooks.enabled .Values.prometheusOperator.admissionWebhooks.patch.enabled .Values.prometheusOperator.admissionWebhooks.patch.serviceAccount.create (not .Values.prometheusOperator.admissionWebhooks.certManager.enabled) }}
apiVersion: v1
kind: ServiceAccount
metadata:
@@ -10,6 +10,7 @@ metadata:
labels:
app: {{ template "kube-prometheus-stack.name" $ }}-admission
{{- include "kube-prometheus-stack.prometheus-operator-webhook.labels" $ | nindent 4 }}
+automountServiceAccountToken: {{ .Values.prometheusOperator.admissionWebhooks.patch.serviceAccount.automountServiceAccountToken }}
{{- if .Values.global.imagePullSecrets }}
imagePullSecrets:
{{ include "kube-prometheus-stack.imagePullSecrets" . | trim | indent 2 }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/mutatingWebhookConfiguration.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/mutatingWebhookConfiguration.yaml
index da01f3b5..91d96b38 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/mutatingWebhookConfiguration.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/mutatingWebhookConfiguration.yaml
@@ -74,4 +74,8 @@ webhooks:
{{- end }}
{{- end }}
{{- end }}
+ {{- with .Values.prometheusOperator.admissionWebhooks.objectSelector }}
+ objectSelector:
+ {{- toYaml . | nindent 6 }}
+ {{- end }}
{{- end }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/validatingWebhookConfiguration.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/validatingWebhookConfiguration.yaml
index 4827871c..f21a9a72 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/validatingWebhookConfiguration.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/admission-webhooks/validatingWebhookConfiguration.yaml
@@ -74,4 +74,8 @@ webhooks:
{{- end }}
{{- end }}
{{- end }}
+ {{- with .Values.prometheusOperator.admissionWebhooks.objectSelector }}
+ objectSelector:
+ {{- toYaml . | nindent 6 }}
+ {{- end }}
{{- end }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/deployment.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/deployment.yaml
index e2b1ba92..342f3882 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/deployment.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/deployment.yaml
@@ -59,6 +59,9 @@ spec:
args:
{{- if .Values.prometheusOperator.kubeletService.enabled }}
- --kubelet-service={{ .Values.prometheusOperator.kubeletService.namespace }}/{{ default $defaultKubeletSvcName .Values.prometheusOperator.kubeletService.name }}
+ {{- if .Values.prometheusOperator.kubeletService.selector }}
+ - --kubelet-selector={{ .Values.prometheusOperator.kubeletService.selector }}
+ {{- end }}
{{- end }}
{{- if .Values.prometheusOperator.logFormat }}
- --log-format={{ .Values.prometheusOperator.logFormat }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/service.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/service.yaml
index d45ab22d..72e0788a 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/service.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/service.yaml
@@ -17,6 +17,10 @@ spec:
{{- if .Values.prometheusOperator.service.clusterIP }}
clusterIP: {{ .Values.prometheusOperator.service.clusterIP }}
{{- end }}
+{{- if .Values.prometheusOperator.service.ipDualStack.enabled }}
+ ipFamilies: {{ toYaml .Values.prometheusOperator.service.ipDualStack.ipFamilies | nindent 4 }}
+ ipFamilyPolicy: {{ .Values.prometheusOperator.service.ipDualStack.ipFamilyPolicy }}
+{{- end }}
{{- if .Values.prometheusOperator.service.externalIPs }}
externalIPs:
{{ toYaml .Values.prometheusOperator.service.externalIPs | indent 4 }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/prometheus.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/prometheus.yaml
index 93cbd026..39b9a327 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/prometheus.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/prometheus.yaml
@@ -103,7 +103,7 @@ spec:
{{- end }}
{{- if and (not .Values.prometheus.agentMode) .Values.prometheus.prometheusSpec.exemplars }}
exemplars:
- {{ toYaml .Values.prometheus.prometheusSpec.exemplars | indent 4 }}
+ {{- toYaml .Values.prometheus.prometheusSpec.exemplars | nindent 4 }}
{{- end }}
{{- if .Values.prometheus.prometheusSpec.enableFeatures }}
enableFeatures:
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/service.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/service.yaml
index d61b9d6e..bfabebe7 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/service.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/service.yaml
@@ -20,6 +20,10 @@ spec:
{{- if .Values.prometheus.service.clusterIP }}
clusterIP: {{ .Values.prometheus.service.clusterIP }}
{{- end }}
+{{- if .Values.prometheus.service.ipDualStack.enabled }}
+ ipFamilies: {{ toYaml .Values.prometheus.service.ipDualStack.ipFamilies | nindent 4 }}
+ ipFamilyPolicy: {{ .Values.prometheus.service.ipDualStack.ipFamilyPolicy }}
+{{- end }}
{{- if .Values.prometheus.service.externalIPs }}
externalIPs:
{{ toYaml .Values.prometheus.service.externalIPs | indent 4 }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/serviceThanosSidecar.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/serviceThanosSidecar.yaml
index 15b89c8c..87fae7b4 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/serviceThanosSidecar.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/serviceThanosSidecar.yaml
@@ -17,6 +17,10 @@ metadata:
spec:
type: {{ .Values.prometheus.thanosService.type }}
clusterIP: {{ .Values.prometheus.thanosService.clusterIP }}
+{{- if .Values.prometheus.thanosService.ipDualStack.enabled }}
+ ipFamilies: {{ toYaml .Values.prometheus.thanosService.ipDualStack.ipFamilies | nindent 4 }}
+ ipFamilyPolicy: {{ .Values.prometheus.thanosService.ipDualStack.ipFamilyPolicy }}
+{{- end }}
{{- if ne .Values.prometheus.thanosService.type "ClusterIP" }}
externalTrafficPolicy: {{ .Values.prometheus.thanosService.externalTrafficPolicy }}
{{- end }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/serviceperreplica.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/serviceperreplica.yaml
index 4bc7f7b8..3a88b2df 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/serviceperreplica.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/serviceperreplica.yaml
@@ -24,6 +24,10 @@ items:
{{- if $serviceValues.clusterIP }}
clusterIP: {{ $serviceValues.clusterIP }}
{{- end }}
+ {{- if $serviceValues.ipDualStack.enabled }}
+ ipFamilies: {{ toYaml $serviceValues.ipDualStack.ipFamilies | nindent 4 }}
+ ipFamilyPolicy: {{ $serviceValues.ipDualStack.ipFamilyPolicy }}
+ {{- end }}
{{- if $serviceValues.loadBalancerSourceRanges }}
loadBalancerSourceRanges:
{{- range $cidr := $serviceValues.loadBalancerSourceRanges }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/thanos-ruler/podDisruptionBudget.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/thanos-ruler/podDisruptionBudget.yaml
index 83e54edf..c28f9146 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/thanos-ruler/podDisruptionBudget.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/thanos-ruler/podDisruptionBudget.yaml
@@ -17,5 +17,5 @@ spec:
selector:
matchLabels:
app.kubernetes.io/name: thanos-ruler
- thanos-ruler: {{ template "kube-prometheus-stack.thanosRuler.name" . }}
+ thanos-ruler: {{ template "kube-prometheus-stack.thanosRuler.crname" . }}
{{- end }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/thanos-ruler/ruler.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/thanos-ruler/ruler.yaml
index b365262e..123dc245 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/thanos-ruler/ruler.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/thanos-ruler/ruler.yaml
@@ -2,7 +2,7 @@
apiVersion: monitoring.coreos.com/v1
kind: ThanosRuler
metadata:
- name: {{ template "kube-prometheus-stack.thanosRuler.name" . }}
+ name: {{ template "kube-prometheus-stack.thanosRuler.crname" . }}
namespace: {{ template "kube-prometheus-stack.namespace" . }}
labels:
app: {{ include "kube-prometheus-stack.thanosRuler.name" . }}
@@ -34,12 +34,12 @@ spec:
externalPrefix: "{{ tpl .Values.thanosRuler.thanosRulerSpec.externalPrefix . }}"
{{- else if and .Values.thanosRuler.ingress.enabled .Values.thanosRuler.ingress.hosts }}
externalPrefix: "http://{{ tpl (index .Values.thanosRuler.ingress.hosts 0) . }}{{ .Values.thanosRuler.thanosRulerSpec.routePrefix }}"
-{{- else }}
- externalPrefix: http://{{ template "kube-prometheus-stack.thanosRuler.name" . }}.{{ template "kube-prometheus-stack.namespace" . }}:{{ .Values.thanosRuler.service.port }}
+{{- else if .Values.thanosRuler.thanosRulerSpec.externalPrefixNilUsesHelmValues }}
+ externalPrefix: "http://{{ template "kube-prometheus-stack.thanosRuler.name" . }}.{{ template "kube-prometheus-stack.namespace" . }}:{{ .Values.thanosRuler.service.port }}"
{{- end }}
{{- if .Values.thanosRuler.thanosRulerSpec.additionalArgs }}
additionalArgs:
-{{ toYaml .Values.thanosRuler.thanosRulerSpec.additionalArgs | indent 4 }}
+{{ tpl (toYaml .Values.thanosRuler.thanosRulerSpec.additionalArgs) $ | indent 4 }}
{{- end }}
{{- if .Values.thanosRuler.thanosRulerSpec.nodeSelector }}
nodeSelector:
@@ -123,7 +123,7 @@ spec:
{{- end }}
{{- if .Values.thanosRuler.thanosRulerSpec.labels }}
labels:
-{{ toYaml .Values.thanosRuler.thanosRulerSpec.labels | indent 4 }}
+{{ tpl (toYaml .Values.thanosRuler.thanosRulerSpec.labels) $ | indent 4 }}
{{- end }}
{{- if .Values.thanosRuler.thanosRulerSpec.podMetadata }}
podMetadata:
@@ -142,7 +142,7 @@ spec:
labelSelector:
matchExpressions:
- {key: app.kubernetes.io/name, operator: In, values: [thanos-ruler]}
- - {key: thanos-ruler, operator: In, values: [{{ template "kube-prometheus-stack.thanosRuler.name" . }}]}
+ - {key: thanos-ruler, operator: In, values: [{{ template "kube-prometheus-stack.thanosRuler.crname" . }}]}
{{- else if eq .Values.thanosRuler.thanosRulerSpec.podAntiAffinity "soft" }}
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
@@ -152,7 +152,7 @@ spec:
labelSelector:
matchExpressions:
- {key: app.kubernetes.io/name, operator: In, values: [thanos-ruler]}
- - {key: thanos-ruler, operator: In, values: [{{ template "kube-prometheus-stack.thanosRuler.name" . }}]}
+ - {key: thanos-ruler, operator: In, values: [{{ template "kube-prometheus-stack.thanosRuler.crname" . }}]}
{{- end }}
{{- if .Values.thanosRuler.thanosRulerSpec.tolerations }}
tolerations:
@@ -185,5 +185,15 @@ spec:
volumeMounts:
{{ toYaml .Values.thanosRuler.thanosRulerSpec.volumeMounts | indent 4 }}
{{- end }}
- portName: {{ .Values.thanosRuler.thanosRulerSpec.portName }}
+{{- if .Values.thanosRuler.thanosRulerSpec.alertDropLabels }}
+ alertDropLabels:
+{{ toYaml .Values.thanosRuler.thanosRulerSpec.alertDropLabels | indent 4 }}
+{{- end }}
+ portName: {{ .Values.thanosRuler.thanosRulerSpec.portName }}
+{{- with .Values.thanosRuler.thanosRulerSpec.additionalConfig }}
+ {{- tpl (toYaml .) $ | nindent 2 }}
+{{- end }}
+{{- with .Values.thanosRuler.thanosRulerSpec.additionalConfigString }}
+ {{- tpl . $ | nindent 2 }}
+{{- end }}
{{- end }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/thanos-ruler/service.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/thanos-ruler/service.yaml
index be0c8445..e2cca291 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/thanos-ruler/service.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/thanos-ruler/service.yaml
@@ -19,6 +19,10 @@ spec:
{{- if .Values.thanosRuler.service.clusterIP }}
clusterIP: {{ .Values.thanosRuler.service.clusterIP }}
{{- end }}
+{{- if .Values.thanosRuler.service.ipDualStack.enabled }}
+ ipFamilies: {{ toYaml .Values.thanosRuler.service.ipDualStack.ipFamilies | nindent 4 }}
+ ipFamilyPolicy: {{ .Values.thanosRuler.service.ipDualStack.ipFamilyPolicy }}
+{{- end }}
{{- if .Values.thanosRuler.service.externalIPs }}
externalIPs:
{{ toYaml .Values.thanosRuler.service.externalIPs | indent 4 }}
@@ -48,6 +52,6 @@ spec:
{{- end }}
selector:
app.kubernetes.io/name: thanos-ruler
- thanos-ruler: {{ template "kube-prometheus-stack.thanosRuler.name" . }}
+ thanos-ruler: {{ template "kube-prometheus-stack.thanosRuler.crname" . }}
type: "{{ .Values.thanosRuler.service.type }}"
{{- end }}
diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/values.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/values.yaml
index 754377df..fa00232a 100644
--- a/charts/kubezero-metrics/charts/kube-prometheus-stack/values.yaml
+++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/values.yaml
@@ -476,6 +476,10 @@ alertmanager:
annotations: {}
labels: {}
clusterIP: ""
+ ipDualStack:
+ enabled: false
+ ipFamilies: ["IPv6", "IPv4"]
+ ipFamilyPolicy: "PreferDualStack"
## Port for Alertmanager Service to listen on
##
@@ -1052,6 +1056,7 @@ grafana:
defaultDatasourceEnabled: true
isDefaultDatasource: true
+ name: Prometheus
uid: prometheus
## URL of prometheus datasource
@@ -1086,6 +1091,7 @@ grafana:
# traceIdLabelName: trace_id
alertmanager:
enabled: true
+ name: Alertmanager
uid: alertmanager
handleGrafanaManagedAlerts: false
implementation: prometheus
@@ -1286,6 +1292,12 @@ kubelet:
##
https: true
+ ## Skip TLS certificate validation when scraping.
+ ## This is enabled by default because kubelet serving certificate deployed by kubeadm is by default self-signed
+ ## ref: https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#kubelet-serving-certs
+ ##
+ insecureSkipVerify: true
+
## Enable scraping /metrics/cadvisor from kubelet's service
##
cAdvisor: true
@@ -1454,6 +1466,10 @@ kubeControllerManager:
##
port: null
targetPort: null
+ ipDualStack:
+ enabled: false
+ ipFamilies: ["IPv6", "IPv4"]
+ ipFamilyPolicy: "PreferDualStack"
# selector:
# component: kube-controller-manager
@@ -1540,6 +1556,11 @@ coreDns:
enabled: true
port: 9153
targetPort: 9153
+
+ ipDualStack:
+ enabled: false
+ ipFamilies: ["IPv6", "IPv4"]
+ ipFamilyPolicy: "PreferDualStack"
# selector:
# k8s-app: kube-dns
serviceMonitor:
@@ -1616,6 +1637,10 @@ kubeDns:
skydns:
port: 10055
targetPort: 10055
+ ipDualStack:
+ enabled: false
+ ipFamilies: ["IPv6", "IPv4"]
+ ipFamilyPolicy: "PreferDualStack"
# selector:
# k8s-app: kube-dns
serviceMonitor:
@@ -1713,6 +1738,10 @@ kubeEtcd:
enabled: true
port: 2381
targetPort: 2381
+ ipDualStack:
+ enabled: false
+ ipFamilies: ["IPv6", "IPv4"]
+ ipFamilyPolicy: "PreferDualStack"
# selector:
# component: etcd
@@ -1817,6 +1846,10 @@ kubeScheduler:
##
port: null
targetPort: null
+ ipDualStack:
+ enabled: false
+ ipFamilies: ["IPv6", "IPv4"]
+ ipFamilyPolicy: "PreferDualStack"
# selector:
# component: kube-scheduler
@@ -1910,6 +1943,10 @@ kubeProxy:
enabled: true
port: 10249
targetPort: 10249
+ ipDualStack:
+ enabled: false
+ ipFamilies: ["IPv6", "IPv4"]
+ ipFamilyPolicy: "PreferDualStack"
# selector:
# k8s-app: kube-proxy
@@ -2080,6 +2117,10 @@ prometheus-node-exporter:
- --collector.filesystem.fs-types-exclude=^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$
service:
portName: http-metrics
+ ipDualStack:
+ enabled: false
+ ipFamilies: ["IPv6", "IPv4"]
+ ipFamilyPolicy: "PreferDualStack"
prometheus:
monitor:
enabled: true
@@ -2189,6 +2230,8 @@ prometheusOperator:
# argocd.argoproj.io/hook-delete-policy: HookSucceeded
namespaceSelector: {}
+ objectSelector: {}
+
deployment:
enabled: false
@@ -2233,6 +2276,10 @@ prometheusOperator:
annotations: {}
labels: {}
clusterIP: ""
+ ipDualStack:
+ enabled: false
+ ipFamilies: ["IPv6", "IPv4"]
+ ipFamilyPolicy: "PreferDualStack"
## Port to expose on each node
## Only used if service.type is 'NodePort'
@@ -2416,6 +2463,7 @@ prometheusOperator:
## Provide a priority class name to the webhook patching job
##
priorityClassName: ""
+ ttlSecondsAfterFinished: 60
annotations: {}
# argocd.argoproj.io/hook: PreSync
# argocd.argoproj.io/hook-delete-policy: HookSucceeded
@@ -2434,6 +2482,12 @@ prometheusOperator:
runAsUser: 2000
seccompProfile:
type: RuntimeDefault
+ ## Service account for Prometheus Operator Webhook Job Patch to use.
+ ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
+ ##
+ serviceAccount:
+ create: true
+ automountServiceAccountToken: true
# Security context for create job container
createSecretJob:
@@ -2521,6 +2575,10 @@ prometheusOperator:
annotations: {}
labels: {}
clusterIP: ""
+ ipDualStack:
+ enabled: false
+ ipFamilies: ["IPv6", "IPv4"]
+ ipFamilyPolicy: "PreferDualStack"
## Port to expose on each node
## Only used if service.type is 'NodePort'
@@ -2586,6 +2644,7 @@ prometheusOperator:
##
enabled: true
namespace: kube-system
+ selector: ""
## Use '{{ template "kube-prometheus-stack.fullname" . }}-kubelet' by default
name: ""
@@ -2803,7 +2862,7 @@ prometheusOperator:
thanosImage:
registry: quay.io
repository: thanos/thanos
- tag: v0.34.1
+ tag: v0.35.0
sha: ""
## Set a Label Selector to filter watched prometheus and prometheusAgent
@@ -2898,6 +2957,13 @@ prometheus:
##
type: ClusterIP
+ ## Service dual stack
+ ##
+ ipDualStack:
+ enabled: false
+ ipFamilies: ["IPv6", "IPv4"]
+ ipFamilyPolicy: "PreferDualStack"
+
## gRPC port config
portName: grpc
port: 10901
@@ -2980,6 +3046,10 @@ prometheus:
annotations: {}
labels: {}
clusterIP: ""
+ ipDualStack:
+ enabled: false
+ ipFamilies: ["IPv6", "IPv4"]
+ ipFamilyPolicy: "PreferDualStack"
## Port for Prometheus Service to listen on
##
@@ -3072,6 +3142,13 @@ prometheus:
##
type: ClusterIP
+ ## Service dual stack
+ ##
+ ipDualStack:
+ enabled: false
+ ipFamilies: ["IPv6", "IPv4"]
+ ipFamilyPolicy: "PreferDualStack"
+
## Configure pod disruption budgets for Prometheus
## ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget
##
@@ -3350,7 +3427,7 @@ prometheus:
image:
registry: quay.io
repository: prometheus/prometheus
- tag: v2.51.1
+ tag: v2.52.0
sha: ""
## Tolerations for use with node taints
@@ -4217,6 +4294,10 @@ thanosRuler:
annotations: {}
labels: {}
clusterIP: ""
+ ipDualStack:
+ enabled: false
+ ipFamilies: ["IPv6", "IPv4"]
+ ipFamilyPolicy: "PreferDualStack"
## Port for ThanosRuler Service to listen on
##
@@ -4334,7 +4415,7 @@ thanosRuler:
image:
registry: quay.io
repository: thanos/thanos
- tag: v0.34.1
+ tag: v0.35.0
sha: ""
## Namespaces to be selected for PrometheusRules discovery.
@@ -4431,6 +4512,10 @@ thanosRuler:
##
externalPrefix:
+ ## If true, http://{{ template "kube-prometheus-stack.thanosRuler.name" . }}.{{ template "kube-prometheus-stack.namespace" . }}:{{ .Values.thanosRuler.service.port }}
+ ## will be used as value for externalPrefix
+ externalPrefixNilUsesHelmValues: true
+
## The route prefix ThanosRuler registers HTTP handlers for. This is useful, if using ExternalURL and a proxy is rewriting HTTP routes of a request, and the actual ExternalURL is still true,
## but the server serves requests under a different route prefix. For example for use with kubectl proxy.
##
@@ -4453,6 +4538,10 @@ thanosRuler:
# access_key: ""
# secret_key: ""
+ ## Labels by name to drop before sending to alertmanager
+ ## Maps to the --alert.label-drop flag of thanos ruler.
+ alertDropLabels: []
+
## QueryEndpoints defines Thanos querier endpoints from which to query metrics.
## Maps to the --query flag of thanos ruler.
queryEndpoints: []
@@ -4593,6 +4682,13 @@ thanosRuler:
##
portName: "web"
+ ## Additional configuration which is not covered by the properties above. (passed through tpl)
+ additionalConfig: {}
+
+ ## Additional configuration which is not covered by the properties above.
+ ## Useful, if you need advanced templating
+ additionalConfigString: ""
+
## ExtraSecret can be used to store various data in an extra secret
## (use it for example to store hashed basic auth credentials)
extraSecret:
diff --git a/charts/kubezero-metrics/jsonnet/dashboards/apiserver.json b/charts/kubezero-metrics/jsonnet/dashboards/apiserver.json
index b483c29a..375320c3 100644
--- a/charts/kubezero-metrics/jsonnet/dashboards/apiserver.json
+++ b/charts/kubezero-metrics/jsonnet/dashboards/apiserver.json
@@ -17,7 +17,7 @@
"options": {
"content": "The SLO (service level objective) and other metrics displayed on this dashboard are for informational purposes only."
},
- "pluginVersion": "v10.4.0",
+ "pluginVersion": "v11.0.0",
"title": "Notice",
"type": "text"
},
@@ -41,7 +41,7 @@
},
"id": 2,
"interval": "1m",
- "pluginVersion": "v10.4.0",
+ "pluginVersion": "v11.0.0",
"targets": [
{
"datasource": {
@@ -87,7 +87,7 @@
"mode": "single"
}
},
- "pluginVersion": "v10.4.0",
+ "pluginVersion": "v11.0.0",
"targets": [
{
"datasource": {
@@ -121,7 +121,7 @@
},
"id": 4,
"interval": "1m",
- "pluginVersion": "v10.4.0",
+ "pluginVersion": "v11.0.0",
"targets": [
{
"datasource": {
@@ -219,7 +219,7 @@
"mode": "single"
}
},
- "pluginVersion": "v10.4.0",
+ "pluginVersion": "v11.0.0",
"targets": [
{
"datasource": {
@@ -263,7 +263,7 @@
"mode": "single"
}
},
- "pluginVersion": "v10.4.0",
+ "pluginVersion": "v11.0.0",
"targets": [
{
"datasource": {
@@ -306,7 +306,7 @@
"mode": "single"
}
},
- "pluginVersion": "v10.4.0",
+ "pluginVersion": "v11.0.0",
"targets": [
{
"datasource": {
@@ -340,7 +340,7 @@
},
"id": 8,
"interval": "1m",
- "pluginVersion": "v10.4.0",
+ "pluginVersion": "v11.0.0",
"targets": [
{
"datasource": {
@@ -438,7 +438,7 @@
"mode": "single"
}
},
- "pluginVersion": "v10.4.0",
+ "pluginVersion": "v11.0.0",
"targets": [
{
"datasource": {
@@ -482,7 +482,7 @@
"mode": "single"
}
},
- "pluginVersion": "v10.4.0",
+ "pluginVersion": "v11.0.0",
"targets": [
{
"datasource": {
@@ -525,7 +525,7 @@
"mode": "single"
}
},
- "pluginVersion": "v10.4.0",
+ "pluginVersion": "v11.0.0",
"targets": [
{
"datasource": {
@@ -568,7 +568,7 @@
"mode": "single"
}
},
- "pluginVersion": "v10.4.0",
+ "pluginVersion": "v11.0.0",
"targets": [
{
"datasource": {
@@ -611,7 +611,7 @@
"mode": "single"
}
},
- "pluginVersion": "v10.4.0",
+ "pluginVersion": "v11.0.0",
"targets": [
{
"datasource": {
@@ -657,7 +657,7 @@
"mode": "single"
}
},
- "pluginVersion": "v10.4.0",
+ "pluginVersion": "v11.0.0",
"targets": [
{
"datasource": {
@@ -699,7 +699,7 @@
"mode": "single"
}
},
- "pluginVersion": "v10.4.0",
+ "pluginVersion": "v11.0.0",
"targets": [
{
"datasource": {
@@ -742,7 +742,7 @@
"mode": "single"
}
},
- "pluginVersion": "v10.4.0",
+ "pluginVersion": "v11.0.0",
"targets": [
{
"datasource": {
@@ -784,7 +784,7 @@
"mode": "single"
}
},
- "pluginVersion": "v10.4.0",
+ "pluginVersion": "v11.0.0",
"targets": [
{
"datasource": {
@@ -800,7 +800,7 @@
}
],
"refresh": "10s",
- "schemaVersion": 36,
+ "schemaVersion": 39,
"tags": [
"kubernetes"
],
diff --git a/charts/kubezero-metrics/jsonnet/dashboards/cluster-total.json b/charts/kubezero-metrics/jsonnet/dashboards/cluster-total.json
index af736bf2..6a63c937 100644
--- a/charts/kubezero-metrics/jsonnet/dashboards/cluster-total.json
+++ b/charts/kubezero-metrics/jsonnet/dashboards/cluster-total.json
@@ -1,1618 +1,756 @@
{
- "__inputs": [ ],
- "__requires": [ ],
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": "-- Grafana --",
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "editable": true,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "id": null,
- "links": [ ],
+ "editable": false,
"panels": [
{
- "collapse": false,
- "collapsed": false,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 0
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "binBps"
+ }
},
- "id": 2,
- "panels": [ ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Current Bandwidth",
- "titleSize": "h6",
- "type": "row"
- },
- {
- "aliasColors": { },
- "bars": true,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
"gridPos": {
"h": 9,
"w": 12,
"x": 0,
- "y": 1
+ "y": 0
},
- "id": 3,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "sort": "current",
- "sortDesc": true,
- "total": false,
- "values": true
+ "id": 1,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": false,
- "linewidth": 1,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "null",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sort_desc(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{namespace}}",
- "refId": "A",
- "step": 10
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by (namespace) (rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
+ "legendFormat": "__auto"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Current Rate of Bytes Received",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "series",
- "name": null,
- "show": false,
- "values": [
- "current"
- ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": true,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "binBps"
+ }
+ },
"gridPos": {
"h": 9,
"w": 12,
"x": 12,
- "y": 1
+ "y": 0
},
- "id": 4,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "sort": "current",
- "sortDesc": true,
- "total": false,
- "values": true
+ "id": 2,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": false,
- "linewidth": 1,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "null",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sort_desc(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{namespace}}",
- "refId": "A",
- "step": 10
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by (namespace) (rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
+ "legendFormat": "__auto"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Current Rate of Bytes Transmitted",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "series",
- "name": null,
- "show": false,
- "values": [
- "current"
- ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "columns": [
- {
- "text": "Time",
- "value": "Time"
- },
- {
- "text": "Value #A",
- "value": "Value #A"
- },
- {
- "text": "Value #B",
- "value": "Value #B"
- },
- {
- "text": "Value #C",
- "value": "Value #C"
- },
- {
- "text": "Value #D",
- "value": "Value #D"
- },
- {
- "text": "Value #E",
- "value": "Value #E"
- },
- {
- "text": "Value #F",
- "value": "Value #F"
- },
- {
- "text": "Value #G",
- "value": "Value #G"
- },
- {
- "text": "Value #H",
- "value": "Value #H"
- },
- {
- "text": "namespace",
- "value": "namespace"
- }
- ],
- "datasource": "$datasource",
- "fill": 1,
- "fontSize": "90%",
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Bytes/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "binBps"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Packets/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "pps"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Namespace"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down",
+ "url": "/d/8b7a8b326d7a6f1f04244066368c67af/kubernetes-networking-namespace-pods?${datasource:queryparam}&var-cluster=${cluster}&var-namespace=${__data.fields.Namespace}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
"gridPos": {
"h": 9,
"w": 24,
"x": 0,
- "y": 10
+ "y": 9
},
- "id": 5,
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "null as zero",
- "renderer": "flot",
- "scroll": true,
- "showHeader": true,
- "sort": {
- "col": 0,
- "desc": false
- },
- "spaceLength": 10,
- "span": 24,
- "styles": [
- {
- "alias": "Time",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Time",
- "thresholds": [ ],
- "type": "hidden",
- "unit": "short"
- },
- {
- "alias": "Current Bandwidth Received",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Current Bandwidth Transmitted",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Average Bandwidth Received",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Average Bandwidth Transmitted",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Rate of Received Packets",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Transmitted Packets",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #F",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Received Packets Dropped",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #G",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Transmitted Packets Dropped",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #H",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Namespace",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": true,
- "linkTooltip": "Drill down",
- "linkUrl": "d/8b7a8b326d7a6f1f04244066368c67af/kubernetes-networking-namespace-pods?orgId=1&refresh=30s&var-namespace=$__cell",
- "pattern": "namespace",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- }
- ],
+ "id": 3,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sort_desc(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by (namespace) (rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "A",
- "step": 10
+ "instant": true
},
{
- "expr": "sort_desc(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by (namespace) (rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "B",
- "step": 10
+ "instant": true
},
{
- "expr": "sort_desc(avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "avg by (namespace) (rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "C",
- "step": 10
+ "instant": true
},
{
- "expr": "sort_desc(avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "avg by (namespace) (rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "D",
- "step": 10
+ "instant": true
},
{
- "expr": "sort_desc(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by (namespace) (rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "E",
- "step": 10
+ "instant": true
},
{
- "expr": "sort_desc(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by (namespace) (rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "F",
- "step": 10
+ "instant": true
},
{
- "expr": "sort_desc(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by (namespace) (rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "G",
- "step": 10
+ "instant": true
},
{
- "expr": "sort_desc(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by (namespace) (rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "H",
- "step": 10
+ "instant": true
}
],
- "timeFrom": null,
- "timeShift": null,
"title": "Current Status",
+ "transformations": [
+ {
+ "id": "joinByField",
+ "options": {
+ "byField": "namespace",
+ "mode": "outer"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "Time 6": true,
+ "Time 7": true,
+ "Time 8": true
+ },
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Time 6": 5,
+ "Time 7": 6,
+ "Time 8": 7,
+ "Value #A": 9,
+ "Value #B": 10,
+ "Value #C": 11,
+ "Value #D": 12,
+ "Value #E": 13,
+ "Value #F": 14,
+ "Value #G": 15,
+ "Value #H": 16,
+ "namespace": 8
+ },
+ "renameByName": {
+ "Value #A": "Rx Bytes",
+ "Value #B": "Tx Bytes",
+ "Value #C": "Rx Bytes (Avg)",
+ "Value #D": "Tx Bytes (Avg)",
+ "Value #E": "Rx Packets",
+ "Value #F": "Tx Packets",
+ "Value #G": "Rx Packets Dropped",
+ "Value #H": "Tx Packets Dropped",
+ "namespace": "Namespace"
+ }
+ }
+ }
+ ],
"type": "table"
},
{
- "collapse": true,
- "collapsed": true,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "binBps"
+ }
+ },
"gridPos": {
- "h": 1,
- "w": 24,
+ "h": 9,
+ "w": 12,
"x": 0,
- "y": 10
+ "y": 18
+ },
+ "id": 4,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "avg by (namespace) (rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Average Rate of Bytes Received",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "binBps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 18
+ },
+ "id": 5,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "avg by (namespace) (rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Average Rate of Bytes Transmitted",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "binBps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 0,
+ "y": 27
},
"id": 6,
- "panels": [
- {
- "aliasColors": { },
- "bars": true,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 11
- },
- "id": 7,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "sort": "current",
- "sortDesc": true,
- "total": false,
- "values": true
- },
- "lines": false,
- "linewidth": 1,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "null",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{namespace}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Average Rate of Bytes Received",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "series",
- "name": null,
- "show": false,
- "values": [
- "current"
- ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": true,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 12,
- "y": 11
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "id": 8,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "sort": "current",
- "sortDesc": true,
- "total": false,
- "values": true
- },
- "lines": false,
- "linewidth": 1,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "null",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{namespace}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Average Rate of Bytes Transmitted",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "series",
- "name": null,
- "show": false,
- "values": [
- "current"
- ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "sum by (namespace) (rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Average Bandwidth",
- "titleSize": "h6",
- "type": "row"
+ "title": "Receive Bandwidth",
+ "type": "timeseries"
},
{
- "collapse": false,
- "collapsed": false,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "binBps"
+ }
+ },
"gridPos": {
- "h": 1,
- "w": 24,
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 27
+ },
+ "id": 7,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by (namespace) (rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Transmit Bandwidth",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
"x": 0,
- "y": 11
+ "y": 36
+ },
+ "id": 8,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by (namespace) (rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Received Packets",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 36
},
"id": 9,
- "panels": [ ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Bandwidth History",
- "titleSize": "h6",
- "type": "row"
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by (namespace) (rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Transmitted Packets",
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "pps"
+ }
+ },
"gridPos": {
"h": 9,
- "w": 24,
+ "w": 12,
"x": 0,
- "y": 12
+ "y": 45
},
"id": 10,
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": true,
- "min": true,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": true,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sort_desc(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{namespace}}",
- "refId": "A",
- "step": 10
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by (namespace) (rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
+ "legendFormat": "__auto"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Receive Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "title": "Rate of Received Packets Dropped",
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "pps"
+ }
+ },
"gridPos": {
"h": 9,
- "w": 24,
- "x": 0,
- "y": 21
+ "w": 12,
+ "x": 12,
+ "y": 45
},
"id": 11,
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": true,
- "min": true,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": true,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sort_desc(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{namespace}}",
- "refId": "A",
- "step": 10
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by (namespace) (rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
+ "legendFormat": "__auto"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Transmit Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "title": "Rate of Transmitted Packets Dropped",
+ "type": "timeseries"
},
{
- "collapse": true,
- "collapsed": true,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "percentunit"
+ }
+ },
"gridPos": {
- "h": 1,
- "w": 24,
+ "h": 9,
+ "w": 12,
"x": 0,
- "y": 30
+ "y": 54
},
"id": 12,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 24,
- "x": 0,
- "y": 31
- },
- "id": 13,
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": true,
- "min": true,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{namespace}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 24,
- "x": 0,
- "y": 40
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "id": 14,
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": true,
- "min": true,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{namespace}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "sum by (instance) (rate(node_netstat_Tcp_RetransSegs{cluster=\"$cluster\"}[$__rate_interval]) / rate(node_netstat_Tcp_OutSegs{cluster=\"$cluster\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Packets",
- "titleSize": "h6",
- "type": "row"
+ "title": "Rate of TCP Retransmits out of all sent segments",
+ "type": "timeseries"
},
{
- "collapse": true,
- "collapsed": true,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 31
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
},
- "id": 15,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 24,
- "x": 0,
- "y": 50
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
},
- "id": 16,
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": true,
- "min": true,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{namespace}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "unit": "percentunit"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 54
+ },
+ "id": 13,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 24,
- "x": 0,
- "y": 59
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "id": 17,
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": true,
- "min": true,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{namespace}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 24,
- "x": 0,
- "y": 59
- },
- "id": 18,
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": true,
- "min": true,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 2,
- "links": [
- {
- "targetBlank": true,
- "title": "What is TCP Retransmit?",
- "url": "https://accedian.com/enterprises/blog/network-packet-loss-retransmissions-and-duplicate-acknowledgements/"
- }
- ],
- "minSpan": 24,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(sum(rate(node_netstat_Tcp_RetransSegs{cluster=\"$cluster\"}[$interval:$resolution]) / rate(node_netstat_Tcp_OutSegs{cluster=\"$cluster\"}[$interval:$resolution])) by (instance))",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{instance}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of TCP Retransmits out of all sent segments",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "percentunit",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "percentunit",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 24,
- "x": 0,
- "y": 59
- },
- "id": 19,
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": true,
- "min": true,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 2,
- "links": [
- {
- "targetBlank": true,
- "title": "Why monitor SYN retransmits?",
- "url": "https://github.com/prometheus/node_exporter/issues/1023#issuecomment-408128365"
- }
- ],
- "minSpan": 24,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(sum(rate(node_netstat_TcpExt_TCPSynRetrans{cluster=\"$cluster\"}[$interval:$resolution]) / rate(node_netstat_Tcp_RetransSegs{cluster=\"$cluster\"}[$interval:$resolution])) by (instance))",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{instance}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of TCP SYN Retransmits out of all retransmits",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "percentunit",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "percentunit",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "sum by (instance) (rate(node_netstat_TcpExt_TCPSynRetrans{cluster=\"$cluster\"}[$__rate_interval]) / rate(node_netstat_Tcp_RetransSegs{cluster=\"$cluster\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Errors",
- "titleSize": "h6",
- "type": "row"
+ "title": "Rate of TCP SYN Retransmits out of all retransmits",
+ "type": "timeseries"
}
],
"refresh": "10s",
- "rows": [ ],
- "schemaVersion": 18,
- "style": "dark",
+ "schemaVersion": 39,
"tags": [
"kubernetes"
],
"templating": {
"list": [
- {
- "allValue": null,
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
- "current": {
- "text": "5m",
- "value": "5m"
- },
- "datasource": "$datasource",
- "hide": 0,
- "includeAll": false,
- "label": null,
- "multi": false,
- "name": "resolution",
- "options": [
- {
- "selected": false,
- "text": "30s",
- "value": "30s"
- },
- {
- "selected": true,
- "text": "5m",
- "value": "5m"
- },
- {
- "selected": false,
- "text": "1h",
- "value": "1h"
- }
- ],
- "query": "30s,5m,1h",
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "interval",
- "useTags": false
- },
- {
- "allValue": null,
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
- "current": {
- "text": "5m",
- "value": "5m"
- },
- "datasource": "$datasource",
- "hide": 2,
- "includeAll": false,
- "label": null,
- "multi": false,
- "name": "interval",
- "options": [
- {
- "selected": true,
- "text": "4h",
- "value": "4h"
- }
- ],
- "query": "4h",
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "interval",
- "useTags": false
- },
{
"current": {
"selected": true,
@@ -1622,31 +760,22 @@
"hide": 0,
"label": "Data source",
"name": "datasource",
- "options": [ ],
"query": "prometheus",
- "refresh": 1,
"regex": "",
"type": "datasource"
},
{
- "allValue": null,
- "current": { },
- "datasource": "$datasource",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 2,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "cluster",
"name": "cluster",
- "options": [ ],
"query": "label_values(up{job=\"kubelet\"}, cluster)",
"refresh": 2,
- "regex": "",
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "sort": 1,
+ "type": "query"
}
]
},
@@ -1654,33 +783,7 @@
"from": "now-1h",
"to": "now"
},
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
"timezone": "UTC",
"title": "Networking / Cluster",
- "uid": "ff635a025bcfea7bc3dd4f508990a3e9",
- "version": 0
+ "uid": "ff635a025bcfea7bc3dd4f508990a3e9"
}
diff --git a/charts/kubezero-metrics/jsonnet/dashboards/controller-manager.json b/charts/kubezero-metrics/jsonnet/dashboards/controller-manager.json
index 9d6f5fb1..11f8c568 100644
--- a/charts/kubezero-metrics/jsonnet/dashboards/controller-manager.json
+++ b/charts/kubezero-metrics/jsonnet/dashboards/controller-manager.json
@@ -1,925 +1,527 @@
{
- "__inputs": [ ],
- "__requires": [ ],
- "annotations": {
- "list": [ ]
- },
"editable": false,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "id": null,
- "links": [ ],
- "refresh": "10s",
- "rows": [
+ "panels": [
{
- "collapse": false,
- "collapsed": false,
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "none"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 4,
+ "x": 0,
+ "y": 0
+ },
+ "id": 1,
+ "interval": "1m",
+ "options": {
+ "colorMode": "none"
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#299c46",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": "$datasource",
- "format": "none",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "gridPos": { },
- "id": 2,
- "interval": null,
- "links": [ ],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "span": 2,
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
+ "expr": "sum(up{cluster=\"$cluster\", job=\"kube-controller-manager\"})",
+ "instant": true
+ }
+ ],
+ "title": "Up",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "tableColumn": "",
- "targets": [
- {
- "expr": "sum(up{cluster=\"$cluster\", job=\"kube-controller-manager\"})",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "A"
- }
+ "unit": "ops"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 20,
+ "x": 4,
+ "y": 0
+ },
+ "id": 2,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": "",
- "title": "Up",
- "type": "singlestat",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(workqueue_adds_total{cluster=\"$cluster\", job=\"kube-controller-manager\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, name)",
+ "legendFormat": "{{cluster}} {{instance}} {{name}}"
+ }
+ ],
+ "title": "Work Queue Add Rate",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "short"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 7
+ },
+ "id": 3,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "valueName": "min"
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(workqueue_depth{cluster=\"$cluster\", job=\"kube-controller-manager\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, name)",
+ "legendFormat": "{{cluster}} {{instance}} {{name}}"
+ }
+ ],
+ "title": "Work Queue Depth",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "s"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 14
+ },
+ "id": 4,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "histogram_quantile(0.99, sum(rate(workqueue_queue_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-controller-manager\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, name, le))",
+ "legendFormat": "{{cluster}} {{instance}} {{name}}"
+ }
+ ],
+ "title": "Work Queue Latency",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "ops"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 0,
+ "y": 21
+ },
+ "id": 5,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(rest_client_requests_total{job=\"kube-controller-manager\", instance=~\"$instance\",code=~\"2..\"}[$__rate_interval]))",
+ "legendFormat": "2xx"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 3,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(rate(workqueue_adds_total{cluster=\"$cluster\", job=\"kube-controller-manager\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, name)",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{cluster}} {{instance}} {{name}}",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Work Queue Add Rate",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6",
- "type": "row"
- },
- {
- "collapse": false,
- "collapsed": false,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 4,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(rate(workqueue_depth{cluster=\"$cluster\", job=\"kube-controller-manager\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, name)",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{cluster}} {{instance}} {{name}}",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Work Queue Depth",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6",
- "type": "row"
- },
- {
- "collapse": false,
- "collapsed": false,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 5,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "histogram_quantile(0.99, sum(rate(workqueue_queue_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-controller-manager\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, name, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{cluster}} {{instance}} {{name}}",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Work Queue Latency",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6",
- "type": "row"
- },
- {
- "collapse": false,
- "collapsed": false,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 6,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 4,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(rate(rest_client_requests_total{job=\"kube-controller-manager\", instance=~\"$instance\",code=~\"2..\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "2xx",
- "refId": "A"
- },
- {
- "expr": "sum(rate(rest_client_requests_total{job=\"kube-controller-manager\", instance=~\"$instance\",code=~\"3..\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "3xx",
- "refId": "B"
- },
- {
- "expr": "sum(rate(rest_client_requests_total{job=\"kube-controller-manager\", instance=~\"$instance\",code=~\"4..\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "4xx",
- "refId": "C"
- },
- {
- "expr": "sum(rate(rest_client_requests_total{job=\"kube-controller-manager\", instance=~\"$instance\",code=~\"5..\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "5xx",
- "refId": "D"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Kube API Request Rate",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "expr": "sum(rate(rest_client_requests_total{job=\"kube-controller-manager\", instance=~\"$instance\",code=~\"3..\"}[$__rate_interval]))",
+ "legendFormat": "3xx"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 7,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 8,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-controller-manager\", instance=~\"$instance\", verb=\"POST\"}[$__rate_interval])) by (verb, url, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{verb}} {{url}}",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Post Request Latency 99th Quantile",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6",
- "type": "row"
- },
- {
- "collapse": false,
- "collapsed": false,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 8,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-controller-manager\", instance=~\"$instance\", verb=\"GET\"}[$__rate_interval])) by (verb, url, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{verb}} {{url}}",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Get Request Latency 99th Quantile",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6",
- "type": "row"
- },
- {
- "collapse": false,
- "collapsed": false,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 9,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 4,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "process_resident_memory_bytes{cluster=\"$cluster\", job=\"kube-controller-manager\",instance=~\"$instance\"}",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "expr": "sum(rate(rest_client_requests_total{job=\"kube-controller-manager\", instance=~\"$instance\",code=~\"4..\"}[$__rate_interval]))",
+ "legendFormat": "4xx"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 10,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 4,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "rate(process_cpu_seconds_total{cluster=\"$cluster\", job=\"kube-controller-manager\",instance=~\"$instance\"}[$__rate_interval])",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU usage",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 11,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 4,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "go_goroutines{cluster=\"$cluster\", job=\"kube-controller-manager\",instance=~\"$instance\"}",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Goroutines",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "expr": "sum(rate(rest_client_requests_total{job=\"kube-controller-manager\", instance=~\"$instance\",code=~\"5..\"}[$__rate_interval]))",
+ "legendFormat": "5xx"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6",
- "type": "row"
+ "title": "Kube API Request Rate",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "s"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 16,
+ "x": 8,
+ "y": 21
+ },
+ "id": 6,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-controller-manager\", instance=~\"$instance\", verb=\"POST\"}[$__rate_interval])) by (verb, url, le))",
+ "legendFormat": "{{verb}} {{url}}"
+ }
+ ],
+ "title": "Post Request Latency 99th Quantile",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "s"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 28
+ },
+ "id": 7,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-controller-manager\", instance=~\"$instance\", verb=\"GET\"}[$__rate_interval])) by (verb, url, le))",
+ "legendFormat": "{{verb}} {{url}}"
+ }
+ ],
+ "title": "Get Request Latency 99th Quantile",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "bytes"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 0,
+ "y": 35
+ },
+ "id": 8,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "process_resident_memory_bytes{cluster=\"$cluster\", job=\"kube-controller-manager\",instance=~\"$instance\"}",
+ "legendFormat": "{{instance}}"
+ }
+ ],
+ "title": "Memory",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "short"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 8,
+ "y": 35
+ },
+ "id": 9,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "rate(process_cpu_seconds_total{cluster=\"$cluster\", job=\"kube-controller-manager\",instance=~\"$instance\"}[$__rate_interval])",
+ "legendFormat": "{{instance}}"
+ }
+ ],
+ "title": "CPU usage",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "short"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 16,
+ "y": 35
+ },
+ "id": 10,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "go_goroutines{cluster=\"$cluster\", job=\"kube-controller-manager\",instance=~\"$instance\"}",
+ "legendFormat": "{{instance}}"
+ }
+ ],
+ "title": "Goroutines",
+ "type": "timeseries"
}
],
- "schemaVersion": 14,
- "style": "dark",
+ "refresh": "10s",
+ "schemaVersion": 39,
"tags": [
"kubernetes"
],
@@ -934,51 +536,36 @@
"hide": 0,
"label": "Data source",
"name": "datasource",
- "options": [ ],
"query": "prometheus",
- "refresh": 1,
"regex": "",
"type": "datasource"
},
{
- "allValue": null,
- "current": { },
- "datasource": "$datasource",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 2,
- "includeAll": false,
"label": "cluster",
- "multi": false,
"name": "cluster",
- "options": [ ],
"query": "label_values(up{job=\"kube-controller-manager\"}, cluster)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": null,
- "current": { },
- "datasource": "$datasource",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 0,
"includeAll": true,
- "label": null,
- "multi": false,
+ "label": "instance",
"name": "instance",
- "options": [ ],
"query": "label_values(up{cluster=\"$cluster\", job=\"kube-controller-manager\"}, instance)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
}
]
},
@@ -986,33 +573,7 @@
"from": "now-1h",
"to": "now"
},
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
"timezone": "UTC",
"title": "Controller Manager",
- "uid": "72e0e05bef5099e5f049b05fdc429ed4",
- "version": 0
+ "uid": "72e0e05bef5099e5f049b05fdc429ed4"
}
diff --git a/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-cluster.json b/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-cluster.json
index 5bf7ab32..98ed42e7 100644
--- a/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-cluster.json
+++ b/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-cluster.json
@@ -1,2489 +1,1524 @@
{
- "annotations": {
- "list": [ ]
- },
- "editable": true,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "links": [ ],
- "refresh": "10s",
- "rows": [
+ "editable": false,
+ "panels": [
{
- "collapse": false,
- "height": "100px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "none"
+ }
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 4,
+ "x": 0,
+ "y": 0
+ },
+ "id": 1,
+ "interval": "1m",
+ "options": {
+ "colorMode": "none"
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "format": "percentunit",
- "id": 1,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 2,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "cluster:node_cpu:ratio_rate5m{cluster=\"$cluster\"}",
- "format": "time_series",
- "instant": true,
- "refId": "A"
- }
- ],
- "thresholds": "70,80",
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Utilisation",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "singlestat",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "format": "percentunit",
- "id": 2,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 2,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(namespace_cpu:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"cpu\",cluster=\"$cluster\"})",
- "format": "time_series",
- "instant": true,
- "refId": "A"
- }
- ],
- "thresholds": "70,80",
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Requests Commitment",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "singlestat",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "format": "percentunit",
- "id": 3,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 2,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(namespace_cpu:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"cpu\",cluster=\"$cluster\"})",
- "format": "time_series",
- "instant": true,
- "refId": "A"
- }
- ],
- "thresholds": "70,80",
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Limits Commitment",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "singlestat",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "format": "percentunit",
- "id": 4,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 2,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "1 - sum(:node_memory_MemAvailable_bytes:sum{cluster=\"$cluster\"}) / sum(node_memory_MemTotal_bytes{job=\"node-exporter\",cluster=\"$cluster\"})",
- "format": "time_series",
- "instant": true,
- "refId": "A"
- }
- ],
- "thresholds": "70,80",
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory Utilisation",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "singlestat",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "format": "percentunit",
- "id": 5,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 2,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(namespace_memory:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"memory\",cluster=\"$cluster\"})",
- "format": "time_series",
- "instant": true,
- "refId": "A"
- }
- ],
- "thresholds": "70,80",
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory Requests Commitment",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "singlestat",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "format": "percentunit",
- "id": 6,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 2,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(namespace_memory:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"memory\",cluster=\"$cluster\"})",
- "format": "time_series",
- "instant": true,
- "refId": "A"
- }
- ],
- "thresholds": "70,80",
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory Limits Commitment",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "singlestat",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "cluster:node_cpu:ratio_rate5m{cluster=\"$cluster\"}",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Headlines",
- "titleSize": "h6"
+ "title": "CPU Utilisation",
+ "type": "stat"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "percentunit"
+ }
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 4,
+ "x": 4,
+ "y": 0
+ },
+ "id": 2,
+ "interval": "1m",
+ "options": {
+ "colorMode": "none"
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 7,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\"}) by (namespace)",
- "format": "time_series",
- "legendFormat": "{{namespace}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Usage",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(namespace_cpu:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"cpu\",cluster=\"$cluster\"})",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "CPU",
- "titleSize": "h6"
+ "title": "CPU Requests Commitment",
+ "type": "stat"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "percentunit"
+ }
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 4,
+ "x": 8,
+ "y": 0
+ },
+ "id": 3,
+ "interval": "1m",
+ "options": {
+ "colorMode": "none"
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 8,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
- },
- {
- "alias": "Pods",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 0,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down to pods",
- "linkUrl": "/d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "Workloads",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 0,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down to workloads",
- "linkUrl": "/d/a87fb0d919ec0ea5f6543124e16c42a5/k8s-resources-workloads-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Usage",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Requests",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Requests %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "CPU Limits",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #F",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Limits %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #G",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Namespace",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down to pods",
- "linkUrl": "/d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
- "pattern": "namespace",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
- }
- ],
- "targets": [
- {
- "expr": "sum(kube_pod_owner{job=\"kube-state-metrics\", cluster=\"$cluster\"}) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "count(avg(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\"}) by (workload, namespace)) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\"}) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "sum(namespace_cpu:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\"}) by (namespace) / sum(namespace_cpu:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- },
- {
- "expr": "sum(namespace_cpu:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "F"
- },
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\"}) by (namespace) / sum(namespace_cpu:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "G"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Quota",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(namespace_cpu:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"cpu\",cluster=\"$cluster\"})",
+ "instant": true
+ }
+ ],
+ "title": "CPU Limits Commitment",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "percentunit"
+ }
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 4,
+ "x": 12,
+ "y": 0
+ },
+ "id": 4,
+ "interval": "1m",
+ "options": {
+ "colorMode": "none"
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "1 - sum(:node_memory_MemAvailable_bytes:sum{cluster=\"$cluster\"}) / sum(node_memory_MemTotal_bytes{job=\"node-exporter\",cluster=\"$cluster\"})",
+ "instant": true
+ }
+ ],
+ "title": "Memory Utilisation",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "percentunit"
+ }
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 4,
+ "x": 16,
+ "y": 0
+ },
+ "id": 5,
+ "interval": "1m",
+ "options": {
+ "colorMode": "none"
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(namespace_memory:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"memory\",cluster=\"$cluster\"})",
+ "instant": true
+ }
+ ],
+ "title": "Memory Requests Commitment",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "percentunit"
+ }
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 4,
+ "x": 20,
+ "y": 0
+ },
+ "id": 6,
+ "interval": "1m",
+ "options": {
+ "colorMode": "none"
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(namespace_memory:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"memory\",cluster=\"$cluster\"})",
+ "instant": true
+ }
+ ],
+ "title": "Memory Limits Commitment",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ }
+ }
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 6
+ },
+ "id": 7,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\"}) by (namespace)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "CPU Usage",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/%/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "percentunit"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Namespace"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down to pods",
+ "url": "/d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?${datasource:queryparam}&var-cluster=$cluster&var-namespace=${__data.fields.Namespace}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 12
+ },
+ "id": 8,
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(kube_pod_owner{job=\"kube-state-metrics\", cluster=\"$cluster\"}) by (namespace)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "count(avg(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\"}) by (workload, namespace)) by (namespace)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\"}) by (namespace)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(namespace_cpu:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) by (namespace)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\"}) by (namespace) / sum(namespace_cpu:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) by (namespace)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(namespace_cpu:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) by (namespace)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\"}) by (namespace) / sum(namespace_cpu:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) by (namespace)",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "CPU Quota",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
+ "transformations": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 9,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(container_memory_rss{job=\"kubelet\", cluster=\"$cluster\", container!=\"\"}) by (namespace)",
- "format": "time_series",
- "legendFormat": "{{namespace}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory Usage (w/o cache)",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
+ "id": "joinByField",
+ "options": {
+ "byField": "namespace",
+ "mode": "outer"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "Time 6": true,
+ "Time 7": true
},
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Time 6": 5,
+ "Time 7": 6,
+ "Value #A": 8,
+ "Value #B": 9,
+ "Value #C": 10,
+ "Value #D": 11,
+ "Value #E": 12,
+ "Value #F": 13,
+ "Value #G": 14,
+ "namespace": 7
+ },
+ "renameByName": {
+ "Value #A": "Pods",
+ "Value #B": "Workloads",
+ "Value #C": "CPU Usage",
+ "Value #D": "CPU Requests",
+ "Value #E": "CPU Requests %",
+ "Value #F": "CPU Limits",
+ "Value #G": "CPU Limits %",
+ "namespace": "Namespace"
}
- ]
+ }
+ }
+ ],
+ "type": "table"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "bytes"
+ }
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 18
+ },
+ "id": 9,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(container_memory_rss{job=\"kubelet\", cluster=\"$cluster\", container!=\"\"}) by (namespace)",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "Memory",
- "titleSize": "h6"
+ "type": "timeseries"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/%/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "percentunit"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Memory Usage"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "bytes"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Memory Requests"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "bytes"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Memory Limits"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "bytes"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Namespace"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down to pods",
+ "url": "/d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?${datasource:queryparam}&var-cluster=$cluster&var-namespace=${__data.fields.Namespace}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 24
+ },
+ "id": 10,
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 10,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
- },
- {
- "alias": "Pods",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 0,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down to pods",
- "linkUrl": "/d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "Workloads",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 0,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down to workloads",
- "linkUrl": "/d/a87fb0d919ec0ea5f6543124e16c42a5/k8s-resources-workloads-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "Memory Usage",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Requests",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Requests %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Memory Limits",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #F",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Limits %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #G",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Namespace",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down to pods",
- "linkUrl": "/d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
- "pattern": "namespace",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
- }
- ],
- "targets": [
- {
- "expr": "sum(kube_pod_owner{job=\"kube-state-metrics\", cluster=\"$cluster\"}) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "count(avg(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\"}) by (workload, namespace)) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "sum(container_memory_rss{job=\"kubelet\", cluster=\"$cluster\", container!=\"\"}) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "sum(namespace_memory:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "sum(container_memory_rss{job=\"kubelet\", cluster=\"$cluster\", container!=\"\"}) by (namespace) / sum(namespace_memory:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- },
- {
- "expr": "sum(namespace_memory:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "F"
- },
- {
- "expr": "sum(container_memory_rss{job=\"kubelet\", cluster=\"$cluster\", container!=\"\"}) by (namespace) / sum(namespace_memory:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "G"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Requests by Namespace",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "expr": "sum(kube_pod_owner{job=\"kube-state-metrics\", cluster=\"$cluster\"}) by (namespace)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "count(avg(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\"}) by (workload, namespace)) by (namespace)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(container_memory_rss{job=\"kubelet\", cluster=\"$cluster\", container!=\"\"}) by (namespace)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(namespace_memory:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) by (namespace)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(container_memory_rss{job=\"kubelet\", cluster=\"$cluster\", container!=\"\"}) by (namespace) / sum(namespace_memory:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) by (namespace)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(namespace_memory:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) by (namespace)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(container_memory_rss{job=\"kubelet\", cluster=\"$cluster\", container!=\"\"}) by (namespace) / sum(namespace_memory:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) by (namespace)",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Memory Requests",
- "titleSize": "h6"
+ "title": "Memory Requests by Namespace",
+ "transformations": [
+ {
+ "id": "joinByField",
+ "options": {
+ "byField": "namespace",
+ "mode": "outer"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "Time 6": true,
+ "Time 7": true
+ },
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Time 6": 5,
+ "Time 7": 6,
+ "Value #A": 8,
+ "Value #B": 9,
+ "Value #C": 10,
+ "Value #D": 11,
+ "Value #E": 12,
+ "Value #F": 13,
+ "Value #G": 14,
+ "namespace": 7
+ },
+ "renameByName": {
+ "Value #A": "Pods",
+ "Value #B": "Workloads",
+ "Value #C": "Memory Usage",
+ "Value #D": "Memory Requests",
+ "Value #E": "Memory Requests %",
+ "Value #F": "Memory Limits",
+ "Value #G": "Memory Limits %",
+ "namespace": "Namespace"
+ }
+ }
+ }
+ ],
+ "type": "table"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Bandwidth/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "Bps"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Packets/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "pps"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Namespace"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down to pods",
+ "url": "/d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?${datasource:queryparam}&var-cluster=$cluster&var-namespace=${__data.fields.Namespace}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 30
+ },
+ "id": 11,
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 11,
- "interval": "1m",
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
- },
- {
- "alias": "Current Receive Bandwidth",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Current Transmit Bandwidth",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Rate of Received Packets",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Transmitted Packets",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Received Packets Dropped",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Transmitted Packets Dropped",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #F",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Namespace",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down to pods",
- "linkUrl": "/d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
- "pattern": "namespace",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
- }
- ],
- "targets": [
- {
- "expr": "sum(irate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "sum(irate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "sum(irate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "sum(irate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "sum(irate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- },
- {
- "expr": "sum(irate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "F"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Current Network Usage",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "expr": "sum(rate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "sum(rate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(rate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "Current Network Usage",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
+ "transformations": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 12,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
- "format": "time_series",
- "legendFormat": "{{namespace}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Receive Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "id": "joinByField",
+ "options": {
+ "byField": "namespace",
+ "mode": "outer"
+ }
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 13,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
- "format": "time_series",
- "legendFormat": "{{namespace}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Transmit Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "Time 6": true
},
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Time 6": 5,
+ "Value #A": 7,
+ "Value #B": 8,
+ "Value #C": 9,
+ "Value #D": 10,
+ "Value #E": 11,
+ "Value #F": 12,
+ "namespace": 6
+ },
+ "renameByName": {
+ "Value #A": "Current Receive Bandwidth",
+ "Value #B": "Current Transmit Bandwidth",
+ "Value #C": "Rate of Received Packets",
+ "Value #D": "Rate of Transmitted Packets",
+ "Value #E": "Rate of Received Packets Dropped",
+ "Value #F": "Rate of Transmitted Packets Dropped",
+ "namespace": "Namespace"
}
- ]
+ }
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Bandwidth",
- "titleSize": "h6"
+ "type": "table"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 14,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "avg(irate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
- "format": "time_series",
- "legendFormat": "{{namespace}}",
- "legendLink": null
- }
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 36
+ },
+ "id": 12,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Average Container Bandwidth by Namespace: Received",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "sum(rate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Receive Bandwidth",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 42
+ },
+ "id": 13,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Transmit Bandwidth",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 48
+ },
+ "id": 14,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "avg(irate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Average Container Bandwidth by Namespace: Received",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 54
+ },
+ "id": 15,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "avg(irate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Average Container Bandwidth by Namespace: Transmitted",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 60
+ },
+ "id": 16,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(irate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Received Packets",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 66
+ },
+ "id": 17,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(irate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Transmitted Packets",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 72
+ },
+ "id": 18,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(irate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Received Packets Dropped",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 78
+ },
+ "id": 19,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(irate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Transmitted Packets Dropped",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "iops"
+ }
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 84
+ },
+ "id": 20,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "ceil(sum by(namespace) (rate(container_fs_reads_total{job=\"kubelet\", container!=\"\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"kubelet\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval])))",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "IOPS(Reads+Writes)",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 90
+ },
+ "id": 21,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by(namespace) (rate(container_fs_reads_bytes_total{job=\"kubelet\", container!=\"\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"kubelet\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "ThroughPut(Read+Write)",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/IOPS/"
},
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "properties": [
+ {
+ "id": "unit",
+ "value": "iops"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Throughput/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "Bps"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Namespace"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down to pods",
+ "url": "/d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?${datasource:queryparam}&var-cluster=$cluster&var-namespace=${__data.fields.Namespace}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 96
+ },
+ "id": 22,
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by(namespace) (rate(container_fs_reads_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 15,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "avg(irate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
- "format": "time_series",
- "legendFormat": "{{namespace}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Average Container Bandwidth by Namespace: Transmitted",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Average Container Bandwidth by Namespace",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 16,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
- "format": "time_series",
- "legendFormat": "{{namespace}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum by(namespace) (rate(container_fs_writes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 17,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
- "format": "time_series",
- "legendFormat": "{{namespace}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Rate of Packets",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 18,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
- "format": "time_series",
- "legendFormat": "{{namespace}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum by(namespace) (rate(container_fs_reads_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 19,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
- "format": "time_series",
- "legendFormat": "{{namespace}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Rate of Packets Dropped",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "decimals": -1,
- "fill": 10,
- "id": 20,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "ceil(sum by(namespace) (rate(container_fs_reads_total{job=\"kubelet\", container!=\"\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"kubelet\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval])))",
- "format": "time_series",
- "legendFormat": "{{namespace}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "IOPS(Reads+Writes)",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum by(namespace) (rate(container_fs_reads_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 21,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum by(namespace) (rate(container_fs_reads_bytes_total{job=\"kubelet\", container!=\"\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"kubelet\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))",
- "format": "time_series",
- "legendFormat": "{{namespace}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "ThroughPut(Read+Write)",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Storage IO",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
+ "expr": "sum by(namespace) (rate(container_fs_writes_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
+ },
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 22,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "sort": {
- "col": 4,
- "desc": true
- },
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
- },
- {
- "alias": "IOPS(Reads)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 3,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "iops"
- },
- {
- "alias": "IOPS(Writes)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 3,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "iops"
- },
- {
- "alias": "IOPS(Reads + Writes)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 3,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "iops"
- },
- {
- "alias": "Throughput(Read)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Throughput(Write)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Throughput(Read + Write)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #F",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Namespace",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down to pods",
- "linkUrl": "/d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
- "pattern": "namespace",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
- }
- ],
- "targets": [
- {
- "expr": "sum by(namespace) (rate(container_fs_reads_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "sum by(namespace) (rate(container_fs_writes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "sum by(namespace) (rate(container_fs_reads_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "sum by(namespace) (rate(container_fs_reads_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "sum by(namespace) (rate(container_fs_writes_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- },
- {
- "expr": "sum by(namespace) (rate(container_fs_reads_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "F"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Current Storage IO",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum by(namespace) (rate(container_fs_reads_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Storage IO - Distribution",
- "titleSize": "h6"
+ "title": "Current Storage IO",
+ "transformations": [
+ {
+ "id": "joinByField",
+ "options": {
+ "byField": "namespace",
+ "mode": "outer"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "Time 6": true
+ },
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Time 6": 5,
+ "Value #A": 7,
+ "Value #B": 8,
+ "Value #C": 9,
+ "Value #D": 10,
+ "Value #E": 11,
+ "Value #F": 12,
+ "namespace": 6
+ },
+ "renameByName": {
+ "Value #A": "IOPS(Reads)",
+ "Value #B": "IOPS(Writes)",
+ "Value #C": "IOPS(Reads + Writes)",
+ "Value #D": "Throughput(Read)",
+ "Value #E": "Throughput(Write)",
+ "Value #F": "Throughput(Read + Write)",
+ "namespace": "Namespace"
+ }
+ }
+ }
+ ],
+ "type": "table"
}
],
- "schemaVersion": 14,
- "style": "dark",
+ "refresh": "10s",
+ "schemaVersion": 39,
"tags": [
"kubernetes"
],
@@ -2491,40 +1526,29 @@
"list": [
{
"current": {
+ "selected": true,
"text": "default",
"value": "default"
},
"hide": 0,
"label": "Data source",
"name": "datasource",
- "options": [ ],
"query": "prometheus",
- "refresh": 1,
"regex": "",
"type": "datasource"
},
{
- "allValue": null,
- "current": {
- "text": "",
- "value": ""
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
"hide": 2,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "cluster",
"name": "cluster",
- "options": [ ],
"query": "label_values(up{job=\"kubelet\"}, cluster)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
}
]
},
@@ -2532,33 +1556,7 @@
"from": "now-1h",
"to": "now"
},
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
"timezone": "UTC",
"title": "Compute Resources / Cluster",
- "uid": "efa86fd1d0c121a26444b636a3f509a8",
- "version": 0
+ "uid": "efa86fd1d0c121a26444b636a3f509a8"
}
diff --git a/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-namespace.json b/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-namespace.json
index 01b0c483..3a17852e 100644
--- a/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-namespace.json
+++ b/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-namespace.json
@@ -1,2226 +1,1442 @@
{
- "annotations": {
- "list": [ ]
- },
- "editable": true,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "links": [ ],
- "refresh": "10s",
- "rows": [
+ "editable": false,
+ "panels": [
{
- "collapse": false,
- "height": "100px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "percentunit"
+ }
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 6,
+ "x": 0,
+ "y": 0
+ },
+ "id": 1,
+ "interval": "1m",
+ "options": {
+ "colorMode": "none"
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "format": "percentunit",
- "id": 1,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 3,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}) / sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})",
- "format": "time_series",
- "instant": true,
- "refId": "A"
- }
- ],
- "thresholds": "70,80",
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Utilisation (from requests)",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "singlestat",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "format": "percentunit",
- "id": 2,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 3,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}) / sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})",
- "format": "time_series",
- "instant": true,
- "refId": "A"
- }
- ],
- "thresholds": "70,80",
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Utilisation (from limits)",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "singlestat",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "format": "percentunit",
- "id": 3,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 3,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) / sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})",
- "format": "time_series",
- "instant": true,
- "refId": "A"
- }
- ],
- "thresholds": "70,80",
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory Utilisation (from requests)",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "singlestat",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "format": "percentunit",
- "id": 4,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 3,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) / sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})",
- "format": "time_series",
- "instant": true,
- "refId": "A"
- }
- ],
- "thresholds": "70,80",
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory Utilisation (from limits)",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "singlestat",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}) / sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Headlines",
- "titleSize": "h6"
+ "title": "CPU Utilisation (from requests)",
+ "type": "stat"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "percentunit"
+ }
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 6,
+ "x": 6,
+ "y": 0
+ },
+ "id": 2,
+ "interval": "1m",
+ "options": {
+ "colorMode": "none"
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 5,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
- {
- "alias": "quota - requests",
- "color": "#F2495C",
- "dashes": true,
- "fill": 0,
- "hiddenSeries": true,
- "hideTooltip": true,
- "legend": true,
- "linewidth": 2,
- "stack": false
- },
- {
- "alias": "quota - limits",
- "color": "#FF9830",
- "dashes": true,
- "fill": 0,
- "hiddenSeries": true,
- "hideTooltip": true,
- "legend": true,
- "linewidth": 2,
- "stack": false
- }
- ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- },
- {
- "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.cpu\"})",
- "format": "time_series",
- "legendFormat": "quota - requests",
- "legendLink": null
- },
- {
- "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.cpu\"})",
- "format": "time_series",
- "legendFormat": "quota - limits",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Usage",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}) / sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})",
+ "instant": true
+ }
+ ],
+ "title": "CPU Utilisation (from limits)",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "percentunit"
+ }
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 6,
+ "x": 12,
+ "y": 0
+ },
+ "id": 3,
+ "interval": "1m",
+ "options": {
+ "colorMode": "none"
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) / sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})",
+ "instant": true
+ }
+ ],
+ "title": "Memory Utilisation (from requests)",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "percentunit"
+ }
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 6,
+ "x": 18,
+ "y": 0
+ },
+ "id": 4,
+ "interval": "1m",
+ "options": {
+ "colorMode": "none"
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) / sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})",
+ "instant": true
+ }
+ ],
+ "title": "Memory Utilisation (from limits)",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ }
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "B"
+ },
+ "properties": [
+ {
+ "id": "custom.lineStyle",
+ "value": {
+ "fill": "dash"
+ }
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 2
+ },
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "C"
+ },
+ "properties": [
+ {
+ "id": "custom.lineStyle",
+ "value": {
+ "fill": "dash"
+ }
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 2
+ },
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "orange",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 7
+ },
+ "id": 5,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
+ "legendFormat": "__auto"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.cpu\"})",
+ "legendFormat": "quota - requests"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.cpu\"})",
+ "legendFormat": "quota - limits"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "CPU Usage",
- "titleSize": "h6"
+ "type": "timeseries"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/%/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "percentunit"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Pod"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down to pods",
+ "url": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 14
+ },
+ "id": 6,
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 6,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
- },
- {
- "alias": "CPU Usage",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Requests",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Requests %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "CPU Limits",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Limits %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Pod",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
- "pattern": "pod",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
- }
- ],
- "targets": [
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Quota",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "CPU Quota",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
+ "transformations": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 7,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
- {
- "alias": "quota - requests",
- "color": "#F2495C",
- "dashes": true,
- "fill": 0,
- "hiddenSeries": true,
- "hideTooltip": true,
- "legend": true,
- "linewidth": 2,
- "stack": false
+ "id": "joinByField",
+ "options": {
+ "byField": "pod",
+ "mode": "outer"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true
},
- {
- "alias": "quota - limits",
- "color": "#FF9830",
- "dashes": true,
- "fill": 0,
- "hiddenSeries": true,
- "hideTooltip": true,
- "legend": true,
- "linewidth": 2,
- "stack": false
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Value #A": 6,
+ "Value #B": 7,
+ "Value #C": 8,
+ "Value #D": 9,
+ "Value #E": 10,
+ "pod": 5
+ },
+ "renameByName": {
+ "Value #A": "CPU Usage",
+ "Value #B": "CPU Requests",
+ "Value #C": "CPU Requests %",
+ "Value #D": "CPU Limits",
+ "Value #E": "CPU Limits %",
+ "pod": "Pod"
}
- ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}) by (pod)",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- },
- {
- "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.memory\"})",
- "format": "time_series",
- "legendFormat": "quota - requests",
- "legendLink": null
- },
- {
- "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.memory\"})",
- "format": "time_series",
- "legendFormat": "quota - limits",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory Usage (w/o cache)",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ }
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Memory Usage",
- "titleSize": "h6"
+ "type": "table"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "bytes"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "B"
+ },
+ "properties": [
+ {
+ "id": "custom.lineStyle",
+ "value": {
+ "fill": "dash"
+ }
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 2
+ },
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "C"
+ },
+ "properties": [
+ {
+ "id": "custom.lineStyle",
+ "value": {
+ "fill": "dash"
+ }
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 2
+ },
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "orange",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 21
+ },
+ "id": 7,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 8,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
- },
- {
- "alias": "Memory Usage",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Requests",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Requests %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Memory Limits",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Limits %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Memory Usage (RSS)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #F",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Usage (Cache)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #G",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Usage (Swap)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #H",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Pod",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
- "pattern": "pod",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
- }
- ],
- "targets": [
- {
- "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) by (pod) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) by (pod) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- },
- {
- "expr": "sum(container_memory_rss{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "F"
- },
- {
- "expr": "sum(container_memory_cache{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "G"
- },
- {
- "expr": "sum(container_memory_swap{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "H"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory Quota",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}) by (pod)",
+ "legendFormat": "__auto"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.memory\"})",
+ "legendFormat": "quota - requests"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.memory\"})",
+ "legendFormat": "quota - limits"
+ }
+ ],
+ "title": "Memory Usage (w/o cache)",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "bytes"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/%/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "percentunit"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Pod"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down to pods",
+ "url": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 28
+ },
+ "id": 8,
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) by (pod) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) by (pod) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(container_memory_rss{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(container_memory_cache{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(container_memory_swap{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"}) by (pod)",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "Memory Quota",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
+ "transformations": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 9,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
+ "id": "joinByField",
+ "options": {
+ "byField": "pod",
+ "mode": "outer"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "Time 6": true,
+ "Time 7": true,
+ "Time 8": true
},
- {
- "alias": "Current Receive Bandwidth",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Time 6": 5,
+ "Time 7": 6,
+ "Time 8": 7,
+ "Value #A": 9,
+ "Value #B": 10,
+ "Value #C": 11,
+ "Value #D": 12,
+ "Value #E": 13,
+ "Value #F": 14,
+ "Value #G": 15,
+ "Value #H": 16,
+ "pod": 8
},
- {
- "alias": "Current Transmit Bandwidth",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Rate of Received Packets",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Transmitted Packets",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Received Packets Dropped",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Transmitted Packets Dropped",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #F",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Pod",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down to pods",
- "linkUrl": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
- "pattern": "pod",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
+ "renameByName": {
+ "Value #A": "Memory Usage",
+ "Value #B": "Memory Requests",
+ "Value #C": "Memory Requests %",
+ "Value #D": "Memory Limits",
+ "Value #E": "Memory Limits %",
+ "Value #F": "Memory Usage (RSS)",
+ "Value #G": "Memory Usage (Cache)",
+ "Value #H": "Memory Usage (Swap)",
+ "pod": "Pod"
}
- ],
- "targets": [
- {
- "expr": "sum(irate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "sum(irate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "sum(irate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "sum(irate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "sum(irate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- },
- {
- "expr": "sum(irate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "F"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Current Network Usage",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ }
+ }
+ ],
+ "type": "table"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Bandwidth/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "Bps"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Packets/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "pps"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Pod"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down to pods",
+ "url": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 35
+ },
+ "id": 9,
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "Current Network Usage",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
+ "transformations": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 10,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Receive Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "id": "joinByField",
+ "options": {
+ "byField": "pod",
+ "mode": "outer"
+ }
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 11,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Transmit Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "Time 6": true
},
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Time 6": 5,
+ "Value #A": 7,
+ "Value #B": 8,
+ "Value #C": 9,
+ "Value #D": 10,
+ "Value #E": 11,
+ "Value #F": 12,
+ "pod": 6
+ },
+ "renameByName": {
+ "Value #A": "Current Receive Bandwidth",
+ "Value #B": "Current Transmit Bandwidth",
+ "Value #C": "Rate of Received Packets",
+ "Value #D": "Rate of Transmitted Packets",
+ "Value #E": "Rate of Received Packets Dropped",
+ "Value #F": "Rate of Transmitted Packets Dropped",
+ "pod": "Pod"
}
- ]
+ }
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Bandwidth",
- "titleSize": "h6"
+ "type": "table"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 12,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 42
+ },
+ "id": 10,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "sum(rate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Receive Bandwidth",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 42
+ },
+ "id": 11,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Transmit Bandwidth",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 49
+ },
+ "id": 12,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Received Packets",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 49
+ },
+ "id": 13,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Transmitted Packets",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 56
+ },
+ "id": 14,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Received Packets Dropped",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 56
+ },
+ "id": 15,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Transmitted Packets Dropped",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "iops"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 63
+ },
+ "id": 16,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "ceil(sum by(pod) (rate(container_fs_reads_total{container!=\"\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]) + rate(container_fs_writes_total{container!=\"\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])))",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "IOPS(Reads+Writes)",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 63
+ },
+ "id": 17,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by(pod) (rate(container_fs_reads_bytes_total{container!=\"\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{container!=\"\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "ThroughPut(Read+Write)",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/IOPS/"
},
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "properties": [
+ {
+ "id": "unit",
+ "value": "iops"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Throughput/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "Bps"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Pod"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down to pods",
+ "url": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 70
+ },
+ "id": 18,
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by(pod) (rate(container_fs_reads_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 13,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Rate of Packets",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 14,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum by(pod) (rate(container_fs_writes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 15,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Rate of Packets Dropped",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "decimals": -1,
- "fill": 10,
- "id": 16,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "ceil(sum by(pod) (rate(container_fs_reads_total{container!=\"\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]) + rate(container_fs_writes_total{container!=\"\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])))",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "IOPS(Reads+Writes)",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum by(pod) (rate(container_fs_reads_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 17,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum by(pod) (rate(container_fs_reads_bytes_total{container!=\"\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{container!=\"\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "ThroughPut(Read+Write)",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Storage IO",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
+ "expr": "sum by(pod) (rate(container_fs_reads_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
+ },
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 18,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "sort": {
- "col": 4,
- "desc": true
+ "expr": "sum by(pod) (rate(container_fs_writes_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
- },
- {
- "alias": "IOPS(Reads)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 3,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "iops"
- },
- {
- "alias": "IOPS(Writes)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 3,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "iops"
- },
- {
- "alias": "IOPS(Reads + Writes)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 3,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "iops"
- },
- {
- "alias": "Throughput(Read)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Throughput(Write)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Throughput(Read + Write)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #F",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Pod",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down to pods",
- "linkUrl": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
- "pattern": "pod",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
- }
- ],
- "targets": [
- {
- "expr": "sum by(pod) (rate(container_fs_reads_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "sum by(pod) (rate(container_fs_writes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "sum by(pod) (rate(container_fs_reads_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "sum by(pod) (rate(container_fs_reads_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "sum by(pod) (rate(container_fs_writes_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- },
- {
- "expr": "sum by(pod) (rate(container_fs_reads_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "F"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Current Storage IO",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum by(pod) (rate(container_fs_reads_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Storage IO - Distribution",
- "titleSize": "h6"
+ "title": "Current Storage IO",
+ "transformations": [
+ {
+ "id": "joinByField",
+ "options": {
+ "byField": "pod",
+ "mode": "outer"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "Time 6": true
+ },
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Time 6": 5,
+ "Value #A": 7,
+ "Value #B": 8,
+ "Value #C": 9,
+ "Value #D": 10,
+ "Value #E": 11,
+ "Value #F": 12,
+ "pod": 6
+ },
+ "renameByName": {
+ "Value #A": "IOPS(Reads)",
+ "Value #B": "IOPS(Writes)",
+ "Value #C": "IOPS(Reads + Writes)",
+ "Value #D": "Throughput(Read)",
+ "Value #E": "Throughput(Write)",
+ "Value #F": "Throughput(Read + Write)",
+ "pod": "Pod"
+ }
+ }
+ }
+ ],
+ "type": "table"
}
],
- "schemaVersion": 14,
- "style": "dark",
+ "refresh": "10s",
+ "schemaVersion": 39,
"tags": [
"kubernetes"
],
@@ -2228,63 +1444,42 @@
"list": [
{
"current": {
+ "selected": true,
"text": "default",
"value": "default"
},
"hide": 0,
"label": "Data source",
"name": "datasource",
- "options": [ ],
"query": "prometheus",
- "refresh": 1,
"regex": "",
"type": "datasource"
},
{
- "allValue": null,
- "current": {
- "text": "",
- "value": ""
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
"hide": 2,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "cluster",
"name": "cluster",
- "options": [ ],
"query": "label_values(up{job=\"kube-state-metrics\"}, cluster)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": null,
- "current": {
- "text": "",
- "value": ""
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
"hide": 0,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "namespace",
"name": "namespace",
- "options": [ ],
"query": "label_values(kube_namespace_status_phase{job=\"kube-state-metrics\", cluster=\"$cluster\"}, namespace)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
}
]
},
@@ -2292,33 +1487,7 @@
"from": "now-1h",
"to": "now"
},
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
"timezone": "UTC",
"title": "Compute Resources / Namespace (Pods)",
- "uid": "85a562078cdf77779eaa1add43ccec1e",
- "version": 0
+ "uid": "85a562078cdf77779eaa1add43ccec1e"
}
diff --git a/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-node.json b/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-node.json
index f4cb7805..45462f61 100644
--- a/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-node.json
+++ b/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-node.json
@@ -1,741 +1,502 @@
{
- "annotations": {
- "list": [ ]
- },
- "editable": true,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "links": [ ],
- "refresh": "10s",
- "rows": [
+ "editable": false,
+ "panels": [
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "mode": "normal"
+ }
+ }
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "max capacity"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ },
+ {
+ "id": "custom.stacking",
+ "value": {
+ "mode": "none"
+ }
+ },
+ {
+ "id": "custom.hideFrom",
+ "value": {
+ "legend": false,
+ "tooltip": true,
+ "viz": false
+ }
+ },
+ {
+ "id": "custom.lineStyle",
+ "value": {
+ "dash": [
+ 10,
+ 10
+ ],
+ "fill": "dash"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 1,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 1,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
- {
- "alias": "max capacity",
- "color": "#F2495C",
- "dashes": true,
- "fill": 0,
- "hiddenSeries": true,
- "hideTooltip": true,
- "legend": true,
- "linewidth": 2,
- "stack": false
- }
- ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(kube_node_status_capacity{cluster=\"$cluster\", node=~\"$node\", resource=\"cpu\"})",
- "format": "time_series",
- "legendFormat": "max capacity",
- "legendLink": null
- },
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Usage",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "expr": "sum(kube_node_status_capacity{cluster=\"$cluster\", node=~\"$node\", resource=\"cpu\"})",
+ "legendFormat": "max capacity"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
+ "legendFormat": "{{pod}}"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "CPU Usage",
- "titleSize": "h6"
+ "type": "timeseries"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/%/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "percentunit"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Pod"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down to pods",
+ "url": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 6
+ },
+ "id": 2,
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 2,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
- },
- {
- "alias": "CPU Usage",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Requests",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Requests %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "CPU Limits",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Limits %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Pod",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "pod",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
- }
- ],
- "targets": [
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", node=~\"$node\"}) by (pod) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", node=~\"$node\"}) by (pod) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Quota",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", node=~\"$node\"}) by (pod) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", node=~\"$node\"}) by (pod) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "CPU Quota",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
+ "transformations": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 3,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
- {
- "alias": "max capacity",
- "color": "#F2495C",
- "dashes": true,
- "fill": 0,
- "hiddenSeries": true,
- "hideTooltip": true,
- "legend": true,
- "linewidth": 2,
- "stack": false
- }
- ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(kube_node_status_capacity{cluster=\"$cluster\", node=~\"$node\", resource=\"memory\"})",
- "format": "time_series",
- "legendFormat": "max capacity",
- "legendLink": null
+ "id": "joinByField",
+ "options": {
+ "byField": "pod",
+ "mode": "outer"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true
},
- {
- "expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\", container!=\"\"}) by (pod)",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
+ "renameByName": {
+ "Value #A": "CPU Usage",
+ "Value #B": "CPU Requests",
+ "Value #C": "CPU Requests %",
+ "Value #D": "CPU Limits",
+ "Value #E": "CPU Limits %",
+ "pod": "Pod"
}
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory Usage (w/o cache)",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ }
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Memory Usage",
- "titleSize": "h6"
+ "type": "table"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "mode": "normal"
+ }
+ },
+ "unit": "bytes"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "max capacity"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ },
+ {
+ "id": "custom.stacking",
+ "value": {
+ "mode": "none"
+ }
+ },
+ {
+ "id": "custom.hideFrom",
+ "value": {
+ "legend": false,
+ "tooltip": true,
+ "viz": false
+ }
+ },
+ {
+ "id": "custom.lineStyle",
+ "value": {
+ "dash": [
+ 10,
+ 10
+ ],
+ "fill": "dash"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 12
+ },
+ "id": 3,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 4,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
- },
- {
- "alias": "Memory Usage",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Requests",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Requests %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Memory Limits",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Limits %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Memory Usage (RSS)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #F",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Usage (Cache)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #G",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Usage (Swap)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #H",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Pod",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "pod",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
- }
- ],
- "targets": [
- {
- "expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- },
- {
- "expr": "sum(node_namespace_pod_container:container_memory_rss{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "F"
- },
- {
- "expr": "sum(node_namespace_pod_container:container_memory_cache{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "G"
- },
- {
- "expr": "sum(node_namespace_pod_container:container_memory_swap{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "H"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory Quota",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "expr": "sum(kube_node_status_capacity{cluster=\"$cluster\", node=~\"$node\", resource=\"memory\"})",
+ "legendFormat": "max capacity"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\", container!=\"\"}) by (pod)",
+ "legendFormat": "{{pod}}"
+ }
+ ],
+ "title": "Memory Usage (w/o cache)",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "bytes"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/%/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "percentunit"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Pod"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down to pods",
+ "url": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 18
+ },
+ "id": 4,
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(node_namespace_pod_container:container_memory_rss{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(node_namespace_pod_container:container_memory_cache{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(node_namespace_pod_container:container_memory_swap{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "Memory Quota",
- "titleSize": "h6"
+ "transformations": [
+ {
+ "id": "joinByField",
+ "options": {
+ "byField": "pod",
+ "mode": "outer"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "Time 6": true,
+ "Time 7": true,
+ "Time 8": true
+ },
+ "renameByName": {
+ "Value #A": "Memory Usage",
+ "Value #B": "Memory Requests",
+ "Value #C": "Memory Requests %",
+ "Value #D": "Memory Limits",
+ "Value #E": "Memory Limits %",
+ "Value #F": "Memory Usage (RSS)",
+ "Value #G": "Memory Usage (Cache)",
+ "Value #H": "Memory Usage (Swap)",
+ "pod": "Pod"
+ }
+ }
+ }
+ ],
+ "type": "table"
}
],
- "schemaVersion": 14,
- "style": "dark",
+ "refresh": "10s",
+ "schemaVersion": 39,
"tags": [
"kubernetes"
],
@@ -743,63 +504,42 @@
"list": [
{
"current": {
+ "selected": true,
"text": "default",
"value": "default"
},
"hide": 0,
"label": "Data source",
"name": "datasource",
- "options": [ ],
"query": "prometheus",
- "refresh": 1,
"regex": "",
"type": "datasource"
},
{
- "allValue": null,
- "current": {
- "text": "",
- "value": ""
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
"hide": 2,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "cluster",
"name": "cluster",
- "options": [ ],
"query": "label_values(up{job=\"kube-state-metrics\"}, cluster)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": null,
- "current": {
- "text": "",
- "value": ""
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
"hide": 0,
- "includeAll": false,
- "label": null,
+ "label": "node",
"multi": true,
"name": "node",
- "options": [ ],
"query": "label_values(kube_node_info{cluster=\"$cluster\"}, node)",
"refresh": 2,
- "regex": "",
- "sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
}
]
},
@@ -807,33 +547,7 @@
"from": "now-1h",
"to": "now"
},
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
"timezone": "UTC",
"title": "Compute Resources / Node (Pods)",
- "uid": "200ac8fdbfbb74b39aff88118e4d1c2c",
- "version": 0
+ "uid": "200ac8fdbfbb74b39aff88118e4d1c2c"
}
diff --git a/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-pod.json b/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-pod.json
index 3bc6dc71..c0f1670b 100644
--- a/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-pod.json
+++ b/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-pod.json
@@ -1,1929 +1,1295 @@
{
- "annotations": {
- "list": [ ]
- },
- "editable": true,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "links": [ ],
- "refresh": "10s",
- "rows": [
+ "editable": false,
+ "panels": [
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ }
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "B"
+ },
+ "properties": [
+ {
+ "id": "custom.lineStyle",
+ "value": {
+ "fill": "dash"
+ }
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 2
+ },
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "C"
+ },
+ "properties": [
+ {
+ "id": "custom.lineStyle",
+ "value": {
+ "fill": "dash"
+ }
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 2
+ },
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "orange",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 1,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 1,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
- {
- "alias": "requests",
- "color": "#F2495C",
- "fill": 0,
- "hideTooltip": true,
- "legend": true,
- "linewidth": 2,
- "stack": false
- },
- {
- "alias": "limits",
- "color": "#FF9830",
- "fill": 0,
- "hideTooltip": true,
- "legend": true,
- "linewidth": 2,
- "stack": false
- }
- ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{namespace=\"$namespace\", pod=\"$pod\", cluster=\"$cluster\"}) by (container)",
- "format": "time_series",
- "legendFormat": "{{container}}",
- "legendLink": null
- },
- {
- "expr": "sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"cpu\"}\n)\n",
- "format": "time_series",
- "legendFormat": "requests",
- "legendLink": null
- },
- {
- "expr": "sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"cpu\"}\n)\n",
- "format": "time_series",
- "legendFormat": "limits",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Usage",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{namespace=\"$namespace\", pod=\"$pod\", cluster=\"$cluster\", container!=\"\"}) by (container)",
+ "legendFormat": "__auto"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"cpu\"}\n)\n",
+ "legendFormat": "requests"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"cpu\"}\n)\n",
+ "legendFormat": "limits"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "CPU Usage",
- "titleSize": "h6"
+ "type": "timeseries"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 2,
- "legend": {
- "avg": false,
- "current": true,
- "max": true,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(increase(container_cpu_cfs_throttled_periods_total{job=\"kubelet\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", cluster=\"$cluster\"}[$__rate_interval])) by (container) /sum(increase(container_cpu_cfs_periods_total{job=\"kubelet\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", cluster=\"$cluster\"}[$__rate_interval])) by (container)",
- "format": "time_series",
- "legendFormat": "{{container}}",
- "legendLink": null
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "axisColorMode": "thresholds",
+ "axisSoftMax": 1,
+ "axisSoftMin": 0,
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true,
+ "thresholdsStyle": {
+ "mode": "dashed+area"
}
- ],
- "thresholds": [
- {
- "colorMode": "critical",
- "fill": true,
- "line": true,
- "op": "gt",
- "value": 0.25,
- "yaxis": "left"
- }
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Throttling",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "percentunit",
- "label": null,
- "logBase": 1,
- "max": 1,
- "min": 0,
- "show": true
+ "unit": "percentunit"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "A"
},
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "properties": [
+ {
+ "id": "thresholds",
+ "value": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 0.25
+ }
+ ]
+ }
+ },
+ {
+ "id": "color",
+ "value": {
+ "mode": "thresholds",
+ "seriesBy": "lastNotNull"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 7
+ },
+ "id": 2,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(increase(container_cpu_cfs_throttled_periods_total{job=\"kubelet\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", cluster=\"$cluster\"}[$__rate_interval])) by (container) /sum(increase(container_cpu_cfs_periods_total{job=\"kubelet\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", cluster=\"$cluster\"}[$__rate_interval])) by (container)",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "CPU Throttling",
- "titleSize": "h6"
+ "type": "timeseries"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/%/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "percentunit"
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 14
+ },
+ "id": 3,
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 3,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
- },
- {
- "alias": "CPU Usage",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Requests",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Requests %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "CPU Limits",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Limits %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Container",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "container",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
- }
- ],
- "targets": [
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Quota",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"}) by (container)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"}) by (container)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"}) by (container) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"}) by (container)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"}) by (container)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"}) by (container) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"}) by (container)",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "CPU Quota",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
+ "transformations": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 4,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
- {
- "alias": "requests",
- "color": "#F2495C",
- "dashes": true,
- "fill": 0,
- "hideTooltip": true,
- "legend": true,
- "linewidth": 2,
- "stack": false
+ "id": "joinByField",
+ "options": {
+ "byField": "container",
+ "mode": "outer"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true
},
- {
- "alias": "limits",
- "color": "#FF9830",
- "dashes": true,
- "fill": 0,
- "hideTooltip": true,
- "legend": true,
- "linewidth": 2,
- "stack": false
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Value #A": 6,
+ "Value #B": 7,
+ "Value #C": 8,
+ "Value #D": 9,
+ "Value #E": 10,
+ "container": 5
+ },
+ "renameByName": {
+ "Value #A": "CPU Usage",
+ "Value #B": "CPU Requests",
+ "Value #C": "CPU Requests %",
+ "Value #D": "CPU Limits",
+ "Value #E": "CPU Limits %",
+ "container": "Container"
}
- ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", image!=\"\"}) by (container)",
- "format": "time_series",
- "legendFormat": "{{container}}",
- "legendLink": null
- },
- {
- "expr": "sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"memory\"}\n)\n",
- "format": "time_series",
- "legendFormat": "requests",
- "legendLink": null
- },
- {
- "expr": "sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"memory\"}\n)\n",
- "format": "time_series",
- "legendFormat": "limits",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory Usage (WSS)",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ }
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Memory Usage",
- "titleSize": "h6"
+ "type": "table"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "bytes"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "B"
+ },
+ "properties": [
+ {
+ "id": "custom.lineStyle",
+ "value": {
+ "fill": "dash"
+ }
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 2
+ },
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "C"
+ },
+ "properties": [
+ {
+ "id": "custom.lineStyle",
+ "value": {
+ "fill": "dash"
+ }
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 2
+ },
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "orange",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 21
+ },
+ "id": 4,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 5,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
- },
- {
- "alias": "Memory Usage (WSS)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Requests",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Requests %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Memory Limits",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Limits %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Memory Usage (RSS)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #F",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Usage (Cache)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #G",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Usage (Swap)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #H",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Container",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "container",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
- }
- ],
- "targets": [
- {
- "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", image!=\"\"}) by (container)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", image!=\"\"}) by (container) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", image!=\"\"}) by (container) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- },
- {
- "expr": "sum(container_memory_rss{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container != \"\", container != \"POD\"}) by (container)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "F"
- },
- {
- "expr": "sum(container_memory_cache{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container != \"\", container != \"POD\"}) by (container)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "G"
- },
- {
- "expr": "sum(container_memory_swap{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container != \"\", container != \"POD\"}) by (container)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "H"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory Quota",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", image!=\"\"}) by (container)",
+ "legendFormat": "__auto"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"memory\"}\n)\n",
+ "legendFormat": "requests"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"memory\"}\n)\n",
+ "legendFormat": "limits"
+ }
+ ],
+ "title": "Memory Usage (WSS)",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "bytes"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/%/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "percentunit"
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 28
+ },
+ "id": 5,
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", image!=\"\"}) by (container)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", image!=\"\"}) by (container) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", image!=\"\"}) by (container) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(container_memory_rss{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container != \"\", container != \"POD\"}) by (container)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(container_memory_cache{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container != \"\", container != \"POD\"}) by (container)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(container_memory_swap{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container != \"\", container != \"POD\"}) by (container)",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "Memory Quota",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
+ "transformations": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 6,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Receive Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "id": "joinByField",
+ "options": {
+ "byField": "container",
+ "mode": "outer"
+ }
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 7,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Transmit Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "Time 6": true,
+ "Time 7": true,
+ "Time 8": true
},
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Time 6": 5,
+ "Time 7": 6,
+ "Time 8": 7,
+ "Value #A": 9,
+ "Value #B": 10,
+ "Value #C": 11,
+ "Value #D": 12,
+ "Value #E": 13,
+ "Value #F": 14,
+ "Value #G": 15,
+ "Value #H": 16,
+ "container": 8
+ },
+ "renameByName": {
+ "Value #A": "Memory Usage",
+ "Value #B": "Memory Requests",
+ "Value #C": "Memory Requests %",
+ "Value #D": "Memory Limits",
+ "Value #E": "Memory Limits %",
+ "Value #F": "Memory Usage (RSS)",
+ "Value #G": "Memory Usage (Cache)",
+ "Value #H": "Memory Usage (Swap)",
+ "container": "Container"
}
- ]
+ }
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Bandwidth",
- "titleSize": "h6"
+ "type": "table"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 8,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 35
+ },
+ "id": 6,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "sum(irate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Receive Bandwidth",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 35
+ },
+ "id": 7,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Transmit Bandwidth",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 42
+ },
+ "id": 8,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Received Packets",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 42
+ },
+ "id": 9,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Transmitted Packets",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 49
+ },
+ "id": 10,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Received Packets Dropped",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 49
+ },
+ "id": 11,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Transmitted Packets Dropped",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "iops"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 56
+ },
+ "id": 12,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "ceil(sum by(pod) (rate(container_fs_reads_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])))",
+ "legendFormat": "Reads"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 9,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "ceil(sum by(pod) (rate(container_fs_writes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\",namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])))",
+ "legendFormat": "Writes"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Rate of Packets",
- "titleSize": "h6"
+ "title": "IOPS (Pod)",
+ "type": "timeseries"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 10,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 56
+ },
+ "id": 13,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum by(pod) (rate(container_fs_reads_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))",
+ "legendFormat": "Reads"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 11,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum by(pod) (rate(container_fs_writes_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))",
+ "legendFormat": "Writes"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Rate of Packets Dropped",
- "titleSize": "h6"
+ "title": "ThroughPut (Pod)",
+ "type": "timeseries"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "decimals": -1,
- "fill": 10,
- "id": 12,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "ceil(sum by(pod) (rate(container_fs_reads_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])))",
- "format": "time_series",
- "legendFormat": "Reads",
- "legendLink": null
- },
- {
- "expr": "ceil(sum by(pod) (rate(container_fs_writes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\",namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])))",
- "format": "time_series",
- "legendFormat": "Writes",
- "legendLink": null
- }
+ "unit": "iops"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 63
+ },
+ "id": 14,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "IOPS",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "ceil(sum by(container) (rate(container_fs_reads_total{job=\"kubelet\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"kubelet\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval])))",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "IOPS (Containers)",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 63
+ },
+ "id": 15,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by(container) (rate(container_fs_reads_bytes_total{job=\"kubelet\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"kubelet\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "ThroughPut (Containers)",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/IOPS/"
},
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "properties": [
+ {
+ "id": "unit",
+ "value": "iops"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Throughput/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "Bps"
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 70
+ },
+ "id": 16,
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by(container) (rate(container_fs_reads_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 13,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum by(pod) (rate(container_fs_reads_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))",
- "format": "time_series",
- "legendFormat": "Reads",
- "legendLink": null
- },
- {
- "expr": "sum by(pod) (rate(container_fs_writes_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))",
- "format": "time_series",
- "legendFormat": "Writes",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "ThroughPut",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Storage IO - Distribution(Pod - Read & Writes)",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "decimals": -1,
- "fill": 10,
- "id": 14,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "ceil(sum by(container) (rate(container_fs_reads_total{job=\"kubelet\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"kubelet\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval])))",
- "format": "time_series",
- "legendFormat": "{{container}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "IOPS(Reads+Writes)",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum by(container) (rate(container_fs_writes_total{job=\"kubelet\",device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 15,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum by(container) (rate(container_fs_reads_bytes_total{job=\"kubelet\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"kubelet\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))",
- "format": "time_series",
- "legendFormat": "{{container}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "ThroughPut(Read+Write)",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Storage IO - Distribution(Containers)",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
+ "expr": "sum by(container) (rate(container_fs_reads_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
+ },
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 16,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "sort": {
- "col": 4,
- "desc": true
+ "expr": "sum by(container) (rate(container_fs_reads_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
- },
- {
- "alias": "IOPS(Reads)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 3,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "iops"
- },
- {
- "alias": "IOPS(Writes)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 3,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "iops"
- },
- {
- "alias": "IOPS(Reads + Writes)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 3,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "iops"
- },
- {
- "alias": "Throughput(Read)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Throughput(Write)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Throughput(Read + Write)",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #F",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Container",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "container",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
- }
- ],
- "targets": [
- {
- "expr": "sum by(container) (rate(container_fs_reads_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "sum by(container) (rate(container_fs_writes_total{job=\"kubelet\",device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "sum by(container) (rate(container_fs_reads_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "sum by(container) (rate(container_fs_reads_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "sum by(container) (rate(container_fs_writes_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- },
- {
- "expr": "sum by(container) (rate(container_fs_reads_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "F"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Current Storage IO",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "expr": "sum by(container) (rate(container_fs_writes_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum by(container) (rate(container_fs_reads_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"kubelet\", device=~\"(/dev.+)|mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Storage IO - Distribution",
- "titleSize": "h6"
+ "title": "Current Storage IO",
+ "transformations": [
+ {
+ "id": "joinByField",
+ "options": {
+ "byField": "container",
+ "mode": "outer"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "Time 6": true
+ },
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Time 6": 5,
+ "Value #A": 7,
+ "Value #B": 8,
+ "Value #C": 9,
+ "Value #D": 10,
+ "Value #E": 11,
+ "Value #F": 12,
+ "container": 6
+ },
+ "renameByName": {
+ "Value #A": "IOPS(Reads)",
+ "Value #B": "IOPS(Writes)",
+ "Value #C": "IOPS(Reads + Writes)",
+ "Value #D": "Throughput(Read)",
+ "Value #E": "Throughput(Write)",
+ "Value #F": "Throughput(Read + Write)",
+ "container": "Container"
+ }
+ }
+ }
+ ],
+ "type": "table"
}
],
- "schemaVersion": 14,
- "style": "dark",
+ "refresh": "10s",
+ "schemaVersion": 39,
"tags": [
"kubernetes"
],
@@ -1931,86 +1297,55 @@
"list": [
{
"current": {
+ "selected": true,
"text": "default",
"value": "default"
},
"hide": 0,
"label": "Data source",
"name": "datasource",
- "options": [ ],
"query": "prometheus",
- "refresh": 1,
"regex": "",
"type": "datasource"
},
{
- "allValue": null,
- "current": {
- "text": "",
- "value": ""
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
"hide": 2,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "cluster",
"name": "cluster",
- "options": [ ],
"query": "label_values(up{job=\"kube-state-metrics\"}, cluster)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": null,
- "current": {
- "text": "",
- "value": ""
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
"hide": 0,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "namespace",
"name": "namespace",
- "options": [ ],
"query": "label_values(kube_namespace_status_phase{job=\"kube-state-metrics\", cluster=\"$cluster\"}, namespace)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": null,
- "current": {
- "text": "",
- "value": ""
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
"hide": 0,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "pod",
"name": "pod",
- "options": [ ],
"query": "label_values(kube_pod_info{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\"}, pod)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
}
]
},
@@ -2018,33 +1353,7 @@
"from": "now-1h",
"to": "now"
},
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
"timezone": "UTC",
"title": "Compute Resources / Pod",
- "uid": "6581e46e4e5c7ba40a07646395ef7b23",
- "version": 0
+ "uid": "6581e46e4e5c7ba40a07646395ef7b23"
}
diff --git a/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-workload.json b/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-workload.json
index 27ac2891..c2b2d8ec 100644
--- a/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-workload.json
+++ b/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-workload.json
@@ -1,1526 +1,963 @@
{
- "annotations": {
- "list": [ ]
- },
- "editable": true,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "links": [ ],
- "refresh": "10s",
- "rows": [
+ "editable": false,
+ "panels": [
{
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 1,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ }
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 1,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Usage",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "CPU Usage",
- "titleSize": "h6"
+ "type": "timeseries"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/%/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "percentunit"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Pod"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down to pods",
+ "url": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 7
+ },
+ "id": 2,
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 2,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
- },
- {
- "alias": "CPU Usage",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Requests",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Requests %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "CPU Limits",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Limits %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Pod",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
- "pattern": "pod",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
- }
- ],
- "targets": [
- {
- "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Quota",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "CPU Quota",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
+ "transformations": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 3,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory Usage",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
+ "id": "joinByField",
+ "options": {
+ "byField": "pod",
+ "mode": "outer"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true
},
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Value #A": 6,
+ "Value #B": 7,
+ "Value #C": 8,
+ "Value #D": 9,
+ "Value #E": 10,
+ "pod": 5
+ },
+ "renameByName": {
+ "Value #A": "CPU Usage",
+ "Value #B": "CPU Requests",
+ "Value #C": "CPU Requests %",
+ "Value #D": "CPU Limits",
+ "Value #E": "CPU Limits %",
+ "pod": "Pod"
}
- ]
+ }
+ }
+ ],
+ "type": "table"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "bytes"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 14
+ },
+ "id": 3,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "Memory Usage",
- "titleSize": "h6"
+ "type": "timeseries"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "bytes"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/%/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "percentunit"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Pod"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down to pods",
+ "url": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 21
+ },
+ "id": 4,
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 4,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
- },
- {
- "alias": "Memory Usage",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Requests",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Requests %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Memory Limits",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Limits %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Pod",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
- "pattern": "pod",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
- }
- ],
- "targets": [
- {
- "expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory Quota",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=~\"$type\"}\n) by (pod)\n",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "Memory Quota",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
+ "transformations": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 5,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
+ "id": "joinByField",
+ "options": {
+ "byField": "pod",
+ "mode": "outer"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true
},
- {
- "alias": "Current Receive Bandwidth",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Value #A": 9,
+ "Value #B": 10,
+ "Value #C": 11,
+ "Value #D": 12,
+ "Value #E": 13,
+ "pod": 8
},
- {
- "alias": "Current Transmit Bandwidth",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Rate of Received Packets",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Transmitted Packets",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Received Packets Dropped",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Transmitted Packets Dropped",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #F",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Pod",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
- "pattern": "pod",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
+ "renameByName": {
+ "Value #A": "Memory Usage",
+ "Value #B": "Memory Requests",
+ "Value #C": "Memory Requests %",
+ "Value #D": "Memory Limits",
+ "Value #E": "Memory Limits %",
+ "pod": "Pod"
}
- ],
- "targets": [
- {
- "expr": "(sum(irate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "(sum(irate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "(sum(irate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "(sum(irate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "(sum(irate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- },
- {
- "expr": "(sum(irate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "F"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Current Network Usage",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ }
+ }
+ ],
+ "type": "table"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Bandwidth/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "Bps"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Packets/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "pps"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Pod"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down to pods",
+ "url": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 28
+ },
+ "id": 5,
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "Current Network Usage",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
+ "transformations": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 6,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "(sum(irate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Receive Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "id": "joinByField",
+ "options": {
+ "byField": "pod",
+ "mode": "outer"
+ }
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 7,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "(sum(irate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Transmit Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "Time 6": true
},
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Time 6": 5,
+ "Value #A": 7,
+ "Value #B": 8,
+ "Value #C": 9,
+ "Value #D": 10,
+ "Value #E": 11,
+ "Value #F": 12,
+ "pod": 6
+ },
+ "renameByName": {
+ "Value #A": "Current Receive Bandwidth",
+ "Value #B": "Current Transmit Bandwidth",
+ "Value #C": "Rate of Received Packets",
+ "Value #D": "Rate of Transmitted Packets",
+ "Value #E": "Rate of Received Packets Dropped",
+ "Value #F": "Rate of Transmitted Packets Dropped",
+ "pod": "Pod"
}
- ]
+ }
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Bandwidth",
- "titleSize": "h6"
+ "type": "table"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 8,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "(avg(irate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 35
+ },
+ "id": 6,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Average Container Bandwidth by Pod: Received",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 9,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "(avg(irate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Average Container Bandwidth by Pod: Transmitted",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "(sum(rate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Average Container Bandwidth by Pod",
- "titleSize": "h6"
+ "title": "Receive Bandwidth",
+ "type": "timeseries"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 10,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "(sum(irate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 35
+ },
+ "id": 7,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 11,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "(sum(irate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "(sum(rate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Rate of Packets",
- "titleSize": "h6"
+ "title": "Transmit Bandwidth",
+ "type": "timeseries"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 12,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "(sum(irate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 42
+ },
+ "id": 8,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 13,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "(sum(irate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "legendFormat": "{{pod}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "(avg(rate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Rate of Packets Dropped",
- "titleSize": "h6"
+ "title": "Average Container Bandwidth by Pod: Received",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 42
+ },
+ "id": 9,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(avg(rate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Average Container Bandwidth by Pod: Transmitted",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 49
+ },
+ "id": 10,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Received Packets",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 49
+ },
+ "id": 11,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Transmitted Packets",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 56
+ },
+ "id": 12,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Received Packets Dropped",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 56
+ },
+ "id": 13,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Transmitted Packets Dropped",
+ "type": "timeseries"
}
],
- "schemaVersion": 14,
- "style": "dark",
+ "refresh": "10s",
+ "schemaVersion": 39,
"tags": [
"kubernetes"
],
@@ -1528,109 +965,69 @@
"list": [
{
"current": {
+ "selected": true,
"text": "default",
"value": "default"
},
"hide": 0,
"label": "Data source",
"name": "datasource",
- "options": [ ],
"query": "prometheus",
- "refresh": 1,
"regex": "",
"type": "datasource"
},
{
- "allValue": null,
- "current": {
- "text": "",
- "value": ""
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
"hide": 2,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "cluster",
"name": "cluster",
- "options": [ ],
"query": "label_values(up{job=\"kube-state-metrics\"}, cluster)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": null,
- "current": {
- "text": "",
- "value": ""
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
"hide": 0,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "namespace",
"name": "namespace",
- "options": [ ],
"query": "label_values(kube_namespace_status_phase{job=\"kube-state-metrics\", cluster=\"$cluster\"}, namespace)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": null,
- "current": {
- "text": "",
- "value": ""
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
"hide": 0,
"includeAll": true,
- "label": null,
- "multi": false,
+ "label": "workload_type",
"name": "type",
- "options": [ ],
"query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\"}, workload_type)",
"refresh": 2,
- "regex": "",
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "sort": 1,
+ "type": "query"
},
{
- "allValue": null,
- "current": {
- "text": "",
- "value": ""
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
"hide": 0,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "workload",
"name": "workload",
- "options": [ ],
"query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}, workload)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
}
]
},
@@ -1638,33 +1035,7 @@
"from": "now-1h",
"to": "now"
},
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
"timezone": "UTC",
"title": "Compute Resources / Workload",
- "uid": "a164a7f0339f99e89cea5cb47e9be617",
- "version": 0
+ "uid": "a164a7f0339f99e89cea5cb47e9be617"
}
diff --git a/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-workloads-namespace.json b/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-workloads-namespace.json
index b83b0d65..ae320ff2 100644
--- a/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-workloads-namespace.json
+++ b/charts/kubezero-metrics/jsonnet/dashboards/k8s-resources-workloads-namespace.json
@@ -1,1685 +1,1173 @@
{
- "annotations": {
- "list": [ ]
- },
- "editable": true,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "links": [ ],
- "refresh": "10s",
- "rows": [
+ "editable": false,
+ "panels": [
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ }
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "B"
+ },
+ "properties": [
+ {
+ "id": "custom.lineStyle",
+ "value": {
+ "fill": "dash"
+ }
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 2
+ },
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "C"
+ },
+ "properties": [
+ {
+ "id": "custom.lineStyle",
+ "value": {
+ "fill": "dash"
+ }
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 2
+ },
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "orange",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 1,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 1,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
- {
- "alias": "quota - requests",
- "color": "#F2495C",
- "dashes": true,
- "fill": 0,
- "hiddenSeries": true,
- "hideTooltip": true,
- "legend": true,
- "linewidth": 2,
- "stack": false
- },
- {
- "alias": "quota - limits",
- "color": "#FF9830",
- "dashes": true,
- "fill": 0,
- "hiddenSeries": true,
- "hideTooltip": true,
- "legend": true,
- "linewidth": 2,
- "stack": false
- }
- ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
- "format": "time_series",
- "legendFormat": "{{workload}} - {{workload_type}}",
- "legendLink": null
- },
- {
- "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.cpu\"})",
- "format": "time_series",
- "legendFormat": "quota - requests",
- "legendLink": null
- },
- {
- "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.cpu\"})",
- "format": "time_series",
- "legendFormat": "quota - limits",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Usage",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
+ "legendFormat": "{{workload}} - {{workload_type}}"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.cpu\"})",
+ "legendFormat": "quota - requests"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.cpu\"})",
+ "legendFormat": "quota - limits"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "CPU Usage",
- "titleSize": "h6"
+ "type": "timeseries"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/%/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "percentunit"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Workload"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down to workloads",
+ "url": "/d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-type=${__data.fields.Type}&var-workload=${__data.fields.Workload}"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Running Pods"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "none"
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 7
+ },
+ "id": 2,
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 2,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
- },
- {
- "alias": "Running Pods",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 0,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Usage",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Requests",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Requests %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "CPU Limits",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "CPU Limits %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #F",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Workload",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "/d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$__cell_2",
- "pattern": "workload",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "Workload Type",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "workload_type",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
- }
- ],
- "targets": [
- {
- "expr": "count(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload, workload_type)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- },
- {
- "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "F"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Quota",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "expr": "count(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload, workload_type)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "CPU Quota",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
+ "transformations": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 3,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
- {
- "alias": "quota - requests",
- "color": "#F2495C",
- "dashes": true,
- "fill": 0,
- "hiddenSeries": true,
- "hideTooltip": true,
- "legend": true,
- "linewidth": 2,
- "stack": false
+ "id": "joinByField",
+ "options": {
+ "byField": "workload",
+ "mode": "outer"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "Time 6": true,
+ "workload_type 2": true,
+ "workload_type 3": true,
+ "workload_type 4": true,
+ "workload_type 5": true,
+ "workload_type 6": true
},
- {
- "alias": "quota - limits",
- "color": "#FF9830",
- "dashes": true,
- "fill": 0,
- "hiddenSeries": true,
- "hideTooltip": true,
- "legend": true,
- "linewidth": 2,
- "stack": false
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Time 6": 5,
+ "Value #A": 8,
+ "Value #B": 9,
+ "Value #C": 10,
+ "Value #D": 11,
+ "Value #E": 12,
+ "Value #F": 13,
+ "workload": 6,
+ "workload_type 1": 7,
+ "workload_type 2": 14,
+ "workload_type 3": 15,
+ "workload_type 4": 16,
+ "workload_type 5": 17,
+ "workload_type 6": 18
+ },
+ "renameByName": {
+ "Value #A": "Running Pods",
+ "Value #B": "CPU Usage",
+ "Value #C": "CPU Requests",
+ "Value #D": "CPU Requests %",
+ "Value #E": "CPU Limits",
+ "Value #F": "CPU Limits %",
+ "workload": "Workload",
+ "workload_type 1": "Type"
}
- ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(\n container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
- "format": "time_series",
- "legendFormat": "{{workload}} - {{workload_type}}",
- "legendLink": null
- },
- {
- "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.memory\"})",
- "format": "time_series",
- "legendFormat": "quota - requests",
- "legendLink": null
- },
- {
- "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.memory\"})",
- "format": "time_series",
- "legendFormat": "quota - limits",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory Usage",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ }
+ }
+ ],
+ "type": "table"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "bytes"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "B"
+ },
+ "properties": [
+ {
+ "id": "custom.lineStyle",
+ "value": {
+ "fill": "dash"
+ }
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 2
+ },
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "red",
+ "mode": "fixed"
+ }
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "C"
+ },
+ "properties": [
+ {
+ "id": "custom.lineStyle",
+ "value": {
+ "fill": "dash"
+ }
+ },
+ {
+ "id": "custom.lineWidth",
+ "value": 2
+ },
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "orange",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 14
+ },
+ "id": 3,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(\n container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
+ "legendFormat": "{{workload}} - {{workload_type}}"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.memory\"})",
+ "legendFormat": "quota - requests"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.memory\"})",
+ "legendFormat": "quota - limits"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "Memory Usage",
- "titleSize": "h6"
+ "type": "timeseries"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "bytes"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/%/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "percentunit"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Workload"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down to workloads",
+ "url": "/d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-type=${__data.fields.Type}&var-workload=${__data.fields.Workload}"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Running Pods"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "none"
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 21
+ },
+ "id": 4,
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 4,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
- },
- {
- "alias": "Running Pods",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 0,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "Memory Usage",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Requests",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Requests %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Memory Limits",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "bytes"
- },
- {
- "alias": "Memory Limits %",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #F",
- "thresholds": [ ],
- "type": "number",
- "unit": "percentunit"
- },
- {
- "alias": "Workload",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "/d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$__cell_2",
- "pattern": "workload",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "Workload Type",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "workload_type",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
- }
- ],
- "targets": [
- {
- "expr": "count(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload, workload_type)",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "sum(\n container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "sum(\n container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- },
- {
- "expr": "sum(\n container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "F"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory Quota",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "expr": "count(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload, workload_type)",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "sum(\n container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(\n container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(\n container_memory_working_set_bytes{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}\n) by (workload, workload_type)\n",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "Memory Quota",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
+ "transformations": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "id": 5,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "hidden"
+ "id": "joinByField",
+ "options": {
+ "byField": "workload",
+ "mode": "outer"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "Time 6": true,
+ "workload_type 2": true,
+ "workload_type 3": true,
+ "workload_type 4": true,
+ "workload_type 5": true,
+ "workload_type 6": true
},
- {
- "alias": "Current Receive Bandwidth",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Time 6": 5,
+ "Value #A": 8,
+ "Value #B": 9,
+ "Value #C": 10,
+ "Value #D": 11,
+ "Value #E": 12,
+ "Value #F": 13,
+ "workload": 6,
+ "workload_type 1": 7,
+ "workload_type 2": 14,
+ "workload_type 3": 15,
+ "workload_type 4": 16,
+ "workload_type 5": 17,
+ "workload_type 6": 18
},
- {
- "alias": "Current Transmit Bandwidth",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Rate of Received Packets",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Transmitted Packets",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Received Packets Dropped",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Transmitted Packets Dropped",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #F",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Workload",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": true,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down to pods",
- "linkUrl": "/d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$type",
- "pattern": "workload",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "Workload Type",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTargetBlank": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "workload_type",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "pattern": "/.*/",
- "thresholds": [ ],
- "type": "string",
- "unit": "short"
+ "renameByName": {
+ "Value #A": "Running Pods",
+ "Value #B": "Memory Usage",
+ "Value #C": "Memory Requests",
+ "Value #D": "Memory Requests %",
+ "Value #E": "Memory Limits",
+ "Value #F": "Memory Limits %",
+ "workload": "Workload",
+ "workload_type 1": "Type"
}
- ],
- "targets": [
- {
- "expr": "(sum(irate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "(sum(irate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "(sum(irate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "C"
- },
- {
- "expr": "(sum(irate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "D"
- },
- {
- "expr": "(sum(irate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "E"
- },
- {
- "expr": "(sum(irate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "table",
- "instant": true,
- "legendFormat": "",
- "refId": "F"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Current Network Usage",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "transform": "table",
- "type": "table",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ }
+ }
+ ],
+ "type": "table"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Bandwidth/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "Bps"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Packets/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "pps"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Workload"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down to workloads",
+ "url": "/d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-type=${__data.fields.Type}&var-workload=${__data.fields.Workload}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 28
+ },
+ "id": 5,
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload))\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload))\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload))\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload))\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload))\n",
+ "format": "table",
+ "instant": true
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload))\n",
+ "format": "table",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
"title": "Current Network Usage",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
+ "transformations": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 6,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "(sum(irate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "legendFormat": "{{workload}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Receive Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "id": "joinByField",
+ "options": {
+ "byField": "workload",
+ "mode": "outer"
+ }
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 7,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "(sum(irate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "legendFormat": "{{workload}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Transmit Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "Time 6": true
},
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Time 6": 5,
+ "Value #A": 7,
+ "Value #B": 8,
+ "Value #C": 9,
+ "Value #D": 10,
+ "Value #E": 11,
+ "Value #F": 12,
+ "workload": 6
+ },
+ "renameByName": {
+ "Value #A": "Current Receive Bandwidth",
+ "Value #B": "Current Transmit Bandwidth",
+ "Value #C": "Rate of Received Packets",
+ "Value #D": "Rate of Transmitted Packets",
+ "Value #E": "Rate of Received Packets Dropped",
+ "Value #F": "Rate of Transmitted Packets Dropped",
+ "workload": "Workload"
}
- ]
+ }
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Bandwidth",
- "titleSize": "h6"
+ "type": "table"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 8,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "(avg(irate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "legendFormat": "{{workload}}",
- "legendLink": null
- }
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 35
+ },
+ "id": 6,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Average Container Bandwidth by Workload: Received",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 9,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "(avg(irate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "legendFormat": "{{workload}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Average Container Bandwidth by Workload: Transmitted",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "(sum(rate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Average Container Bandwidth by Workload",
- "titleSize": "h6"
+ "title": "Receive Bandwidth",
+ "type": "timeseries"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 10,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "(sum(irate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "legendFormat": "{{workload}}",
- "legendLink": null
- }
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 35
+ },
+ "id": 7,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 11,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "(sum(irate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "legendFormat": "{{workload}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "(sum(rate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Rate of Packets",
- "titleSize": "h6"
+ "title": "Transmit Bandwidth",
+ "type": "timeseries"
},
{
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 12,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "(sum(irate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "legendFormat": "{{workload}}",
- "legendLink": null
- }
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 42
+ },
+ "id": 8,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 10,
- "id": 13,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 0,
- "links": [ ],
- "nullPointMode": "null as zero",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "(sum(irate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "legendFormat": "{{workload}}",
- "legendLink": null
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ]
+ "expr": "(avg(rate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Rate of Packets Dropped",
- "titleSize": "h6"
+ "title": "Average Container Bandwidth by Workload: Received",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 42
+ },
+ "id": 9,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(avg(rate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Average Container Bandwidth by Workload: Transmitted",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 49
+ },
+ "id": 10,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Received Packets",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 49
+ },
+ "id": 11,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Transmitted Packets",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 56
+ },
+ "id": 12,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Received Packets Dropped",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 56
+ },
+ "id": 13,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(sum(rate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Transmitted Packets Dropped",
+ "type": "timeseries"
}
],
- "schemaVersion": 14,
- "style": "dark",
+ "refresh": "10s",
+ "schemaVersion": 39,
"tags": [
"kubernetes"
],
@@ -1687,91 +1175,56 @@
"list": [
{
"current": {
+ "selected": true,
"text": "default",
"value": "default"
},
"hide": 0,
"label": "Data source",
"name": "datasource",
- "options": [ ],
"query": "prometheus",
- "refresh": 1,
"regex": "",
"type": "datasource"
},
{
- "allValue": null,
- "current": {
- "text": "",
- "value": ""
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
"hide": 2,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "cluster",
"name": "cluster",
- "options": [ ],
"query": "label_values(up{job=\"kube-state-metrics\"}, cluster)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": null,
- "current": {
- "text": "",
- "value": ""
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
"hide": 0,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "namespace",
"name": "namespace",
- "options": [ ],
- "query": "label_values(kube_pod_info{job=\"kube-state-metrics\", cluster=\"$cluster\"}, namespace)",
+ "query": "label_values(kube_namespace_status_phase{job=\"kube-state-metrics\", cluster=\"$cluster\"}, namespace)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": null,
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
- "current": {
- "text": "",
- "value": ""
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
- "definition": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\"}, workload_type)",
"hide": 0,
"includeAll": true,
- "label": null,
- "multi": false,
+ "label": "workload_type",
"name": "type",
- "options": [ ],
"query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\"}, workload_type)",
"refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "sort": 1,
+ "type": "query"
}
]
},
@@ -1779,33 +1232,7 @@
"from": "now-1h",
"to": "now"
},
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
"timezone": "UTC",
"title": "Compute Resources / Namespace (Workloads)",
- "uid": "a87fb0d919ec0ea5f6543124e16c42a5",
- "version": 0
+ "uid": "a87fb0d919ec0ea5f6543124e16c42a5"
}
diff --git a/charts/kubezero-metrics/jsonnet/dashboards/kubelet.json b/charts/kubezero-metrics/jsonnet/dashboards/kubelet.json
index 644dcbd1..e7fb4bf2 100644
--- a/charts/kubezero-metrics/jsonnet/dashboards/kubelet.json
+++ b/charts/kubezero-metrics/jsonnet/dashboards/kubelet.json
@@ -1,26 +1,13 @@
{
- "__inputs": [ ],
- "__requires": [ ],
- "annotations": {
- "list": [ ]
- },
"editable": false,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "id": null,
- "links": [ ],
"panels": [
{
- "datasource": "$datasource",
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
"fieldConfig": {
"defaults": {
- "links": [ ],
- "mappings": [ ],
- "thresholds": {
- "mode": "absolute",
- "steps": [ ]
- },
"unit": "none"
}
},
@@ -30,46 +17,32 @@
"x": 0,
"y": 0
},
- "id": 2,
- "links": [ ],
+ "id": 1,
+ "interval": "1m",
"options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "textMode": "auto"
+ "colorMode": "none"
},
- "pluginVersion": "7",
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "sum(kubelet_node_name{cluster=\"$cluster\", job=\"kubelet\"})",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "A"
+ "instant": true
}
],
"title": "Running Kubelets",
- "transparent": false,
"type": "stat"
},
{
- "datasource": "$datasource",
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
"fieldConfig": {
"defaults": {
- "links": [ ],
- "mappings": [ ],
- "thresholds": {
- "mode": "absolute",
- "steps": [ ]
- },
"unit": "none"
}
},
@@ -79,46 +52,32 @@
"x": 4,
"y": 0
},
- "id": 3,
- "links": [ ],
+ "id": 2,
+ "interval": "1m",
"options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "textMode": "auto"
+ "colorMode": "none"
},
- "pluginVersion": "7",
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sum(kubelet_running_pods{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"}) OR sum(kubelet_running_pod_count{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"})",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(kubelet_running_pods{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"})",
+ "instant": true
}
],
"title": "Running Pods",
- "transparent": false,
"type": "stat"
},
{
- "datasource": "$datasource",
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
"fieldConfig": {
"defaults": {
- "links": [ ],
- "mappings": [ ],
- "thresholds": {
- "mode": "absolute",
- "steps": [ ]
- },
"unit": "none"
}
},
@@ -128,46 +87,32 @@
"x": 8,
"y": 0
},
- "id": 4,
- "links": [ ],
+ "id": 3,
+ "interval": "1m",
"options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "textMode": "auto"
+ "colorMode": "none"
},
- "pluginVersion": "7",
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sum(kubelet_running_containers{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"}) OR sum(kubelet_running_container_count{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"})",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(kubelet_running_containers{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"})",
+ "instant": true
}
],
"title": "Running Containers",
- "transparent": false,
"type": "stat"
},
{
- "datasource": "$datasource",
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
"fieldConfig": {
"defaults": {
- "links": [ ],
- "mappings": [ ],
- "thresholds": {
- "mode": "absolute",
- "steps": [ ]
- },
"unit": "none"
}
},
@@ -177,46 +122,32 @@
"x": 12,
"y": 0
},
- "id": 5,
- "links": [ ],
+ "id": 4,
+ "interval": "1m",
"options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "textMode": "auto"
+ "colorMode": "none"
},
- "pluginVersion": "7",
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "sum(volume_manager_total_volumes{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\", state=\"actual_state_of_world\"})",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
+ "instant": true
}
],
"title": "Actual Volume Count",
- "transparent": false,
"type": "stat"
},
{
- "datasource": "$datasource",
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
"fieldConfig": {
"defaults": {
- "links": [ ],
- "mappings": [ ],
- "thresholds": {
- "mode": "absolute",
- "steps": [ ]
- },
"unit": "none"
}
},
@@ -226,46 +157,32 @@
"x": 16,
"y": 0
},
- "id": 6,
- "links": [ ],
+ "id": 5,
+ "interval": "1m",
"options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "textMode": "auto"
+ "colorMode": "none"
},
- "pluginVersion": "7",
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "sum(volume_manager_total_volumes{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\",state=\"desired_state_of_world\"})",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
+ "instant": true
}
],
"title": "Desired Volume Count",
- "transparent": false,
"type": "stat"
},
{
- "datasource": "$datasource",
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
"fieldConfig": {
"defaults": {
- "links": [ ],
- "mappings": [ ],
- "thresholds": {
- "mode": "absolute",
- "steps": [ ]
- },
"unit": "none"
}
},
@@ -275,1613 +192,986 @@
"x": 20,
"y": 0
},
- "id": 7,
- "links": [ ],
+ "id": 6,
+ "interval": "1m",
"options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "textMode": "auto"
+ "colorMode": "none"
},
- "pluginVersion": "7",
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "sum(rate(kubelet_node_config_error{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
+ "instant": true
}
],
"title": "Config Error Count",
- "transparent": false,
"type": "stat"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "ops"
+ }
+ },
"gridPos": {
"h": 7,
"w": 12,
"x": 0,
"y": 7
},
- "id": 8,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "id": 7,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "sum(rate(kubelet_runtime_operations_total{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[$__rate_interval])) by (operation_type, instance)",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} {{operation_type}}",
- "refId": "A"
+ "legendFormat": "{{instance}} {{operation_type}}"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Operation Rate",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "ops"
+ }
+ },
"gridPos": {
"h": 7,
"w": 12,
"x": 12,
"y": 7
},
- "id": 9,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "id": 8,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "sum(rate(kubelet_runtime_operations_errors_total{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_type)",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} {{operation_type}}",
- "refId": "A"
+ "legendFormat": "{{instance}} {{operation_type}}"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Operation Error Rate",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "s"
+ }
+ },
"gridPos": {
"h": 7,
"w": 24,
"x": 0,
"y": 14
},
- "id": 10,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "id": 9,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "histogram_quantile(0.99, sum(rate(kubelet_runtime_operations_duration_seconds_bucket{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_type, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} {{operation_type}}",
- "refId": "A"
+ "legendFormat": "{{instance}} {{operation_type}}"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Operation duration 99th quantile",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "title": "Operation Duration 99th quantile",
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "ops"
+ }
+ },
"gridPos": {
"h": 7,
"w": 12,
"x": 0,
"y": 21
},
+ "id": 10,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(kubelet_pod_start_duration_seconds_count{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[$__rate_interval])) by (instance)",
+ "legendFormat": "{{instance}} pod"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(kubelet_pod_worker_duration_seconds_count{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[$__rate_interval])) by (instance)",
+ "legendFormat": "{{instance}} worker"
+ }
+ ],
+ "title": "Pod Start Rate",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "s"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 21
+ },
"id": 11,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(rate(kubelet_pod_start_duration_seconds_count{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[$__rate_interval])) by (instance)",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} pod",
- "refId": "A"
- },
- {
- "expr": "sum(rate(kubelet_pod_worker_duration_seconds_count{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[$__rate_interval])) by (instance)",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} worker",
- "refId": "B"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Pod Start Rate",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 7,
- "w": 12,
- "x": 12,
- "y": 21
- },
- "id": 12,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "histogram_quantile(0.99, sum(rate(kubelet_pod_start_duration_seconds_bucket{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[$__rate_interval])) by (instance, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} pod",
- "refId": "A"
+ "legendFormat": "{{instance}} pod"
},
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "histogram_quantile(0.99, sum(rate(kubelet_pod_worker_duration_seconds_bucket{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[$__rate_interval])) by (instance, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} worker",
- "refId": "B"
+ "legendFormat": "{{instance}} worker"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Pod Start Duration",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "ops"
+ }
+ },
"gridPos": {
"h": 7,
"w": 12,
"x": 0,
"y": 28
},
- "id": 13,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "id": 12,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "sum(rate(storage_operation_duration_seconds_count{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_name, volume_plugin)",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} {{operation_name}} {{volume_plugin}}",
- "refId": "A"
+ "legendFormat": "{{instance}} {{operation_name}} {{volume_plugin}}"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Storage Operation Rate",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "ops"
+ }
+ },
"gridPos": {
"h": 7,
"w": 12,
"x": 12,
"y": 28
},
- "id": 14,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "id": 13,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "sum(rate(storage_operation_errors_total{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_name, volume_plugin)",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} {{operation_name}} {{volume_plugin}}",
- "refId": "A"
+ "legendFormat": "{{instance}} {{operation_name}} {{volume_plugin}}"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Storage Operation Error Rate",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "s"
+ }
+ },
"gridPos": {
"h": 7,
"w": 24,
"x": 0,
"y": 35
},
- "id": 15,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "id": 14,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "histogram_quantile(0.99, sum(rate(storage_operation_duration_seconds_bucket{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_name, volume_plugin, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} {{operation_name}} {{volume_plugin}}",
- "refId": "A"
+ "legendFormat": "{{instance}} {{operation_name}} {{volume_plugin}}"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Storage Operation Duration 99th quantile",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "ops"
+ }
+ },
"gridPos": {
"h": 7,
"w": 12,
"x": 0,
"y": 42
},
+ "id": 15,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(kubelet_cgroup_manager_duration_seconds_count{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_type)",
+ "legendFormat": "{{operation_type}}"
+ }
+ ],
+ "title": "Cgroup manager operation rate",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "s"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 42
+ },
"id": 16,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(rate(kubelet_cgroup_manager_duration_seconds_count{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_type)",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{operation_type}}",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Cgroup manager operation rate",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
+ "tooltip": {
+ "mode": "single"
}
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 7,
- "w": 12,
- "x": 12,
- "y": 42
},
- "id": 17,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "histogram_quantile(0.99, sum(rate(kubelet_cgroup_manager_duration_seconds_bucket{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_type, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} {{operation_type}}",
- "refId": "A"
+ "legendFormat": "{{instance}} {{operation_type}}"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Cgroup manager 99th quantile",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "description": "Pod lifecycle event generator",
- "fill": 1,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "ops"
+ }
+ },
"gridPos": {
"h": 7,
"w": 12,
"x": 0,
"y": 49
},
- "id": 18,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "id": 17,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "sum(rate(kubelet_pleg_relist_duration_seconds_count{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"}[$__rate_interval])) by (instance)",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
+ "legendFormat": "{{instance}}"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "PLEG relist rate",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "s"
+ }
+ },
"gridPos": {
"h": 7,
"w": 12,
"x": 12,
"y": 49
},
- "id": 19,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "id": 18,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "histogram_quantile(0.99, sum(rate(kubelet_pleg_relist_interval_seconds_bucket{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[$__rate_interval])) by (instance, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
+ "legendFormat": "{{instance}}"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "PLEG relist interval",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "s"
+ }
+ },
"gridPos": {
"h": 7,
"w": 24,
"x": 0,
"y": 56
},
- "id": 20,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "id": 19,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "histogram_quantile(0.99, sum(rate(kubelet_pleg_relist_duration_seconds_bucket{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[$__rate_interval])) by (instance, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
+ "legendFormat": "{{instance}}"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "PLEG relist duration",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "ops"
+ }
+ },
"gridPos": {
"h": 7,
"w": 24,
"x": 0,
"y": 63
},
- "id": 21,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "id": 20,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"kubelet\", instance=~\"$instance\",code=~\"2..\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "2xx",
- "refId": "A"
+ "legendFormat": "2xx"
},
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"kubelet\", instance=~\"$instance\",code=~\"3..\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "3xx",
- "refId": "B"
+ "legendFormat": "3xx"
},
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"kubelet\", instance=~\"$instance\",code=~\"4..\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "4xx",
- "refId": "C"
+ "legendFormat": "4xx"
},
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"kubelet\", instance=~\"$instance\",code=~\"5..\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "5xx",
- "refId": "D"
+ "legendFormat": "5xx"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "RPC Rate",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "title": "RPC rate",
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "s"
+ }
+ },
"gridPos": {
"h": 7,
"w": 24,
"x": 0,
"y": 70
},
- "id": 22,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "id": 21,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\",job=\"kubelet\", instance=~\"$instance\"}[$__rate_interval])) by (instance, verb, url, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}} {{verb}} {{url}}",
- "refId": "A"
+ "legendFormat": "{{instance}} {{verb}} {{url}}"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Request duration 99th quantile",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "bytes"
+ }
+ },
"gridPos": {
"h": 7,
"w": 8,
"x": 0,
"y": 77
},
- "id": 23,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "id": 22,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "process_resident_memory_bytes{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
+ "legendFormat": "{{instance}}"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Memory",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "short"
+ }
+ },
"gridPos": {
"h": 7,
"w": 8,
"x": 8,
"y": 77
},
- "id": 24,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "id": 23,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "rate(process_cpu_seconds_total{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[$__rate_interval])",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
+ "legendFormat": "{{instance}}"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "CPU usage",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "short"
+ }
+ },
"gridPos": {
"h": 7,
"w": 8,
"x": 16,
"y": 77
},
- "id": 25,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "id": 24,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"expr": "go_goroutines{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
+ "legendFormat": "{{instance}}"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Goroutines",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "type": "timeseries"
}
],
"refresh": "10s",
- "rows": [ ],
- "schemaVersion": 14,
- "style": "dark",
+ "schemaVersion": 39,
"tags": [
"kubernetes"
],
@@ -1896,51 +1186,35 @@
"hide": 0,
"label": "Data source",
"name": "datasource",
- "options": [ ],
"query": "prometheus",
- "refresh": 1,
"regex": "",
"type": "datasource"
},
{
- "allValue": null,
- "current": { },
- "datasource": "$datasource",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 2,
- "includeAll": false,
"label": "cluster",
- "multi": false,
"name": "cluster",
- "options": [ ],
"query": "label_values(up{job=\"kubelet\"}, cluster)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": null,
- "current": { },
- "datasource": "$datasource",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 0,
"includeAll": true,
"label": "instance",
- "multi": false,
"name": "instance",
- "options": [ ],
"query": "label_values(up{job=\"kubelet\",cluster=\"$cluster\"}, instance)",
"refresh": 2,
- "regex": "",
- "sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
}
]
},
@@ -1948,33 +1222,7 @@
"from": "now-1h",
"to": "now"
},
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
"timezone": "UTC",
"title": "Kubelet",
- "uid": "3138fa155d5915769fbded898ac09fd9",
- "version": 0
+ "uid": "3138fa155d5915769fbded898ac09fd9"
}
diff --git a/charts/kubezero-metrics/jsonnet/dashboards/namespace-by-pod.json b/charts/kubezero-metrics/jsonnet/dashboards/namespace-by-pod.json
index 2a79f34e..e9edb988 100644
--- a/charts/kubezero-metrics/jsonnet/dashboards/namespace-by-pod.json
+++ b/charts/kubezero-metrics/jsonnet/dashboards/namespace-by-pod.json
@@ -1,1131 +1,555 @@
{
- "__inputs": [ ],
- "__requires": [ ],
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": "-- Grafana --",
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "editable": true,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "id": null,
- "links": [ ],
+ "editable": false,
"panels": [
{
- "collapse": false,
- "collapsed": false,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "displayName": "$namespace",
+ "max": 10000000000,
+ "min": 0,
+ "thresholds": {
+ "steps": [
+ {
+ "color": "dark-green",
+ "index": 0,
+ "value": null
+ },
+ {
+ "color": "dark-yellow",
+ "index": 1,
+ "value": 5000000000
+ },
+ {
+ "color": "dark-red",
+ "index": 2,
+ "value": 7000000000
+ }
+ ]
+ },
+ "unit": "Bps"
+ }
+ },
"gridPos": {
- "h": 1,
- "w": 24,
+ "h": 9,
+ "w": 12,
"x": 0,
"y": 0
},
- "id": 2,
- "panels": [ ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Current Bandwidth",
- "titleSize": "h6",
- "type": "row"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#299c46",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": "$datasource",
- "decimals": 0,
- "format": "time_series",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 1
- },
- "height": 9,
- "id": 3,
- "interval": null,
- "links": [ ],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "minSpan": 12,
- "nullPointMode": "connected",
- "nullText": null,
- "options": {
- "fieldOptions": {
- "calcs": [
- "last"
- ],
- "defaults": {
- "max": 10000000000,
- "min": 0,
- "title": "$namespace",
- "unit": "Bps"
- },
- "mappings": [ ],
- "override": { },
- "thresholds": [
- {
- "color": "dark-green",
- "index": 0,
- "value": null
- },
- {
- "color": "dark-yellow",
- "index": 1,
- "value": 5000000000
- },
- {
- "color": "dark-red",
- "index": 2,
- "value": 7000000000
- }
- ],
- "values": false
- }
- },
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "span": 12,
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
+ "id": 1,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution]))",
- "format": "time_series",
- "instant": null,
- "intervalFactor": 1,
- "legendFormat": "",
- "refId": "A"
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
+ "legendFormat": "__auto"
}
],
- "thresholds": "",
- "timeFrom": null,
- "timeShift": null,
"title": "Current Rate of Bytes Received",
- "type": "gauge",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
+ "type": "gauge"
},
{
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#299c46",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": "$datasource",
- "decimals": 0,
- "format": "time_series",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "displayName": "$namespace",
+ "max": 10000000000,
+ "min": 0,
+ "thresholds": {
+ "steps": [
+ {
+ "color": "dark-green",
+ "index": 0,
+ "value": null
+ },
+ {
+ "color": "dark-yellow",
+ "index": 1,
+ "value": 5000000000
+ },
+ {
+ "color": "dark-red",
+ "index": 2,
+ "value": 7000000000
+ }
+ ]
+ },
+ "unit": "Bps"
+ }
},
"gridPos": {
"h": 9,
"w": 12,
"x": 12,
- "y": 1
+ "y": 0
},
- "height": 9,
- "id": 4,
- "interval": null,
- "links": [ ],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "minSpan": 12,
- "nullPointMode": "connected",
- "nullText": null,
- "options": {
- "fieldOptions": {
- "calcs": [
- "last"
- ],
- "defaults": {
- "max": 10000000000,
- "min": 0,
- "title": "$namespace",
- "unit": "Bps"
- },
- "mappings": [ ],
- "override": { },
- "thresholds": [
- {
- "color": "dark-green",
- "index": 0,
- "value": null
- },
- {
- "color": "dark-yellow",
- "index": 1,
- "value": 5000000000
- },
- {
- "color": "dark-red",
- "index": 2,
- "value": 7000000000
- }
- ],
- "values": false
- }
- },
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "span": 12,
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
+ "id": 2,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution]))",
- "format": "time_series",
- "instant": null,
- "intervalFactor": 1,
- "legendFormat": "",
- "refId": "A"
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
+ "legendFormat": "__auto"
}
],
- "thresholds": "",
- "timeFrom": null,
- "timeShift": null,
"title": "Current Rate of Bytes Transmitted",
- "type": "gauge",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
+ "type": "gauge"
},
{
- "columns": [
- {
- "text": "Time",
- "value": "Time"
- },
- {
- "text": "Value #A",
- "value": "Value #A"
- },
- {
- "text": "Value #B",
- "value": "Value #B"
- },
- {
- "text": "Value #C",
- "value": "Value #C"
- },
- {
- "text": "Value #D",
- "value": "Value #D"
- },
- {
- "text": "Value #E",
- "value": "Value #E"
- },
- {
- "text": "Value #F",
- "value": "Value #F"
- },
- {
- "text": "pod",
- "value": "pod"
- }
- ],
- "datasource": "$datasource",
- "fill": 1,
- "fontSize": "100%",
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Bandwidth/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "Bps"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Packets/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "pps"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Pod"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down",
+ "url": "/d/7a18067ce943a40ae25454675c19ff5c/kubernetes-networking-pod?${datasource:queryparam}&var-cluster=${cluster}&var-namespace=${namespace}&var-pod=${__data.fields.Pod}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
"gridPos": {
"h": 9,
"w": 24,
"x": 0,
- "y": 10
+ "y": 9
},
- "id": 5,
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "null as zero",
- "renderer": "flot",
- "scroll": true,
- "showHeader": true,
- "sort": {
- "col": 0,
- "desc": false
- },
- "spaceLength": 10,
- "span": 24,
- "styles": [
- {
- "alias": "Time",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Time",
- "thresholds": [ ],
- "type": "hidden",
- "unit": "short"
- },
- {
- "alias": "Bandwidth Received",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Bandwidth Transmitted",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Rate of Received Packets",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Transmitted Packets",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Received Packets Dropped",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Transmitted Packets Dropped",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #F",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Pod",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": true,
- "linkTooltip": "Drill down",
- "linkUrl": "d/7a18067ce943a40ae25454675c19ff5c/kubernetes-networking-pod?orgId=1&refresh=30s&var-namespace=$namespace&var-pod=$__cell",
- "pattern": "pod",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- }
- ],
+ "id": 3,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}) by (pod)",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "A",
- "step": 10
+ "instant": true
},
{
- "expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}) by (pod)",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "B",
- "step": 10
+ "instant": true
},
{
- "expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}) by (pod)",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "C",
- "step": 10
+ "instant": true
},
{
- "expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}) by (pod)",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "D",
- "step": 10
+ "instant": true
},
{
- "expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}) by (pod)",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "E",
- "step": 10
+ "instant": true
},
{
- "expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}) by (pod)",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "F",
- "step": 10
+ "instant": true
+ }
+ ],
+ "title": "Current Network Usage",
+ "transformations": [
+ {
+ "id": "joinByField",
+ "options": {
+ "byField": "pod",
+ "mode": "outer"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "Time 6": true
+ },
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Time 6": 5,
+ "Value #A": 7,
+ "Value #B": 8,
+ "Value #C": 9,
+ "Value #D": 10,
+ "Value #E": 11,
+ "Value #F": 12,
+ "pod": 6
+ },
+ "renameByName": {
+ "Value #A": "Current Receive Bandwidth",
+ "Value #B": "Current Transmit Bandwidth",
+ "Value #C": "Rate of Received Packets",
+ "Value #D": "Rate of Transmitted Packets",
+ "Value #E": "Rate of Received Packets Dropped",
+ "Value #F": "Rate of Transmitted Packets Dropped",
+ "pod": "Pod"
+ }
+ }
}
],
- "timeFrom": null,
- "timeShift": null,
- "title": "Current Status",
"type": "table"
},
{
- "collapse": false,
- "collapsed": false,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 19
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "binBps"
+ }
},
- "id": 6,
- "panels": [ ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Bandwidth",
- "titleSize": "h6",
- "type": "row"
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
"gridPos": {
"h": 9,
"w": 12,
"x": 0,
- "y": 20
+ "y": 18
},
- "id": 7,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "id": 4,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}) by (pod)",
+ "legendFormat": "__auto"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Receive Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "binBps"
+ }
+ },
"gridPos": {
"h": 9,
"w": 12,
"x": 12,
- "y": 20
+ "y": 18
},
- "id": 8,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "id": 5,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}) by (pod)",
+ "legendFormat": "__auto"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Transmit Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "collapse": true,
- "collapsed": true,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "pps"
+ }
+ },
"gridPos": {
- "h": 1,
- "w": 24,
+ "h": 9,
+ "w": 12,
"x": 0,
- "y": 29
+ "y": 27
+ },
+ "id": 6,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}) by (pod)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Received Packets",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 27
+ },
+ "id": 7,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}) by (pod)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Transmitted Packets",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 0,
+ "y": 36
+ },
+ "id": 8,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum by (namespace) (rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"})",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Received Packets Dropped",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 36
},
"id": 9,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 0,
- "y": 30
- },
- "id": 10,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 12,
- "y": 30
- },
- "id": 11,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "tooltip": {
+ "mode": "single"
}
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Packets",
- "titleSize": "h6",
- "type": "row"
- },
- {
- "collapse": true,
- "collapsed": true,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 30
},
- "id": 12,
- "panels": [
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 0,
- "y": 40
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "id": 13,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 12,
- "y": 40
- },
- "id": 14,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "sum(rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]) * on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}) by (pod)",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Errors",
- "titleSize": "h6",
- "type": "row"
+ "title": "Rate of Transmitted Packets Dropped",
+ "type": "timeseries"
}
],
"refresh": "10s",
- "rows": [ ],
- "schemaVersion": 18,
- "style": "dark",
+ "schemaVersion": 39,
"tags": [
"kubernetes"
],
@@ -1140,135 +564,42 @@
"hide": 0,
"label": "Data source",
"name": "datasource",
- "options": [ ],
"query": "prometheus",
- "refresh": 1,
"regex": "",
"type": "datasource"
},
{
- "allValue": null,
- "current": { },
- "datasource": "$datasource",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 2,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "cluster",
"name": "cluster",
- "options": [ ],
"query": "label_values(up{job=\"kubelet\"}, cluster)",
"refresh": 2,
- "regex": "",
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "sort": 1,
+ "type": "query"
},
{
"allValue": ".+",
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
"current": {
+ "selected": false,
"text": "kube-system",
"value": "kube-system"
},
- "datasource": "$datasource",
- "definition": "label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 0,
"includeAll": true,
- "label": null,
- "multi": false,
+ "label": "namespace",
"name": "namespace",
- "options": [ ],
"query": "label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)",
"refresh": 2,
- "regex": "",
- "skipUrlSync": false,
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- },
- {
- "allValue": null,
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
- "current": {
- "text": "5m",
- "value": "5m"
- },
- "datasource": "$datasource",
- "hide": 0,
- "includeAll": false,
- "label": null,
- "multi": false,
- "name": "resolution",
- "options": [
- {
- "selected": false,
- "text": "30s",
- "value": "30s"
- },
- {
- "selected": true,
- "text": "5m",
- "value": "5m"
- },
- {
- "selected": false,
- "text": "1h",
- "value": "1h"
- }
- ],
- "query": "30s,5m,1h",
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "interval",
- "useTags": false
- },
- {
- "allValue": null,
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
- "current": {
- "text": "5m",
- "value": "5m"
- },
- "datasource": "$datasource",
- "hide": 2,
- "includeAll": false,
- "label": null,
- "multi": false,
- "name": "interval",
- "options": [
- {
- "selected": true,
- "text": "4h",
- "value": "4h"
- }
- ],
- "query": "4h",
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "interval",
- "useTags": false
+ "type": "query"
}
]
},
@@ -1276,33 +607,7 @@
"from": "now-1h",
"to": "now"
},
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
"timezone": "UTC",
"title": "Networking / Namespace (Pods)",
- "uid": "8b7a8b326d7a6f1f04244066368c67af",
- "version": 0
+ "uid": "8b7a8b326d7a6f1f04244066368c67af"
}
diff --git a/charts/kubezero-metrics/jsonnet/dashboards/namespace-by-workload.json b/charts/kubezero-metrics/jsonnet/dashboards/namespace-by-workload.json
index cefd075a..9f3e575b 100644
--- a/charts/kubezero-metrics/jsonnet/dashboards/namespace-by-workload.json
+++ b/charts/kubezero-metrics/jsonnet/dashboards/namespace-by-workload.json
@@ -1,1343 +1,701 @@
{
- "__inputs": [ ],
- "__requires": [ ],
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": "-- Grafana --",
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "editable": true,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "id": null,
- "links": [ ],
+ "editable": false,
"panels": [
{
- "collapse": false,
- "collapsed": false,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "green",
+ "mode": "fixed"
+ },
+ "unit": "Bps"
+ }
+ },
"gridPos": {
- "h": 1,
- "w": 24,
+ "h": 9,
+ "w": 12,
"x": 0,
"y": 0
},
- "id": 2,
- "panels": [ ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Current Bandwidth",
- "titleSize": "h6",
- "type": "row"
- },
- {
- "aliasColors": { },
- "bars": true,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 1
+ "id": 1,
+ "options": {
+ "displayMode": "basic",
+ "showUnfilled": false
},
- "id": 3,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "sort": "current",
- "sortDesc": true,
- "total": false,
- "values": true
- },
- "lines": false,
- "linewidth": 1,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "null",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sort_desc(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{ workload }}",
- "refId": "A",
- "step": 10
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}\n* on (cluster,namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Current Rate of Bytes Received",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "series",
- "name": null,
- "show": false,
- "values": [
- "current"
- ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "type": "bargauge"
},
{
- "aliasColors": { },
- "bars": true,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "green",
+ "mode": "fixed"
+ },
+ "unit": "Bps"
+ }
+ },
"gridPos": {
"h": 9,
"w": 12,
"x": 12,
- "y": 1
+ "y": 0
},
- "id": 4,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "sort": "current",
- "sortDesc": true,
- "total": false,
- "values": true
+ "id": 2,
+ "options": {
+ "displayMode": "basic",
+ "showUnfilled": false
},
- "lines": false,
- "linewidth": 1,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "null",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sort_desc(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{ workload }}",
- "refId": "A",
- "step": 10
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}\n* on (cluster,namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Current Rate of Bytes Transmitted",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "series",
- "name": null,
- "show": false,
- "values": [
- "current"
- ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "type": "bargauge"
},
{
- "columns": [
- {
- "text": "Time",
- "value": "Time"
- },
- {
- "text": "Value #A",
- "value": "Value #A"
- },
- {
- "text": "Value #B",
- "value": "Value #B"
- },
- {
- "text": "Value #C",
- "value": "Value #C"
- },
- {
- "text": "Value #D",
- "value": "Value #D"
- },
- {
- "text": "Value #E",
- "value": "Value #E"
- },
- {
- "text": "Value #F",
- "value": "Value #F"
- },
- {
- "text": "Value #G",
- "value": "Value #G"
- },
- {
- "text": "Value #H",
- "value": "Value #H"
- },
- {
- "text": "workload",
- "value": "workload"
- }
- ],
- "datasource": "$datasource",
- "fill": 1,
- "fontSize": "90%",
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Bytes/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "binBps"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "/Packets/"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "pps"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Workload"
+ },
+ "properties": [
+ {
+ "id": "links",
+ "value": [
+ {
+ "title": "Drill down",
+ "url": "/d/728bf77cc1166d2f3133bf25846876cc/kubernetes-networking-workload?${datasource:queryparam}&var-cluster=${cluster}&var-namespace=${namespace}&var-type=${__data.fields.Type}&var-workload=${__data.fields.Workload}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
"gridPos": {
"h": 9,
"w": 24,
"x": 0,
- "y": 10
+ "y": 9
},
- "id": 5,
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "null as zero",
- "renderer": "flot",
- "scroll": true,
- "showHeader": true,
- "sort": {
- "col": 0,
- "desc": false
- },
- "spaceLength": 10,
- "span": 24,
- "styles": [
- {
- "alias": "Time",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Time",
- "thresholds": [ ],
- "type": "hidden",
- "unit": "short"
- },
- {
- "alias": "Current Bandwidth Received",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #A",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Current Bandwidth Transmitted",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #B",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Average Bandwidth Received",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #C",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Average Bandwidth Transmitted",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #D",
- "thresholds": [ ],
- "type": "number",
- "unit": "Bps"
- },
- {
- "alias": "Rate of Received Packets",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #E",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Transmitted Packets",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #F",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Received Packets Dropped",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #G",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Rate of Transmitted Packets Dropped",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": false,
- "linkTooltip": "Drill down",
- "linkUrl": "",
- "pattern": "Value #H",
- "thresholds": [ ],
- "type": "number",
- "unit": "pps"
- },
- {
- "alias": "Workload",
- "colorMode": null,
- "colors": [ ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 2,
- "link": true,
- "linkTooltip": "Drill down",
- "linkUrl": "d/728bf77cc1166d2f3133bf25846876cc/kubernetes-networking-workload?orgId=1&refresh=30s&var-namespace=$namespace&var-type=$type&var-workload=$__cell",
- "pattern": "workload",
- "thresholds": [ ],
- "type": "number",
- "unit": "short"
- }
- ],
+ "id": 3,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sort_desc(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod) kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"}\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload, workload_type))\n",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "A",
- "step": 10
+ "instant": true
},
{
- "expr": "sort_desc(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod) kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"}\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload, workload_type))\n",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "B",
- "step": 10
+ "instant": true
},
{
- "expr": "sort_desc(avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(avg(rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod) kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"}\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload, workload_type))\n",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "C",
- "step": 10
+ "instant": true
},
{
- "expr": "sort_desc(avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(avg(rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod) kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"}\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload, workload_type))\n",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "D",
- "step": 10
+ "instant": true
},
{
- "expr": "sort_desc(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod) kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"}\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload, workload_type))\n",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "E",
- "step": 10
+ "instant": true
},
{
- "expr": "sort_desc(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod) kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"}\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload, workload_type))\n",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "F",
- "step": 10
+ "instant": true
},
{
- "expr": "sort_desc(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod) kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"}\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload, workload_type))\n",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "G",
- "step": 10
+ "instant": true
},
{
- "expr": "sort_desc(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (namespace,pod) kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"}\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload, workload_type))\n",
"format": "table",
- "instant": true,
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "H",
- "step": 10
+ "instant": true
}
],
- "timeFrom": null,
- "timeShift": null,
"title": "Current Status",
+ "transformations": [
+ {
+ "id": "joinByField",
+ "options": {
+ "byField": "workload",
+ "mode": "outer"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "Time 6": true,
+ "Time 7": true,
+ "Time 8": true,
+ "workload_type 2": true,
+ "workload_type 3": true,
+ "workload_type 4": true,
+ "workload_type 5": true,
+ "workload_type 6": true,
+ "workload_type 7": true,
+ "workload_type 8": true
+ },
+ "indexByName": {
+ "Time 1": 0,
+ "Time 2": 1,
+ "Time 3": 2,
+ "Time 4": 3,
+ "Time 5": 4,
+ "Time 6": 5,
+ "Time 7": 6,
+ "Time 8": 7,
+ "Value #A": 10,
+ "Value #B": 11,
+ "Value #C": 12,
+ "Value #D": 13,
+ "Value #E": 14,
+ "Value #F": 15,
+ "Value #G": 16,
+ "Value #H": 17,
+ "workload": 8,
+ "workload_type 1": 9,
+ "workload_type 2": 18,
+ "workload_type 3": 19,
+ "workload_type 4": 20,
+ "workload_type 5": 21,
+ "workload_type 6": 22,
+ "workload_type 7": 23,
+ "workload_type 8": 24
+ },
+ "renameByName": {
+ "Value #A": "Rx Bytes",
+ "Value #B": "Tx Bytes",
+ "Value #C": "Rx Bytes (Avg)",
+ "Value #D": "Tx Bytes (Avg)",
+ "Value #E": "Rx Packets",
+ "Value #F": "Tx Packets",
+ "Value #G": "Rx Packets Dropped",
+ "Value #H": "Tx Packets Dropped",
+ "workload": "Workload",
+ "workload_type 1": "Type"
+ }
+ }
+ }
+ ],
"type": "table"
},
{
- "collapse": true,
- "collapsed": true,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 19
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
},
- "id": 6,
- "panels": [
- {
- "aliasColors": { },
- "bars": true,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 20
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "id": 7,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "sort": "current",
- "sortDesc": true,
- "total": false,
- "values": true
- },
- "lines": false,
- "linewidth": 1,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "null",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{ workload }}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Average Rate of Bytes Received",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "series",
- "name": null,
- "show": false,
- "values": [
- "current"
- ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": true,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 12,
- "y": 20
- },
- "id": 8,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "sort": "current",
- "sortDesc": true,
- "total": false,
- "values": true
- },
- "lines": false,
- "linewidth": 1,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "null",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{ workload }}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Average Rate of Bytes Transmitted",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "series",
- "name": null,
- "show": false,
- "values": [
- "current"
- ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "unit": "Bps"
}
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Average Bandwidth",
- "titleSize": "h6",
- "type": "row"
- },
- {
- "collapse": false,
- "collapsed": false,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 29
},
- "id": 9,
- "panels": [ ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Bandwidth HIstory",
- "titleSize": "h6",
- "type": "row"
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
"gridPos": {
"h": 9,
"w": 12,
"x": 0,
- "y": 38
+ "y": 18
},
- "id": 10,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "id": 4,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sort_desc(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{workload}}",
- "refId": "A",
- "step": 10
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}\n* on (cluster,namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Receive Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "Bps"
+ }
+ },
"gridPos": {
"h": 9,
"w": 12,
"x": 12,
- "y": 38
+ "y": 18
},
- "id": 11,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "id": 5,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sort_desc(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{workload}}",
- "refId": "A",
- "step": 10
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}\n* on (cluster,namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Transmit Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "collapse": true,
- "collapsed": true,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 39
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
},
- "id": 12,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 40
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "id": 13,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{workload}}",
- "refId": "A",
- "step": 10
- }
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 0,
+ "y": 27
+ },
+ "id": 6,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 12,
- "y": 40
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "id": 14,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{workload}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "sort_desc(avg(rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}\n* on (cluster,namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Packets",
- "titleSize": "h6",
- "type": "row"
+ "title": "Average Container Bandwidth by Workload: Received",
+ "type": "timeseries"
},
{
- "collapse": true,
- "collapsed": true,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 40
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
},
- "id": 15,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 41
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "id": 16,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{workload}}",
- "refId": "A",
- "step": 10
- }
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 27
+ },
+ "id": 7,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 12,
- "y": 41
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "id": 17,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{workload}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "sort_desc(avg(rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}\n* on (cluster,namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Errors",
- "titleSize": "h6",
- "type": "row"
+ "title": "Average Container Bandwidth by Workload: Transmitted",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 0,
+ "y": 36
+ },
+ "id": 8,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}\n* on (cluster,namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Received Packets",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 36
+ },
+ "id": 9,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}\n* on (cluster,namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Transmitted Packets",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 0,
+ "y": 45
+ },
+ "id": 10,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}\n* on (cluster,namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Received Packets Dropped",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 45
+ },
+ "id": 11,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) kube_pod_info{host_network=\"false\"}\n* on (cluster,namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}) by (workload))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Transmitted Packets Dropped",
+ "type": "timeseries"
}
],
"refresh": "10s",
- "rows": [ ],
- "schemaVersion": 18,
- "style": "dark",
+ "schemaVersion": 39,
"tags": [
"kubernetes"
],
@@ -1352,163 +710,54 @@
"hide": 0,
"label": "Data source",
"name": "datasource",
- "options": [ ],
"query": "prometheus",
- "refresh": 1,
"regex": "",
"type": "datasource"
},
{
- "allValue": null,
- "current": { },
- "datasource": "$datasource",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 2,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "cluster",
"name": "cluster",
- "options": [ ],
"query": "label_values(up{job=\"kubelet\"}, cluster)",
"refresh": 2,
- "regex": "",
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "sort": 1,
+ "type": "query"
},
{
- "allValue": null,
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
"current": {
+ "selected": false,
"text": "kube-system",
"value": "kube-system"
},
- "datasource": "$datasource",
- "definition": "label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 0,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "namespace",
"name": "namespace",
- "options": [ ],
"query": "label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)",
"refresh": 2,
- "regex": "",
- "skipUrlSync": false,
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": null,
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
- "current": {
- "text": "",
- "value": ""
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
- "definition": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\"}, workload_type)",
"hide": 0,
"includeAll": true,
- "label": null,
- "multi": false,
+ "label": "workload_type",
"name": "type",
- "options": [ ],
- "query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\"}, workload_type)",
+ "query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\"}, workload_type)",
"refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- },
- {
- "allValue": null,
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
- "current": {
- "text": "5m",
- "value": "5m"
- },
- "datasource": "$datasource",
- "hide": 0,
- "includeAll": false,
- "label": null,
- "multi": false,
- "name": "resolution",
- "options": [
- {
- "selected": false,
- "text": "30s",
- "value": "30s"
- },
- {
- "selected": true,
- "text": "5m",
- "value": "5m"
- },
- {
- "selected": false,
- "text": "1h",
- "value": "1h"
- }
- ],
- "query": "30s,5m,1h",
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "interval",
- "useTags": false
- },
- {
- "allValue": null,
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
- "current": {
- "text": "5m",
- "value": "5m"
- },
- "datasource": "$datasource",
- "hide": 2,
- "includeAll": false,
- "label": null,
- "multi": false,
- "name": "interval",
- "options": [
- {
- "selected": true,
- "text": "4h",
- "value": "4h"
- }
- ],
- "query": "4h",
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "interval",
- "useTags": false
+ "type": "query"
}
]
},
@@ -1516,33 +765,7 @@
"from": "now-1h",
"to": "now"
},
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
"timezone": "UTC",
"title": "Networking / Namespace (Workload)",
- "uid": "bbb2a765a623ae38130206c7d94a160f",
- "version": 0
+ "uid": "bbb2a765a623ae38130206c7d94a160f"
}
diff --git a/charts/kubezero-metrics/jsonnet/dashboards/persistentvolumesusage.json b/charts/kubezero-metrics/jsonnet/dashboards/persistentvolumesusage.json
index 5b3dadef..d86c7a51 100644
--- a/charts/kubezero-metrics/jsonnet/dashboards/persistentvolumesusage.json
+++ b/charts/kubezero-metrics/jsonnet/dashboards/persistentvolumesusage.json
@@ -1,376 +1,233 @@
{
- "__inputs": [ ],
- "__requires": [ ],
- "annotations": {
- "list": [ ]
- },
"editable": false,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "id": null,
- "links": [ ],
- "refresh": "10s",
- "rows": [
+ "panels": [
{
- "collapse": false,
- "collapsed": false,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 2,
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": true,
- "max": true,
- "min": true,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 9,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "(\n sum without(instance, node) (topk(1, (kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n -\n sum without(instance, node) (topk(1, (kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n)\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "Used Space",
- "refId": "A"
- },
- {
- "expr": "sum without(instance, node) (topk(1, (kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "Free Space",
- "refId": "B"
- }
+ "unit": "bytes"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 18,
+ "y": 0
+ },
+ "id": 1,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Volume Space Usage",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "(\n sum without(instance, node) (topk(1, (kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n -\n sum without(instance, node) (topk(1, (kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n)\n",
+ "legendFormat": "Used Space"
},
{
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "rgba(50, 172, 45, 0.97)",
- "rgba(237, 129, 40, 0.89)",
- "rgba(245, 54, 54, 0.9)"
- ],
- "datasource": "$datasource",
- "format": "percent",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": true
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "gridPos": { },
- "id": 3,
- "interval": null,
- "links": [ ],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "span": 3,
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "max without(instance,node) (\n(\n topk(1, kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n -\n topk(1, kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n)\n/\ntopk(1, kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n* 100)\n",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "thresholds": "80, 90",
- "title": "Volume Space Usage",
- "type": "singlestat",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
+ "expr": "sum without(instance, node) (topk(1, (kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n",
+ "legendFormat": "Free Space"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6",
- "type": "row"
+ "title": "Volume Space Usage",
+ "type": "timeseries"
},
{
- "collapse": false,
- "collapsed": false,
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "max": 100,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": 0
+ },
+ {
+ "color": "orange",
+ "value": 80
+ },
+ {
+ "color": "red",
+ "value": 90
+ }
+ ]
+ },
+ "unit": "percent"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 6,
+ "x": 18,
+ "y": 0
+ },
+ "id": 2,
+ "interval": "1m",
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 4,
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": true,
- "max": true,
- "min": true,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 9,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum without(instance, node) (topk(1, (kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "Used inodes",
- "refId": "A"
- },
- {
- "expr": "(\n sum without(instance, node) (topk(1, (kubelet_volume_stats_inodes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n -\n sum without(instance, node) (topk(1, (kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n)\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": " Free inodes",
- "refId": "B"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Volume inodes Usage",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "none",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "none",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "rgba(50, 172, 45, 0.97)",
- "rgba(237, 129, 40, 0.89)",
- "rgba(245, 54, 54, 0.9)"
- ],
- "datasource": "$datasource",
- "format": "percent",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": { },
- "id": 5,
- "interval": null,
- "links": [ ],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "span": 3,
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "max without(instance,node) (\ntopk(1, kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n/\ntopk(1, kubelet_volume_stats_inodes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n* 100)\n",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "thresholds": "80, 90",
- "title": "Volume inodes Usage",
- "type": "singlestat",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
+ "expr": "max without(instance,node) (\n(\n topk(1, kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n -\n topk(1, kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n)\n/\ntopk(1, kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n* 100)\n",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6",
- "type": "row"
+ "title": "Volume Space Usage",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "none"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 18,
+ "y": 7
+ },
+ "id": 3,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum without(instance, node) (topk(1, (kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))",
+ "legendFormat": "Used inodes"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "(\n sum without(instance, node) (topk(1, (kubelet_volume_stats_inodes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n -\n sum without(instance, node) (topk(1, (kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n)\n",
+ "legendFormat": "Free inodes"
+ }
+ ],
+ "title": "Volume inodes Usage",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "max": 100,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": 0
+ },
+ {
+ "color": "orange",
+ "value": 80
+ },
+ {
+ "color": "red",
+ "value": 90
+ }
+ ]
+ },
+ "unit": "percent"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 6,
+ "x": 18,
+ "y": 7
+ },
+ "id": 4,
+ "interval": "1m",
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "max without(instance,node) (\ntopk(1, kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n/\ntopk(1, kubelet_volume_stats_inodes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n* 100)\n",
+ "instant": true
+ }
+ ],
+ "title": "Volume inodes Usage",
+ "type": "gauge"
}
],
- "schemaVersion": 14,
- "style": "dark",
+ "refresh": "10s",
+ "schemaVersion": 39,
"tags": [
"kubernetes"
],
@@ -385,105 +242,56 @@
"hide": 0,
"label": "Data source",
"name": "datasource",
- "options": [ ],
"query": "prometheus",
- "refresh": 1,
"regex": "",
"type": "datasource"
},
{
- "allValue": null,
- "current": { },
- "datasource": "$datasource",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 2,
- "includeAll": false,
"label": "cluster",
- "multi": false,
"name": "cluster",
- "options": [ ],
"query": "label_values(kubelet_volume_stats_capacity_bytes{job=\"kubelet\"}, cluster)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": null,
- "current": { },
- "datasource": "$datasource",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 0,
- "includeAll": false,
"label": "Namespace",
- "multi": false,
"name": "namespace",
- "options": [ ],
"query": "label_values(kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\"}, namespace)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": null,
- "current": { },
- "datasource": "$datasource",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 0,
- "includeAll": false,
"label": "PersistentVolumeClaim",
- "multi": false,
"name": "volume",
- "options": [ ],
"query": "label_values(kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\"}, persistentvolumeclaim)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
}
]
},
"time": {
- "from": "now-7d",
+ "from": "now-1h",
"to": "now"
},
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
"timezone": "UTC",
"title": "Persistent Volumes",
- "uid": "919b92a8e8041bd567af9edab12c840c",
- "version": 0
+ "uid": "919b92a8e8041bd567af9edab12c840c"
}
diff --git a/charts/kubezero-metrics/jsonnet/dashboards/pod-total.json b/charts/kubezero-metrics/jsonnet/dashboards/pod-total.json
index 1203c2eb..f6d58b5b 100644
--- a/charts/kubezero-metrics/jsonnet/dashboards/pod-total.json
+++ b/charts/kubezero-metrics/jsonnet/dashboards/pod-total.json
@@ -1,897 +1,391 @@
{
- "__inputs": [ ],
- "__requires": [ ],
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": "-- Grafana --",
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "editable": true,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "id": null,
- "links": [ ],
+ "editable": false,
"panels": [
{
- "collapse": false,
- "collapsed": false,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "displayName": "$pod",
+ "max": 10000000000,
+ "min": 0,
+ "thresholds": {
+ "steps": [
+ {
+ "color": "dark-green",
+ "index": 0,
+ "value": null
+ },
+ {
+ "color": "dark-yellow",
+ "index": 1,
+ "value": 5000000000
+ },
+ {
+ "color": "dark-red",
+ "index": 2,
+ "value": 7000000000
+ }
+ ]
+ },
+ "unit": "Bps"
+ }
+ },
"gridPos": {
- "h": 1,
- "w": 24,
+ "h": 9,
+ "w": 12,
"x": 0,
"y": 0
},
- "id": 2,
- "panels": [ ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Current Bandwidth",
- "titleSize": "h6",
- "type": "row"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#299c46",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": "$datasource",
- "decimals": 0,
- "format": "time_series",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 1
- },
- "height": 9,
- "id": 3,
- "interval": null,
- "links": [ ],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "minSpan": 12,
- "nullPointMode": "connected",
- "nullText": null,
- "options": {
- "fieldOptions": {
- "calcs": [
- "last"
- ],
- "defaults": {
- "max": 10000000000,
- "min": 0,
- "title": "$namespace: $pod",
- "unit": "Bps"
- },
- "mappings": [ ],
- "override": { },
- "thresholds": [
- {
- "color": "dark-green",
- "index": 0,
- "value": null
- },
- {
- "color": "dark-yellow",
- "index": 1,
- "value": 5000000000
- },
- {
- "color": "dark-red",
- "index": 2,
- "value": 7000000000
- }
- ],
- "values": false
- }
- },
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "span": 12,
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
+ "id": 1,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$interval:$resolution]))",
- "format": "time_series",
- "instant": null,
- "intervalFactor": 1,
- "legendFormat": "",
- "refId": "A"
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))",
+ "legendFormat": "__auto"
}
],
- "thresholds": "",
- "timeFrom": null,
- "timeShift": null,
"title": "Current Rate of Bytes Received",
- "type": "gauge",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
+ "type": "gauge"
},
{
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#299c46",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": "$datasource",
- "decimals": 0,
- "format": "time_series",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "displayName": "$pod",
+ "max": 10000000000,
+ "min": 0,
+ "thresholds": {
+ "steps": [
+ {
+ "color": "dark-green",
+ "index": 0,
+ "value": null
+ },
+ {
+ "color": "dark-yellow",
+ "index": 1,
+ "value": 5000000000
+ },
+ {
+ "color": "dark-red",
+ "index": 2,
+ "value": 7000000000
+ }
+ ]
+ },
+ "unit": "Bps"
+ }
},
"gridPos": {
"h": 9,
"w": 12,
"x": 12,
- "y": 1
+ "y": 0
},
- "height": 9,
- "id": 4,
- "interval": null,
- "links": [ ],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "minSpan": 12,
- "nullPointMode": "connected",
- "nullText": null,
- "options": {
- "fieldOptions": {
- "calcs": [
- "last"
- ],
- "defaults": {
- "max": 10000000000,
- "min": 0,
- "title": "$namespace: $pod",
- "unit": "Bps"
- },
- "mappings": [ ],
- "override": { },
- "thresholds": [
- {
- "color": "dark-green",
- "index": 0,
- "value": null
- },
- {
- "color": "dark-yellow",
- "index": 1,
- "value": 5000000000
- },
- {
- "color": "dark-red",
- "index": 2,
- "value": 7000000000
- }
- ],
- "values": false
- }
- },
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "span": 12,
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
+ "id": 2,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$interval:$resolution]))",
- "format": "time_series",
- "instant": null,
- "intervalFactor": 1,
- "legendFormat": "",
- "refId": "A"
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))",
+ "legendFormat": "__auto"
}
],
- "thresholds": "",
- "timeFrom": null,
- "timeShift": null,
"title": "Current Rate of Bytes Transmitted",
- "type": "gauge",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
+ "type": "gauge"
},
{
- "collapse": false,
- "collapsed": false,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "binBps"
+ }
+ },
"gridPos": {
- "h": 1,
- "w": 24,
+ "h": 9,
+ "w": 12,
"x": 0,
- "y": 10
+ "y": 9
+ },
+ "id": 3,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Receive Bandwidth",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "binBps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 9
+ },
+ "id": 4,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Transmit Bandwidth",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 0,
+ "y": 18
},
"id": 5,
- "panels": [ ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Bandwidth",
- "titleSize": "h6",
- "type": "row"
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 11
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "id": 6,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$interval:$resolution])) by (pod)",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Receive Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "title": "Rate of Received Packets",
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "pps"
+ }
+ },
"gridPos": {
"h": 9,
"w": 12,
"x": 12,
- "y": 11
+ "y": 18
},
- "id": 7,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "id": 6,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$interval:$resolution])) by (pod)",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Transmit Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "title": "Rate of Transmitted Packets",
+ "type": "timeseries"
},
{
- "collapse": true,
- "collapsed": true,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "pps"
+ }
+ },
"gridPos": {
- "h": 1,
- "w": 24,
+ "h": 9,
+ "w": 12,
"x": 0,
- "y": 20
+ "y": 27
+ },
+ "id": 7,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Received Packets Dropped",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "showPoints": "never"
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 27
},
"id": 8,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 0,
- "y": 21
- },
- "id": 9,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$interval:$resolution])) by (pod)",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 12,
- "y": 21
- },
- "id": 10,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$interval:$resolution])) by (pod)",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "tooltip": {
+ "mode": "single"
}
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Packets",
- "titleSize": "h6",
- "type": "row"
- },
- {
- "collapse": true,
- "collapsed": true,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 21
},
- "id": 11,
- "panels": [
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 0,
- "y": 32
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "id": 12,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$interval:$resolution])) by (pod)",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 12,
- "y": 32
- },
- "id": 13,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$interval:$resolution])) by (pod)",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "sum(rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Errors",
- "titleSize": "h6",
- "type": "row"
+ "title": "Rate of Transmitted Packets Dropped",
+ "type": "timeseries"
}
],
"refresh": "10s",
- "rows": [ ],
- "schemaVersion": 18,
- "style": "dark",
+ "schemaVersion": 39,
"tags": [
"kubernetes"
],
@@ -906,163 +400,60 @@
"hide": 0,
"label": "Data source",
"name": "datasource",
- "options": [ ],
"query": "prometheus",
- "refresh": 1,
"regex": "",
"type": "datasource"
},
{
- "allValue": null,
- "current": { },
- "datasource": "$datasource",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 2,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "cluster",
"name": "cluster",
- "options": [ ],
"query": "label_values(up{job=\"kubelet\"}, cluster)",
"refresh": 2,
- "regex": "",
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "sort": 1,
+ "type": "query"
},
{
"allValue": ".+",
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
"current": {
+ "selected": false,
"text": "kube-system",
"value": "kube-system"
},
- "datasource": "$datasource",
- "definition": "label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 0,
"includeAll": true,
- "label": null,
- "multi": false,
+ "label": "namespace",
"name": "namespace",
- "options": [ ],
"query": "label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)",
"refresh": 2,
- "regex": "",
- "skipUrlSync": false,
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": ".+",
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
"current": {
- "text": "",
- "value": ""
+ "selected": false,
+ "text": "kube-system",
+ "value": "kube-system"
+ },
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
- "definition": "label_values(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}, pod)",
"hide": 0,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "pod",
"name": "pod",
- "options": [ ],
"query": "label_values(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}, pod)",
"refresh": 2,
- "regex": "",
- "skipUrlSync": false,
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- },
- {
- "allValue": null,
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
- "current": {
- "text": "5m",
- "value": "5m"
- },
- "datasource": "$datasource",
- "hide": 0,
- "includeAll": false,
- "label": null,
- "multi": false,
- "name": "resolution",
- "options": [
- {
- "selected": false,
- "text": "30s",
- "value": "30s"
- },
- {
- "selected": true,
- "text": "5m",
- "value": "5m"
- },
- {
- "selected": false,
- "text": "1h",
- "value": "1h"
- }
- ],
- "query": "30s,5m,1h",
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "interval",
- "useTags": false
- },
- {
- "allValue": null,
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
- "current": {
- "text": "5m",
- "value": "5m"
- },
- "datasource": "$datasource",
- "hide": 2,
- "includeAll": false,
- "label": null,
- "multi": false,
- "name": "interval",
- "options": [
- {
- "selected": true,
- "text": "4h",
- "value": "4h"
- }
- ],
- "query": "4h",
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "interval",
- "useTags": false
+ "type": "query"
}
]
},
@@ -1070,33 +461,7 @@
"from": "now-1h",
"to": "now"
},
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
"timezone": "UTC",
"title": "Networking / Pod",
- "uid": "7a18067ce943a40ae25454675c19ff5c",
- "version": 0
+ "uid": "7a18067ce943a40ae25454675c19ff5c"
}
diff --git a/charts/kubezero-metrics/jsonnet/dashboards/proxy.json b/charts/kubezero-metrics/jsonnet/dashboards/proxy.json
index 1ea49375..02706ba3 100644
--- a/charts/kubezero-metrics/jsonnet/dashboards/proxy.json
+++ b/charts/kubezero-metrics/jsonnet/dashboards/proxy.json
@@ -1,993 +1,578 @@
{
- "__inputs": [ ],
- "__requires": [ ],
- "annotations": {
- "list": [ ]
- },
"editable": false,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "id": null,
- "links": [ ],
- "refresh": "10s",
- "rows": [
+ "panels": [
{
- "collapse": false,
- "collapsed": false,
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "none"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 4,
+ "x": 0,
+ "y": 0
+ },
+ "id": 1,
+ "interval": "1m",
+ "options": {
+ "colorMode": "none"
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#299c46",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": "$datasource",
- "format": "none",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "gridPos": { },
- "id": 2,
- "interval": null,
- "links": [ ],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "span": 2,
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "sum(up{cluster=\"$cluster\", job=\"kube-proxy\"})",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "thresholds": "",
- "title": "Up",
- "type": "singlestat",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "min"
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 3,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 5,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(rate(kubeproxy_sync_proxy_rules_duration_seconds_count{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "rate",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rules Sync Rate",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 4,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 5,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "histogram_quantile(0.99,rate(kubeproxy_sync_proxy_rules_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rule Sync Latency 99th Quantile",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "sum(up{cluster=\"$cluster\", job=\"kube-proxy\"})",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6",
- "type": "row"
+ "title": "Up",
+ "type": "stat"
},
{
- "collapse": false,
- "collapsed": false,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 5,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(rate(kubeproxy_network_programming_duration_seconds_count{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "rate",
- "refId": "A"
- }
+ "unit": "ops"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 10,
+ "x": 4,
+ "y": 0
+ },
+ "id": 2,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Network Programming Rate",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 6,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 6,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "histogram_quantile(0.99, sum(rate(kubeproxy_network_programming_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\"}[$__rate_interval])) by (instance, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Network Programming Latency 99th Quantile",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "sum(rate(kubeproxy_sync_proxy_rules_duration_seconds_count{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\"}[$__rate_interval]))",
+ "legendFormat": "rate"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6",
- "type": "row"
+ "title": "Rules Sync Rate",
+ "type": "timeseries"
},
{
- "collapse": false,
- "collapsed": false,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 7,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 4,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\",code=~\"2..\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "2xx",
- "refId": "A"
- },
- {
- "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\",code=~\"3..\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "3xx",
- "refId": "B"
- },
- {
- "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\",code=~\"4..\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "4xx",
- "refId": "C"
- },
- {
- "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\",code=~\"5..\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "5xx",
- "refId": "D"
- }
+ "unit": "s"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 10,
+ "x": 14,
+ "y": 0
+ },
+ "id": 3,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Kube API Request Rate",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 8,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 8,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-proxy\",instance=~\"$instance\",verb=\"POST\"}[$__rate_interval])) by (verb, url, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{verb}} {{url}}",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Post Request Latency 99th Quantile",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "histogram_quantile(0.99,rate(kubeproxy_sync_proxy_rules_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\"}[$__rate_interval]))",
+ "legendFormat": "{{instance}}"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6",
- "type": "row"
+ "title": "Rules Sync Latency 99th Quantile",
+ "type": "timeseries"
},
{
- "collapse": false,
- "collapsed": false,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 9,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\", verb=\"GET\"}[$__rate_interval])) by (verb, url, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{verb}} {{url}}",
- "refId": "A"
- }
+ "unit": "ops"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 7
+ },
+ "id": 4,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Get Request Latency 99th Quantile",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "sum(rate(kubeproxy_network_programming_duration_seconds_count{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\"}[$__rate_interval]))",
+ "legendFormat": "rate"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6",
- "type": "row"
+ "title": "Network Programming Rate",
+ "type": "timeseries"
},
{
- "collapse": false,
- "collapsed": false,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 10,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 4,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "process_resident_memory_bytes{cluster=\"$cluster\", job=\"kube-proxy\",instance=~\"$instance\"}",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
- }
+ "unit": "s"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 7
+ },
+ "id": 5,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 11,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 4,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "rate(process_cpu_seconds_total{cluster=\"$cluster\", job=\"kube-proxy\",instance=~\"$instance\"}[$__rate_interval])",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU usage",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 12,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 4,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "go_goroutines{cluster=\"$cluster\", job=\"kube-proxy\",instance=~\"$instance\"}",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Goroutines",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "expr": "histogram_quantile(0.99, sum(rate(kubeproxy_network_programming_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\"}[$__rate_interval])) by (instance, le))",
+ "legendFormat": "{{instance}}"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6",
- "type": "row"
+ "title": "Network Programming Latency 99th Quantile",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "ops"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 0,
+ "y": 14
+ },
+ "id": 6,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"kube-proxy\", instance=~\"$instance\",code=~\"2..\"}[$__rate_interval]))",
+ "legendFormat": "2xx"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"kube-proxy\", instance=~\"$instance\",code=~\"3..\"}[$__rate_interval]))",
+ "legendFormat": "3xx"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"kube-proxy\", instance=~\"$instance\",code=~\"4..\"}[$__rate_interval]))",
+ "legendFormat": "4xx"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"kube-proxy\", instance=~\"$instance\",code=~\"5..\"}[$__rate_interval]))",
+ "legendFormat": "5xx"
+ }
+ ],
+ "title": "Kube API Request Rate",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "ops"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 16,
+ "x": 8,
+ "y": 14
+ },
+ "id": 7,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-proxy\",instance=~\"$instance\",verb=\"POST\"}[$__rate_interval])) by (verb, url, le))",
+ "legendFormat": "{{verb}} {{url}}"
+ }
+ ],
+ "title": "Post Request Latency 99th Quantile",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "s"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 21
+ },
+ "id": 8,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\", verb=\"GET\"}[$__rate_interval])) by (verb, url, le))",
+ "legendFormat": "{{verb}} {{url}}"
+ }
+ ],
+ "title": "Get Request Latency 99th Quantile",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "bytes"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 0,
+ "y": 28
+ },
+ "id": 9,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "process_resident_memory_bytes{cluster=\"$cluster\", job=\"kube-proxy\",instance=~\"$instance\"}",
+ "legendFormat": "{{instance}}"
+ }
+ ],
+ "title": "Memory",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "short"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 8,
+ "y": 28
+ },
+ "id": 10,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "rate(process_cpu_seconds_total{cluster=\"$cluster\", job=\"kube-proxy\",instance=~\"$instance\"}[$__rate_interval])",
+ "legendFormat": "{{instance}}"
+ }
+ ],
+ "title": "CPU usage",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "short"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 16,
+ "y": 28
+ },
+ "id": 11,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "go_goroutines{cluster=\"$cluster\", job=\"kube-proxy\",instance=~\"$instance\"}",
+ "legendFormat": "{{instance}}"
+ }
+ ],
+ "title": "Goroutines",
+ "type": "timeseries"
}
],
- "schemaVersion": 14,
- "style": "dark",
+ "refresh": "10s",
+ "schemaVersion": 39,
"tags": [
"kubernetes"
],
@@ -1002,51 +587,36 @@
"hide": 0,
"label": "Data source",
"name": "datasource",
- "options": [ ],
"query": "prometheus",
- "refresh": 1,
"regex": "",
"type": "datasource"
},
{
- "allValue": null,
- "current": { },
- "datasource": "$datasource",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 2,
- "includeAll": false,
"label": "cluster",
- "multi": false,
"name": "cluster",
- "options": [ ],
"query": "label_values(up{job=\"kube-proxy\"}, cluster)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": null,
- "current": { },
- "datasource": "$datasource",
+ "allValue": ".+",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 0,
"includeAll": true,
- "label": null,
- "multi": false,
+ "label": "instance",
"name": "instance",
- "options": [ ],
"query": "label_values(up{job=\"kube-proxy\", cluster=\"$cluster\", job=\"kube-proxy\"}, instance)",
"refresh": 2,
- "regex": "",
- "sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
}
]
},
@@ -1054,33 +624,7 @@
"from": "now-1h",
"to": "now"
},
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
"timezone": "UTC",
"title": "Proxy",
- "uid": "632e265de029684c40b21cb76bca4f94",
- "version": 0
+ "uid": "632e265de029684c40b21cb76bca4f94"
}
diff --git a/charts/kubezero-metrics/jsonnet/dashboards/scheduler.json b/charts/kubezero-metrics/jsonnet/dashboards/scheduler.json
index 2ebd6b4c..3d0fb5f4 100644
--- a/charts/kubezero-metrics/jsonnet/dashboards/scheduler.json
+++ b/charts/kubezero-metrics/jsonnet/dashboards/scheduler.json
@@ -1,860 +1,524 @@
{
- "__inputs": [ ],
- "__requires": [ ],
- "annotations": {
- "list": [ ]
- },
"editable": false,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "id": null,
- "links": [ ],
- "refresh": "10s",
- "rows": [
+ "panels": [
{
- "collapse": false,
- "collapsed": false,
- "panels": [
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "unit": "none"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 4,
+ "x": 0,
+ "y": 0
+ },
+ "id": 1,
+ "interval": "1m",
+ "options": {
+ "colorMode": "none"
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#299c46",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": "$datasource",
- "format": "none",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "gridPos": { },
- "id": 2,
- "interval": null,
- "links": [ ],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "span": 2,
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "sum(up{cluster=\"$cluster\", job=\"kube-scheduler\"})",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "thresholds": "",
- "title": "Up",
- "type": "singlestat",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "min"
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 3,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 5,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(rate(scheduler_e2e_scheduling_duration_seconds_count{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance)",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{cluster}} {{instance}} e2e",
- "refId": "A"
- },
- {
- "expr": "sum(rate(scheduler_binding_duration_seconds_count{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance)",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{cluster}} {{instance}} binding",
- "refId": "B"
- },
- {
- "expr": "sum(rate(scheduler_scheduling_algorithm_duration_seconds_count{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance)",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{cluster}} {{instance}} scheduling algorithm",
- "refId": "C"
- },
- {
- "expr": "sum(rate(scheduler_volume_scheduling_duration_seconds_count{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance)",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{cluster}} {{instance}} volume",
- "refId": "D"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Scheduling Rate",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 4,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 5,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "histogram_quantile(0.99, sum(rate(scheduler_e2e_scheduling_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{cluster}} {{instance}} e2e",
- "refId": "A"
- },
- {
- "expr": "histogram_quantile(0.99, sum(rate(scheduler_binding_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{cluster}} {{instance}} binding",
- "refId": "B"
- },
- {
- "expr": "histogram_quantile(0.99, sum(rate(scheduler_scheduling_algorithm_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{cluster}} {{instance}} scheduling algorithm",
- "refId": "C"
- },
- {
- "expr": "histogram_quantile(0.99, sum(rate(scheduler_volume_scheduling_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{cluster}} {{instance}} volume",
- "refId": "D"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Scheduling latency 99th Quantile",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "sum(up{cluster=\"$cluster\", job=\"kube-scheduler\"})",
+ "instant": true
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6",
- "type": "row"
+ "title": "Up",
+ "type": "stat"
},
{
- "collapse": false,
- "collapsed": false,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 5,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 4,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\",code=~\"2..\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "2xx",
- "refId": "A"
- },
- {
- "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\",code=~\"3..\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "3xx",
- "refId": "B"
- },
- {
- "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\",code=~\"4..\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "4xx",
- "refId": "C"
- },
- {
- "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\",code=~\"5..\"}[$__rate_interval]))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "5xx",
- "refId": "D"
- }
+ "unit": "ops"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 10,
+ "x": 4,
+ "y": 0
+ },
+ "id": 2,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Kube API Request Rate",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "sum(rate(scheduler_e2e_scheduling_duration_seconds_count{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance)",
+ "legendFormat": "{{cluster}} {{instance}} e2e"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 6,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 8,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\", verb=\"POST\"}[$__rate_interval])) by (verb, url, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{verb}} {{url}}",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Post Request Latency 99th Quantile",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
+ "expr": "sum(rate(scheduler_binding_duration_seconds_count{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance)",
+ "legendFormat": "{{cluster}} {{instance}} binding"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "sum(rate(scheduler_scheduling_algorithm_duration_seconds_count{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance)",
+ "legendFormat": "{{cluster}} {{instance}} scheduling algorithm"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "yaxes": [
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "sum(rate(scheduler_volume_scheduling_duration_seconds_count{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance)",
+ "legendFormat": "{{cluster}} {{instance}} volume"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6",
- "type": "row"
+ "title": "Scheduling Rate",
+ "type": "timeseries"
},
{
- "collapse": false,
- "collapsed": false,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 7,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": true
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\", verb=\"GET\"}[$__rate_interval])) by (verb, url, le))",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{verb}} {{url}}",
- "refId": "A"
- }
+ "unit": "s"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 10,
+ "x": 14,
+ "y": 0
+ },
+ "id": 3,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Get Request Latency 99th Quantile",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
+ "expr": "histogram_quantile(0.99, sum(rate(scheduler_e2e_scheduling_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, le))",
+ "legendFormat": "{{cluster}} {{instance}} e2e"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "yaxes": [
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "s",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "histogram_quantile(0.99, sum(rate(scheduler_binding_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, le))",
+ "legendFormat": "{{cluster}} {{instance}} binding"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "histogram_quantile(0.99, sum(rate(scheduler_scheduling_algorithm_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, le))",
+ "legendFormat": "{{cluster}} {{instance}} scheduling algorithm"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "histogram_quantile(0.99, sum(rate(scheduler_volume_scheduling_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, le))",
+ "legendFormat": "{{cluster}} {{instance}} volume"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6",
- "type": "row"
+ "title": "Scheduling latency 99th Quantile",
+ "type": "timeseries"
},
{
- "collapse": false,
- "collapsed": false,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 8,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 4,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "process_resident_memory_bytes{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
- }
+ "unit": "ops"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 0,
+ "y": 7
+ },
+ "id": 4,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Memory",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\",code=~\"2..\"}[$__rate_interval]))",
+ "legendFormat": "2xx"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 9,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 4,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "rate(process_cpu_seconds_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[$__rate_interval])",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU usage",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\",code=~\"3..\"}[$__rate_interval]))",
+ "legendFormat": "3xx"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": { },
- "id": 10,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "lines": true,
- "linewidth": 1,
- "links": [ ],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 4,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "go_goroutines{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}",
- "format": "time_series",
- "intervalFactor": 2,
- "legendFormat": "{{instance}}",
- "refId": "A"
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Goroutines",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
+ "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\",code=~\"4..\"}[$__rate_interval]))",
+ "legendFormat": "4xx"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
+ "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\",code=~\"5..\"}[$__rate_interval]))",
+ "legendFormat": "5xx"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6",
- "type": "row"
+ "title": "Kube API Request Rate",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "ops"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 16,
+ "x": 8,
+ "y": 7
+ },
+ "id": 5,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\", verb=\"POST\"}[$__rate_interval])) by (verb, url, le))",
+ "legendFormat": "{{verb}} {{url}}"
+ }
+ ],
+ "title": "Post Request Latency 99th Quantile",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "s"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 14
+ },
+ "id": 6,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\", verb=\"GET\"}[$__rate_interval])) by (verb, url, le))",
+ "legendFormat": "{{verb}} {{url}}"
+ }
+ ],
+ "title": "Get Request Latency 99th Quantile",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "bytes"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 0,
+ "y": 21
+ },
+ "id": 7,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "process_resident_memory_bytes{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}",
+ "legendFormat": "{{instance}}"
+ }
+ ],
+ "title": "Memory",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "short"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 8,
+ "y": 21
+ },
+ "id": 8,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "rate(process_cpu_seconds_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[$__rate_interval])",
+ "legendFormat": "{{instance}}"
+ }
+ ],
+ "title": "CPU usage",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "short"
+ }
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 16,
+ "y": 21
+ },
+ "id": 9,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "go_goroutines{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}",
+ "legendFormat": "{{instance}}"
+ }
+ ],
+ "title": "Goroutines",
+ "type": "timeseries"
}
],
- "schemaVersion": 14,
- "style": "dark",
+ "refresh": "10s",
+ "schemaVersion": 39,
"tags": [
"kubernetes"
],
@@ -869,51 +533,36 @@
"hide": 0,
"label": "Data source",
"name": "datasource",
- "options": [ ],
"query": "prometheus",
- "refresh": 1,
"regex": "",
"type": "datasource"
},
{
- "allValue": null,
- "current": { },
- "datasource": "$datasource",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 2,
- "includeAll": false,
"label": "cluster",
- "multi": false,
"name": "cluster",
- "options": [ ],
"query": "label_values(up{job=\"kube-scheduler\"}, cluster)",
"refresh": 2,
- "regex": "",
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": null,
- "current": { },
- "datasource": "$datasource",
+ "allValue": ".+",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 0,
"includeAll": true,
- "label": null,
- "multi": false,
+ "label": "instance",
"name": "instance",
- "options": [ ],
"query": "label_values(up{job=\"kube-scheduler\", cluster=\"$cluster\"}, instance)",
"refresh": 2,
- "regex": "",
- "sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
}
]
},
@@ -921,33 +570,7 @@
"from": "now-1h",
"to": "now"
},
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
"timezone": "UTC",
"title": "Scheduler",
- "uid": "2e6b6a3b4bddf1427b3a55aa1311c656",
- "version": 0
+ "uid": "2e6b6a3b4bddf1427b3a55aa1311c656"
}
diff --git a/charts/kubezero-metrics/jsonnet/dashboards/workload-total.json b/charts/kubezero-metrics/jsonnet/dashboards/workload-total.json
index 39bb2726..e5030424 100644
--- a/charts/kubezero-metrics/jsonnet/dashboards/workload-total.json
+++ b/charts/kubezero-metrics/jsonnet/dashboards/workload-total.json
@@ -1,1055 +1,471 @@
{
- "__inputs": [ ],
- "__requires": [ ],
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": "-- Grafana --",
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "editable": true,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "id": null,
- "links": [ ],
+ "editable": false,
"panels": [
{
- "collapse": false,
- "collapsed": false,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "green",
+ "mode": "fixed"
+ },
+ "unit": "Bps"
+ }
+ },
"gridPos": {
- "h": 1,
- "w": 24,
+ "h": 9,
+ "w": 12,
"x": 0,
"y": 0
},
- "id": 2,
- "panels": [ ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Current Bandwidth",
- "titleSize": "h6",
- "type": "row"
+ "id": 1,
+ "options": {
+ "displayMode": "basic",
+ "showUnfilled": false
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Current Rate of Bytes Received",
+ "type": "bargauge"
},
{
- "aliasColors": { },
- "bars": true,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "green",
+ "mode": "fixed"
+ },
+ "unit": "Bps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 0
+ },
+ "id": 2,
+ "options": {
+ "displayMode": "basic",
+ "showUnfilled": false
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Current Rate of Bytes Transmitted",
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "green",
+ "mode": "fixed"
+ },
+ "unit": "Bps"
+ }
+ },
"gridPos": {
"h": 9,
"w": 12,
"x": 0,
- "y": 1
+ "y": 9
},
"id": 3,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "sort": "current",
- "sortDesc": true,
- "total": false,
- "values": true
+ "options": {
+ "displayMode": "basic",
+ "showUnfilled": false
},
- "lines": false,
- "linewidth": 1,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "null",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sort_desc(sum(irate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{ pod }}",
- "refId": "A",
- "step": 10
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(avg(rate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Current Rate of Bytes Received",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "series",
- "name": null,
- "show": false,
- "values": [
- "current"
- ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "title": "Average Rate of Bytes Received",
+ "type": "bargauge"
},
{
- "aliasColors": { },
- "bars": true,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "green",
+ "mode": "fixed"
+ },
+ "unit": "Bps"
+ }
+ },
"gridPos": {
"h": 9,
"w": 12,
"x": 12,
- "y": 1
+ "y": 9
},
"id": 4,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "sort": "current",
- "sortDesc": true,
- "total": false,
- "values": true
+ "options": {
+ "displayMode": "basic",
+ "showUnfilled": false
},
- "lines": false,
- "linewidth": 1,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "null",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": false,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sort_desc(sum(irate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{ pod }}",
- "refId": "A",
- "step": 10
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(avg(rate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Current Rate of Bytes Transmitted",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
+ "title": "Average Rate of Bytes Transmitted",
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
},
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "series",
- "name": null,
- "show": false,
- "values": [
- "current"
- ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "binBps"
}
- ]
- },
- {
- "collapse": true,
- "collapsed": true,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 10
},
- "id": 5,
- "panels": [
- {
- "aliasColors": { },
- "bars": true,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 11
- },
- "id": 6,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "sort": "current",
- "sortDesc": true,
- "total": false,
- "values": true
- },
- "lines": false,
- "linewidth": 1,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "null",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(avg(irate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{ pod }}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Average Rate of Bytes Received",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "series",
- "name": null,
- "show": false,
- "values": [
- "current"
- ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
- },
- {
- "aliasColors": { },
- "bars": true,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 12,
- "y": 11
- },
- "id": 7,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": null,
- "sort": "current",
- "sortDesc": true,
- "total": false,
- "values": true
- },
- "lines": false,
- "linewidth": 1,
- "links": [ ],
- "minSpan": 24,
- "nullPointMode": "null",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 24,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(avg(irate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{ pod }}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Average Rate of Bytes Transmitted",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "series",
- "name": null,
- "show": false,
- "values": [
- "current"
- ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Average Bandwidth",
- "titleSize": "h6",
- "type": "row"
- },
- {
- "collapse": false,
- "collapsed": false,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 11
- },
- "id": 8,
- "panels": [ ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Bandwidth HIstory",
- "titleSize": "h6",
- "type": "row"
- },
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
"gridPos": {
"h": 9,
"w": 12,
"x": 0,
- "y": 12
+ "y": 18
},
- "id": 9,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "id": 5,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sort_desc(sum(irate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_receive_bytes_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Receive Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "binBps"
+ }
+ },
"gridPos": {
"h": 9,
"w": 12,
"x": 12,
- "y": 12
+ "y": 18
},
- "id": 10,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
+ "id": 6,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
},
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
+ "pluginVersion": "v11.0.0",
"targets": [
{
- "expr": "sort_desc(sum(irate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_transmit_bytes_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
}
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
"title": "Transmit Bandwidth",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "Bps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "collapse": true,
- "collapsed": true,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 21
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
},
- "id": 11,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 22
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "id": 12,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(sum(irate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
- }
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 0,
+ "y": 27
+ },
+ "id": 7,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 12,
- "y": 22
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "id": 13,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(sum(irate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "sort_desc(sum(rate(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Packets",
- "titleSize": "h6",
- "type": "row"
+ "title": "Rate of Received Packets",
+ "type": "timeseries"
},
{
- "collapse": true,
- "collapsed": true,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 22
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
},
- "id": 14,
- "panels": [
- {
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 23
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
},
- "id": 15,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(sum(irate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
- }
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 27
+ },
+ "id": 8,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Received Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
},
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
{
- "aliasColors": { },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fill": 2,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 12,
- "y": 23
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "id": 16,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": false,
- "hideEmpty": true,
- "hideZero": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 2,
- "links": [ ],
- "minSpan": 12,
- "nullPointMode": "connected",
- "paceLength": 10,
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [ ],
- "spaceLength": 10,
- "span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sort_desc(sum(irate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{pod}}",
- "refId": "A",
- "step": 10
- }
- ],
- "thresholds": [ ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Rate of Transmitted Packets Dropped",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [ ]
- },
- "yaxes": [
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "pps",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
+ "expr": "sort_desc(sum(rate(container_network_transmit_packets_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
}
],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Errors",
- "titleSize": "h6",
- "type": "row"
+ "title": "Rate of Transmitted Packets",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 0,
+ "y": 36
+ },
+ "id": 9,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_receive_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Received Packets Dropped",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "custom": {
+ "fillOpacity": 10,
+ "showPoints": "never",
+ "spanNulls": true
+ },
+ "unit": "pps"
+ }
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 36
+ },
+ "id": 10,
+ "interval": "1m",
+ "options": {
+ "legend": {
+ "asTable": true,
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single"
+ }
+ },
+ "pluginVersion": "v11.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "expr": "sort_desc(sum(rate(container_network_transmit_packets_dropped_total{job=\"kubelet\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=~\"$type\"}) by (pod))\n",
+ "legendFormat": "__auto"
+ }
+ ],
+ "title": "Rate of Transmitted Packets Dropped",
+ "type": "timeseries"
}
],
"refresh": "10s",
- "rows": [ ],
- "schemaVersion": 18,
- "style": "dark",
+ "schemaVersion": 39,
"tags": [
"kubernetes"
],
@@ -1064,191 +480,70 @@
"hide": 0,
"label": "Data source",
"name": "datasource",
- "options": [ ],
"query": "prometheus",
- "refresh": 1,
"regex": "",
"type": "datasource"
},
{
- "allValue": null,
- "current": { },
- "datasource": "$datasource",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 2,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "cluster",
"name": "cluster",
- "options": [ ],
"query": "label_values(kube_pod_info{job=\"kube-state-metrics\"}, cluster)",
"refresh": 2,
- "regex": "",
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "sort": 1,
+ "type": "query"
},
{
"allValue": ".+",
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
"current": {
+ "selected": false,
"text": "kube-system",
"value": "kube-system"
},
- "datasource": "$datasource",
- "definition": "label_values(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\"}, namespace)",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
"hide": 0,
"includeAll": true,
- "label": null,
- "multi": false,
+ "label": "namespace",
"name": "namespace",
- "options": [ ],
- "query": "label_values(container_network_receive_packets_total{job=\"kubelet\", cluster=\"$cluster\"}, namespace)",
+ "query": "label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)",
"refresh": 2,
- "regex": "",
- "skipUrlSync": false,
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": null,
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
- "current": {
- "text": "",
- "value": ""
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
- "definition": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\"}, workload)",
"hide": 0,
- "includeAll": false,
- "label": null,
- "multi": false,
+ "label": "workload",
"name": "workload",
- "options": [ ],
- "query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\"}, workload)",
+ "query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\"}, workload)",
"refresh": 2,
- "regex": "",
- "skipUrlSync": false,
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allValue": null,
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
- "current": {
- "text": "",
- "value": ""
+ "allValue": ".+",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
},
- "datasource": "$datasource",
- "definition": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\"}, workload_type)",
"hide": 0,
"includeAll": true,
- "label": null,
- "multi": false,
+ "label": "workload_type",
"name": "type",
- "options": [ ],
- "query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\"}, workload_type)",
+ "query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\"}, workload_type)",
"refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- },
- {
- "allValue": null,
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
- "current": {
- "text": "5m",
- "value": "5m"
- },
- "datasource": "$datasource",
- "hide": 0,
- "includeAll": false,
- "label": null,
- "multi": false,
- "name": "resolution",
- "options": [
- {
- "selected": false,
- "text": "30s",
- "value": "30s"
- },
- {
- "selected": true,
- "text": "5m",
- "value": "5m"
- },
- {
- "selected": false,
- "text": "1h",
- "value": "1h"
- }
- ],
- "query": "30s,5m,1h",
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
"sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "interval",
- "useTags": false
- },
- {
- "allValue": null,
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
- "current": {
- "text": "5m",
- "value": "5m"
- },
- "datasource": "$datasource",
- "hide": 2,
- "includeAll": false,
- "label": null,
- "multi": false,
- "name": "interval",
- "options": [
- {
- "selected": true,
- "text": "4h",
- "value": "4h"
- }
- ],
- "query": "4h",
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 1,
- "tagValuesQuery": "",
- "tags": [ ],
- "tagsQuery": "",
- "type": "interval",
- "useTags": false
+ "type": "query"
}
]
},
@@ -1256,33 +551,7 @@
"from": "now-1h",
"to": "now"
},
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
"timezone": "UTC",
"title": "Networking / Workload",
- "uid": "728bf77cc1166d2f3133bf25846876cc",
- "version": 0
+ "uid": "728bf77cc1166d2f3133bf25846876cc"
}
diff --git a/charts/kubezero-metrics/jsonnet/jsonnetfile.lock.json b/charts/kubezero-metrics/jsonnet/jsonnetfile.lock.json
index 82d6d948..e956c8ee 100644
--- a/charts/kubezero-metrics/jsonnet/jsonnetfile.lock.json
+++ b/charts/kubezero-metrics/jsonnet/jsonnetfile.lock.json
@@ -18,8 +18,8 @@
"subdir": "contrib/mixin"
}
},
- "version": "65ac859a1b613a3b1b509cd80400f9fcbeae97d6",
- "sum": "xuUBd2vqF7asyVDe5CE08uPT/RxAdy8O75EjFJoMXXU="
+ "version": "010d462c0ff03a70f5c5fd32efbb76ad4c1e7c81",
+ "sum": "IXI3LQIT9NmTPJAk8WLUJd5+qZfcGpeNCyWIK7oEpws="
},
{
"source": {
@@ -58,8 +58,8 @@
"subdir": "gen/grafonnet-latest"
}
},
- "version": "6ac1593ca787638da223380ff4a3fd0f96e953e1",
- "sum": "GxEO83uxgsDclLp/fmlUJZDbSGpeUZY6Ap3G2cgdL1g="
+ "version": "5a66b0f6a0f4f7caec754dd39a0e263b56a0f90a",
+ "sum": "eyuJ0jOXeA4MrobbNgU4/v5a7ASDHslHZ0eS6hDdWoI="
},
{
"source": {
@@ -68,18 +68,18 @@
"subdir": "gen/grafonnet-v10.0.0"
}
},
- "version": "6ac1593ca787638da223380ff4a3fd0f96e953e1",
- "sum": "W7sLuAvMSJPkC7Oo31t45Nz/cUdJV7jzNSJTd3F1daM="
+ "version": "5a66b0f6a0f4f7caec754dd39a0e263b56a0f90a",
+ "sum": "xdcrJPJlpkq4+5LpGwN4tPAuheNNLXZjE6tDcyvFjr0="
},
{
"source": {
"git": {
"remote": "https://github.com/grafana/grafonnet.git",
- "subdir": "gen/grafonnet-v10.4.0"
+ "subdir": "gen/grafonnet-v11.0.0"
}
},
- "version": "6ac1593ca787638da223380ff4a3fd0f96e953e1",
- "sum": "ZSmDT7i/qU9P8ggmuPuJT+jonq1ZEsBRCXycW/H5L/A="
+ "version": "5a66b0f6a0f4f7caec754dd39a0e263b56a0f90a",
+ "sum": "Fuo+qTZZzF+sHDBWX/8fkPsUmwW6qhH8hRVz45HznfI="
},
{
"source": {
@@ -88,8 +88,8 @@
"subdir": "grafana-builder"
}
},
- "version": "b5e3f0ecb726452a92f68c5eeb983c9d972cb051",
- "sum": "+z5VY+bPBNqXcmNAV8xbJcbsRA+pro1R3IM7aIY8OlU="
+ "version": "1d877bb0651ef92176f651d0be473c06e372a8a0",
+ "sum": "udZaafkbKYMGodLqsFhEe+Oy/St2p0edrK7hiMPEey0="
},
{
"source": {
@@ -118,8 +118,8 @@
"subdir": ""
}
},
- "version": "b247371d1780f530587a8d9dd04ccb19ea970ba0",
- "sum": "7M2QHK3WhOc1xT7T7KhL9iKsCYTfsIXpmcItffAcbL0="
+ "version": "3dfa72d1d1ab31a686b1f52ec28bbf77c972bd23",
+ "sum": "7ufhpvzoDqAYLrfAsGkTAIRmu2yWQkmHukTE//jOsJU="
},
{
"source": {
@@ -128,8 +128,8 @@
"subdir": "jsonnet/kube-state-metrics"
}
},
- "version": "9e855147a20f2539b0b8c3ea1aa7cd761c104797",
- "sum": "msMZyUvcebzRILLzNlTIiSOwa1XgQKtP7jbZTkiqwM0="
+ "version": "7104d579e93d672754c018a924d6c3f7ec23874e",
+ "sum": "pvInhJNQVDOcC3NGWRMKRIP954mAvLXCQpTlafIg7fA="
},
{
"source": {
@@ -138,7 +138,7 @@
"subdir": "jsonnet/kube-state-metrics-mixin"
}
},
- "version": "9e855147a20f2539b0b8c3ea1aa7cd761c104797",
+ "version": "7104d579e93d672754c018a924d6c3f7ec23874e",
"sum": "qclI7LwucTjBef3PkGBkKxF0mfZPbHnn4rlNWKGtR4c="
},
{
@@ -148,8 +148,8 @@
"subdir": "jsonnet/kube-prometheus"
}
},
- "version": "76f2e1ef95be0df752037baa040781c5219e1fb3",
- "sum": "IgpAgyyBZ7VT2vr9kSYQP/lkZUNQnbqpGh2sYCtUKs0="
+ "version": "defa2bd1e242519c62a5c2b3b786b1caa6d906d4",
+ "sum": "INKeZ+QIIPImq+TrfHT8CpYdoRzzxRk0txG07XlOo/Q="
},
{
"source": {
@@ -158,7 +158,7 @@
"subdir": "jsonnet/mixin"
}
},
- "version": "06bdd34e7691d13b560cf1694561c5777216472b",
+ "version": "609424db53853b992277b7a9a0e5cf59f4cc24f3",
"sum": "gi+knjdxs2T715iIQIntrimbHRgHnpM8IFBJDD1gYfs=",
"name": "prometheus-operator-mixin"
},
@@ -169,8 +169,8 @@
"subdir": "jsonnet/prometheus-operator"
}
},
- "version": "06bdd34e7691d13b560cf1694561c5777216472b",
- "sum": "uZ0NldrHp01uGnOYEKB+Nq8W97bkf4EfMP9ePWIG+wk="
+ "version": "609424db53853b992277b7a9a0e5cf59f4cc24f3",
+ "sum": "z2/5LjQpWC7snhT+n/mtQqoy5986uI95sTqcKQziwGU="
},
{
"source": {
@@ -179,7 +179,7 @@
"subdir": "doc/alertmanager-mixin"
}
},
- "version": "14cbe6301c732658d6fe877ec55ad5b738abcf06",
+ "version": "eb8369ec510d76f63901379a8437c4b55885d6c5",
"sum": "IpF46ZXsm+0wJJAPtAre8+yxTNZA57mBqGpBP/r7/kw=",
"name": "alertmanager"
},
@@ -190,8 +190,8 @@
"subdir": "docs/node-mixin"
}
},
- "version": "b6227af54b20d147463e1672a3e8bfca47fa10ee",
- "sum": "vWhHvFqV7+fxrQddTeGVKi1e4EzB3VWtNyD8TjSmevY="
+ "version": "b9d0932179a0c5b3a8863f3d6cdafe8584cedc8e",
+ "sum": "rhUvbqviGjQ2mwsRhHKMN0TiS3YvnYpUXHew3XlQ+Wg="
},
{
"source": {
@@ -200,8 +200,8 @@
"subdir": "documentation/prometheus-mixin"
}
},
- "version": "633224886a1c975dd3a8a8308a0b1d630048a21c",
- "sum": "u/Fpz2MPkezy71/q+c7mF0vc3hE9fWt2W/YbvF0LP/8=",
+ "version": "ac85bd47e1cfa0d63520e4c0b4e26900c42c326b",
+ "sum": "dYLcLzGH4yF3qB7OGC/7z4nqeTNjv42L7Q3BENU8XJI=",
"name": "prometheus"
},
{
@@ -222,7 +222,7 @@
"subdir": "mixin"
}
},
- "version": "f7853dd12cc228960e24c78c10154099a9aeaec8",
+ "version": "35c0dbec856f97683a846e9c53f83156a3a44ff3",
"sum": "HhSSbGGCNHCMy1ee5jElYDm0yS9Vesa7QB2/SHKdjsY=",
"name": "thanos-mixin"
}
diff --git a/charts/kubezero-metrics/jsonnet/rules/kube-state-metrics-prometheusRule b/charts/kubezero-metrics/jsonnet/rules/kube-state-metrics-prometheusRule
index 87809b75..865227c3 100644
--- a/charts/kubezero-metrics/jsonnet/rules/kube-state-metrics-prometheusRule
+++ b/charts/kubezero-metrics/jsonnet/rules/kube-state-metrics-prometheusRule
@@ -6,7 +6,7 @@
"app.kubernetes.io/component": "exporter",
"app.kubernetes.io/name": "kube-state-metrics",
"app.kubernetes.io/part-of": "kube-prometheus",
- "app.kubernetes.io/version": "2.11.0",
+ "app.kubernetes.io/version": "2.12.0",
"prometheus": "k8s",
"role": "alert-rules"
},
diff --git a/charts/kubezero-metrics/jsonnet/rules/kubernetes-prometheusRule b/charts/kubezero-metrics/jsonnet/rules/kubernetes-prometheusRule
index 1073b17b..6ec896c8 100644
--- a/charts/kubezero-metrics/jsonnet/rules/kubernetes-prometheusRule
+++ b/charts/kubezero-metrics/jsonnet/rules/kubernetes-prometheusRule
@@ -114,7 +114,7 @@
"runbook_url": "https://runbooks.prometheus-operator.dev/runbooks/kubernetes/kubestatefulsetupdatenotrolledout",
"summary": "StatefulSet update has not been rolled out."
},
- "expr": "(\n max without (revision) (\n kube_statefulset_status_current_revision{job=\"kube-state-metrics\"}\n unless\n kube_statefulset_status_update_revision{job=\"kube-state-metrics\"}\n )\n *\n (\n kube_statefulset_replicas{job=\"kube-state-metrics\"}\n !=\n kube_statefulset_status_replicas_updated{job=\"kube-state-metrics\"}\n )\n) and (\n changes(kube_statefulset_status_replicas_updated{job=\"kube-state-metrics\"}[5m])\n ==\n 0\n)\n",
+ "expr": "(\n max by(namespace, statefulset) (\n kube_statefulset_status_current_revision{job=\"kube-state-metrics\"}\n unless\n kube_statefulset_status_update_revision{job=\"kube-state-metrics\"}\n )\n *\n (\n kube_statefulset_replicas{job=\"kube-state-metrics\"}\n !=\n kube_statefulset_status_replicas_updated{job=\"kube-state-metrics\"}\n )\n) and (\n changes(kube_statefulset_status_replicas_updated{job=\"kube-state-metrics\"}[5m])\n ==\n 0\n)\n",
"for": "15m",
"labels": {
"severity": "warning"
@@ -235,7 +235,7 @@
"runbook_url": "https://runbooks.prometheus-operator.dev/runbooks/kubernetes/kubecpuovercommit",
"summary": "Cluster has overcommitted CPU resource requests."
},
- "expr": "sum(namespace_cpu:kube_pod_container_resource_requests:sum{job=\"kube-state-metrics\",}) by (cluster) - (sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"cpu\"}) by (cluster) - max(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"cpu\"}) by (cluster)) > 0\nand\n(sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"cpu\"}) by (cluster) - max(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"cpu\"}) by (cluster)) > 0\n",
+ "expr": "sum(namespace_cpu:kube_pod_container_resource_requests:sum{}) by (cluster) - (sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"cpu\"}) by (cluster) - max(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"cpu\"}) by (cluster)) > 0\nand\n(sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"cpu\"}) by (cluster) - max(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"cpu\"}) by (cluster)) > 0\n",
"for": "10m",
"labels": {
"severity": "warning"
diff --git a/charts/kubezero-metrics/jsonnet/rules/node-exporter-prometheusRule b/charts/kubezero-metrics/jsonnet/rules/node-exporter-prometheusRule
index 2efc3481..9a92d0f8 100644
--- a/charts/kubezero-metrics/jsonnet/rules/node-exporter-prometheusRule
+++ b/charts/kubezero-metrics/jsonnet/rules/node-exporter-prometheusRule
@@ -6,7 +6,7 @@
"app.kubernetes.io/component": "exporter",
"app.kubernetes.io/name": "node-exporter",
"app.kubernetes.io/part-of": "kube-prometheus",
- "app.kubernetes.io/version": "1.7.0",
+ "app.kubernetes.io/version": "1.8.1",
"prometheus": "k8s",
"role": "alert-rules"
},
diff --git a/charts/kubezero-metrics/jsonnet/rules/prometheus-operator-prometheusRule b/charts/kubezero-metrics/jsonnet/rules/prometheus-operator-prometheusRule
index ba4b8373..1832793a 100644
--- a/charts/kubezero-metrics/jsonnet/rules/prometheus-operator-prometheusRule
+++ b/charts/kubezero-metrics/jsonnet/rules/prometheus-operator-prometheusRule
@@ -6,7 +6,7 @@
"app.kubernetes.io/component": "controller",
"app.kubernetes.io/name": "prometheus-operator",
"app.kubernetes.io/part-of": "kube-prometheus",
- "app.kubernetes.io/version": "0.72.0",
+ "app.kubernetes.io/version": "0.75.1",
"prometheus": "k8s",
"role": "alert-rules"
},
diff --git a/charts/kubezero-metrics/jsonnet/rules/prometheus-prometheusRule b/charts/kubezero-metrics/jsonnet/rules/prometheus-prometheusRule
index 6a1c6a52..2f69e837 100644
--- a/charts/kubezero-metrics/jsonnet/rules/prometheus-prometheusRule
+++ b/charts/kubezero-metrics/jsonnet/rules/prometheus-prometheusRule
@@ -7,7 +7,7 @@
"app.kubernetes.io/instance": "k8s",
"app.kubernetes.io/name": "prometheus",
"app.kubernetes.io/part-of": "kube-prometheus",
- "app.kubernetes.io/version": "2.50.1",
+ "app.kubernetes.io/version": "2.53.0",
"prometheus": "k8s",
"role": "alert-rules"
},
@@ -45,6 +45,19 @@
"severity": "warning"
}
},
+ {
+ "alert": "PrometheusKubernetesListWatchFailures",
+ "annotations": {
+ "description": "Kubernetes service discovery of Prometheus {{$labels.namespace}}/{{$labels.pod}} is experiencing {{ printf \"%.0f\" $value }} failures with LIST/WATCH requests to the Kubernetes API in the last 5 minutes.",
+ "runbook_url": "https://runbooks.prometheus-operator.dev/runbooks/prometheus/prometheuskuberneteslistwatchfailures",
+ "summary": "Requests in Kubernetes SD are failing."
+ },
+ "expr": "increase(prometheus_sd_kubernetes_failures_total{job=\"prometheus-k8s\",namespace=\"monitoring\"}[5m]) > 0\n",
+ "for": "15m",
+ "labels": {
+ "severity": "warning"
+ }
+ },
{
"alert": "PrometheusNotificationQueueRunningFull",
"annotations": {
diff --git a/charts/kubezero-metrics/templates/grafana-dashboards-k8s.yaml b/charts/kubezero-metrics/templates/grafana-dashboards-k8s.yaml
index 932f6740..f7f6f18a 100644
--- a/charts/kubezero-metrics/templates/grafana-dashboards-k8s.yaml
+++ b/charts/kubezero-metrics/templates/grafana-dashboards-k8s.yaml
@@ -16,36 +16,36 @@ binaryData:
node.json.gz:
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
apiserver.json.gz:
- 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
+ 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
cluster-total.json.gz:
- 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
+ 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
controller-manager.json.gz:
- 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
+ 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
k8s-resources-cluster.json.gz:
- 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
+ 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
k8s-resources-namespace.json.gz:
- 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
+ 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
k8s-resources-node.json.gz:
- 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
+ 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
k8s-resources-pod.json.gz:
- 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
+ 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
k8s-resources-workload.json.gz:
- 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
+ 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
k8s-resources-workloads-namespace.json.gz:
- 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
+ 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
kubelet.json.gz:
- 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
+ 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
namespace-by-pod.json.gz:
- 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
+ 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
namespace-by-workload.json.gz:
- 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
+ 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
persistentvolumesusage.json.gz:
- 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
+ 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
pod-total.json.gz:
- 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
+ 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
proxy.json.gz:
- H4sIAAAAAAAC/+1d7W/bNhP/nr9C0DYgBbzOkh03HtAPaboWxdN2WettH9bCoCVa1iyLKkkl9gw/f/uO1IspiUqctlnshl8C644vx7vj3Y8nBVwfWZY9HodxknJm/2z99bGTUSj+lIYUKzQUx4QjHpJYENdAAmIUMi6bwONGNsN+yNEkwkCdoohhSQxizF/5QIrTKMooFCWzESERDxOgdyVxFvr4nMSckohV+oeVvlEYzxXBKJ6CoDMg2L0uszMauZItpJSZrED1SBShhFVkqzD8BidBMY62Q6nDZT2RN8OjcIFJyhUZt3wSEfoMefOAkjRujL9t8weKUtzOroog6d+5w6HXH9idKpkGE3Ts9p50LMcddqx+t2N1H58OH9Xbfef3+6iHbIX6sTKvjzhiJKWeEMu+oGSB+QynrDKQPSV0gcTS7ZjEuMoLUBrg0llK8gIti9U63W5NrEUYF8w6i83IlU5DwOIz4QIk8l+jCa46j67VG0TnWOqU0xQrjTZV+WnoXxDp7lWG9Ee3Soo5ppco0jlB1WEVPSRJGAejVSJV0cZrmr6qT2gdo4U00qXQnMWJxfGS1wxu5WwxVYWx6ew2OEVxsMPgbnXwVvcCL3gOHnZBQHOs6Qq20KJkviG+nN8jcYw9Dpu00W4kJNIoPiGMT8Ol6G3rGC8g2LwP/5HDn3R/qLWBwKLtK+nXdpWqegMR5WbTTWFfyd0DsjeVyrOF2W9/OtMwSdlxR50zCGcNzwUinYOLanbqNIyicxF+pP1FYOk5EFecU/hzOhSBxTltBJapEEi/AcUs6njZcC6EKGfYawyk7vfWPSqTDYyZLuKmqTiiAeY7WAEvEykTSxfHabL2opTBdn76wf4+//nB7lh/kwlQ5ukE/5hQslx9sDePmlbZBkQOaWHMMA0xazYr4sUL5HGpD7fRJMIBjv0X5XjNQcATZVq1z3b1gDIEMo22Qi7ztv17UmNkEcpmEJEizAAFVPly66sb4rS+IWSL3TYEEXjAfnrLvVBEn1ttB9npbR7eIPFs+yk+Vkn3KAoROy8Sci0rTBDVZh7IpGz2GscBn8k41+Dhtm47JeBQbjenQXxJkR/imNcz6Q1prVdNXdIHm5EBFBHEZ2xUh3pqk8ugheOllGaC6biQGNo4YdzCoWEwA+/z22TJQ4nI9nUOdPoz9KVp6vlDxliO2qKZdB92Y4QSQY9pJpeMq3xqZxfA0EiJjaRhJxjcJeYo0GPJRPQWfpGK4U+aPL0ngrV8TLEMkdOI1LY/xQlG2vybBb9fLzEFl8OaFUHu8XDb1sizVVVKiD7eXCskhOkkwf7rLJM1+Z+VDCji+FiEfBnxx2wVe+PsJ00hFI79lMozEcR5wCc+G3sA8/nOCaRjhTGsKPbw0/9D2+IBMstf38MhDCYfF4ni46P/NNmIub96wqlZX8j8IsM/DdcRvPezcMr1zDxTvRNGsN6DVax3dYFh7xbHy3U9GiAqz3q6eEAo15w95F4fF4kwjP3wMvRTVEk1G23SlCfdqmBLtAxZU6xJ6s0zB9UEokW+5YVe6kApR+iaXu1xrwxe8uyuX8IKLXc5fWydkCQa54vEkUwrnmCS4BlijfOPkgi03bJM0G3QlfXe6oxzCEtQt5gBKj9b/c8BKpqdsAtO0XT7Upiiiz13ilKuLXUYkHKgIGUWMk4gxyzGn1IU8zDCx93Hw2Hn1sAlyz7fAHJZrwthNpvDQDAZgHkNOou9lTUc8pn1W25Mg2juF9EcPJ45LDRzVNuA+rCdU19BaJAxTM9+R64q75xKeUb53qu+6Sl35HMAOhOCqG/BCHaVXxS4ZgOFkW8LCq2PFOPc5WunBwDvTkwdytSh9gniDfaoDhVjfkXoXCA6gf3AIQNTirpfIPc2M4l1sTWJqUmZmpSpST0k0DIwNSlTk3rwgKWtJmV9LpK509qUNVlZx0WbjhVhU666HcoxhStTuDKFK1O4MoUriQGfmMKVKVztEw7s33vhChAJH3uR2EzyP0vgkY2lZ3w5put4YEtBcx8/3oNilbtc3gLFdfZRkb29UGTvWkU+OwRF9vdCkf1rFXl+CIo82QtFnlyryOf7cUD7HyjWOrt4Zb3LjGFq0A+vBq1lHVwZ+narMJXo6ink1JxCzClkn04hp/tbjdZgmC+vQbdhGtCiaHvx6/vRdQVp0axjpTS6j4q0mHyzsdZrmP8QqtIQBnkJeEw52pSjTTnalKNNOVoCwaH5JMF8krAvINBxHxgKbC1tWTkOfPmLgYFfCwa+xAYFGhRoUKBBgQYF1lBgTT5TDzT1wIf6VQJAMw8zBhhPOAmAvQVeELoaT1Ycsy+u723Mt6Nt8OyN1LPBYPeLwaSbfwNvI/d8HeZ9ZA2AOAaAGABiAEj+/6zHBQrxkrQsLt3ys6lb/JOLASVtoOT84ncrZcKvDS6539rQTGjv0OtDe7wIg0hqiMQ1iMQgEoNIRJ4h44BQknJhQFMCucM3VKWWDdx4YHDjjsoge76Ob/nF1FG+Apt5M7xAf2DKMimdfkbmq2wqH9F5di8RpKutl8pgSmMs6ljlWBwvkgiWGwfNW5aO6t6g4It1NRtF2U0pmlxcXKPg4ylKI91NDipXBxTlPU3VwFP6my3udLFyMKfwi0tkFKincElS3CulRlz7U4rpKi/ZNyGhcvGTU6EGuH5rS2k8Zfqj2roUraIoKu4gqnq7qm9VITsA2EJpSkaD2Az51cdnuvtSthrNc7A61gJME2r6FFrWdLlJxXK6cRZqxRUomstOOlY+7iO9FdybrJAnLNVasCGkqtlvhSB2lduQWND0jXMbZ0tSGCnDo2wgFb7+14bvthm+ukNbIveNJi9Q0Ne1eWnym6/C2X7q9G24x1GRs7J77SSYKSNyeWsTufrRKSBTcSFTliC23ZIQwBLdds5VUpbnVNxin2x9x3a6ykNPfXAW298nym9Hfeh1Vc4W2Nmu8tvxs0j4sViDwOeK49w4izrwQB1YncXtqw/bG7zsJ74qbyFLRX3/kDi7lWh0nifR8rN/4XoZLZVHenvQc7E7OPFx1x0OTvtevztxHW/yZDDxUH867GeNL8tM3T3a/AsLmLsVA3EAAA==
+ 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
scheduler.json.gz:
- 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
+ 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
workload-total.json.gz:
- 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
+ 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
diff --git a/charts/kubezero-metrics/templates/rules/kubernetes.yaml b/charts/kubezero-metrics/templates/rules/kubernetes.yaml
index 0101c055..40b8368c 100644
--- a/charts/kubezero-metrics/templates/rules/kubernetes.yaml
+++ b/charts/kubezero-metrics/templates/rules/kubernetes.yaml
@@ -83,7 +83,7 @@ spec:
description: StatefulSet {{`{{`}} $labels.namespace {{`}}`}}/{{`{{`}} $labels.statefulset {{`}}`}} update has not been rolled out.
runbook_url: https://runbooks.prometheus-operator.dev/runbooks/kubernetes/kubestatefulsetupdatenotrolledout
summary: StatefulSet update has not been rolled out.
- expr: "(\n max without (revision) (\n kube_statefulset_status_current_revision{job=\"kube-state-metrics\"}\n unless\n kube_statefulset_status_update_revision{job=\"kube-state-metrics\"}\n )\n *\n (\n kube_statefulset_replicas{job=\"kube-state-metrics\"}\n !=\n kube_statefulset_status_replicas_updated{job=\"kube-state-metrics\"}\n )\n) and (\n changes(kube_statefulset_status_replicas_updated{job=\"kube-state-metrics\"}[5m])\n ==\n 0\n)\n"
+ expr: "(\n max by(namespace, statefulset) (\n kube_statefulset_status_current_revision{job=\"kube-state-metrics\"}\n unless\n kube_statefulset_status_update_revision{job=\"kube-state-metrics\"}\n )\n *\n (\n kube_statefulset_replicas{job=\"kube-state-metrics\"}\n !=\n kube_statefulset_status_replicas_updated{job=\"kube-state-metrics\"}\n )\n) and (\n changes(kube_statefulset_status_replicas_updated{job=\"kube-state-metrics\"}[5m])\n ==\n 0\n)\n"
for: 15m
labels:
severity: warning
@@ -171,7 +171,7 @@ spec:
description: Cluster {{`{{`}} $labels.cluster {{`}}`}} has overcommitted CPU resource requests for Pods by {{`{{`}} $value {{`}}`}} CPU shares and cannot tolerate node failure.
runbook_url: https://runbooks.prometheus-operator.dev/runbooks/kubernetes/kubecpuovercommit
summary: Cluster has overcommitted CPU resource requests.
- expr: 'sum(namespace_cpu:kube_pod_container_resource_requests:sum{job="kube-state-metrics",}) by (cluster) - (sum(kube_node_status_allocatable{job="kube-state-metrics",resource="cpu"}) by (cluster) - max(kube_node_status_allocatable{job="kube-state-metrics",resource="cpu"}) by (cluster)) > 0
+ expr: 'sum(namespace_cpu:kube_pod_container_resource_requests:sum{}) by (cluster) - (sum(kube_node_status_allocatable{job="kube-state-metrics",resource="cpu"}) by (cluster) - max(kube_node_status_allocatable{job="kube-state-metrics",resource="cpu"}) by (cluster)) > 0
and
diff --git a/charts/kubezero-metrics/templates/rules/prometheus.yaml b/charts/kubezero-metrics/templates/rules/prometheus.yaml
index 41680aa4..9509a2b2 100644
--- a/charts/kubezero-metrics/templates/rules/prometheus.yaml
+++ b/charts/kubezero-metrics/templates/rules/prometheus.yaml
@@ -35,6 +35,17 @@ spec:
for: 20m
labels:
severity: warning
+ - alert: PrometheusKubernetesListWatchFailures
+ annotations:
+ description: Kubernetes service discovery of Prometheus {{`{{`}}$labels.namespace{{`}}`}}/{{`{{`}}$labels.pod{{`}}`}} is experiencing {{`{{`}} printf "%.0f" $value {{`}}`}} failures with LIST/WATCH requests to the Kubernetes API in the last 5 minutes.
+ runbook_url: https://runbooks.prometheus-operator.dev/runbooks/prometheus/prometheuskuberneteslistwatchfailures
+ summary: Requests in Kubernetes SD are failing.
+ expr: 'increase(prometheus_sd_kubernetes_failures_total{job="prometheus-k8s",namespace="monitoring"}[5m]) > 0
+
+ '
+ for: 15m
+ labels:
+ severity: warning
- alert: PrometheusNotificationQueueRunningFull
annotations:
description: Alert notification queue of Prometheus {{`{{`}}$labels.namespace{{`}}`}}/{{`{{`}}$labels.pod{{`}}`}} is running full.
diff --git a/charts/kubezero-storage/Chart.yaml b/charts/kubezero-storage/Chart.yaml
index 63efdae7..c6e442ba 100644
--- a/charts/kubezero-storage/Chart.yaml
+++ b/charts/kubezero-storage/Chart.yaml
@@ -28,7 +28,7 @@ dependencies:
condition: aws-ebs-csi-driver.enabled
repository: https://kubernetes-sigs.github.io/aws-ebs-csi-driver
- name: aws-efs-csi-driver
- version: 2.5.7
+ version: 3.0.6
condition: aws-efs-csi-driver.enabled
repository: https://kubernetes-sigs.github.io/aws-efs-csi-driver
- name: gemini
diff --git a/charts/kubezero-storage/aws-efs-csi-driver.patch b/charts/kubezero-storage/aws-efs-csi-driver.patch
deleted file mode 100644
index cbb41add..00000000
--- a/charts/kubezero-storage/aws-efs-csi-driver.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-diff -rtuN charts/aws-efs-csi-driver.orig/templates/controller-deployment.yaml charts/aws-efs-csi-driver/templates/controller-deployment.yaml
---- charts/aws-efs-csi-driver.orig/templates/controller-deployment.yaml 2023-08-23 11:32:48.964952023 +0000
-+++ charts/aws-efs-csi-driver/templates/controller-deployment.yaml 2023-08-23 11:32:48.968285371 +0000
-@@ -76,9 +76,14 @@
- - name: AWS_USE_FIPS_ENDPOINT
- value: "true"
- {{- end }}
-+ {{- if .Values.controller.extraEnv }}
-+ {{- toYaml .Values.controller.extraEnv | nindent 12 }}
-+ {{- end }}
- volumeMounts:
- - name: socket-dir
- mountPath: /var/lib/csi/sockets/pluginproxy/
-+ - name: aws-token
-+ mountPath: /var/run/secrets/sts.amazonaws.com/serviceaccount/
- ports:
- - name: healthz
- containerPort: {{ .Values.controller.healthPort }}
-@@ -137,6 +142,13 @@
- volumes:
- - name: socket-dir
- emptyDir: {}
-+ - name: aws-token
-+ projected:
-+ sources:
-+ - serviceAccountToken:
-+ path: token
-+ expirationSeconds: 86400
-+ audience: "sts.amazonaws.com"
- {{- with .Values.controller.affinity }}
- affinity: {{- toYaml . | nindent 8 }}
- {{- end }}
diff --git a/charts/kubezero-storage/charts/aws-ebs-csi-driver/CHANGELOG.md b/charts/kubezero-storage/charts/aws-ebs-csi-driver/CHANGELOG.md
index 56aaf3d4..b87ed65f 100644
--- a/charts/kubezero-storage/charts/aws-ebs-csi-driver/CHANGELOG.md
+++ b/charts/kubezero-storage/charts/aws-ebs-csi-driver/CHANGELOG.md
@@ -1,7 +1,29 @@
# Helm chart
+## v2.32.0
+* Bump driver version to `v1.32.0`
+* Bump CSI sidecar container versions
+* Add `patch` permission to `PV` to `external-provisioner` role (required by v5 and later)
+* Add terminationGracePeriodSeconds as a helm parameter ([#2060](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/pull/2060), [@ElijahQuinones](https://github.com/ElijahQuinones))
+* Use release namespace in ClusterRoleBinding subject namespace ([#2059](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/pull/2059), [@etutuit](https://github.com/etutuit))
+* Add parameter to override node DaemonSet namespace ([#2052](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/pull/2052), [@RuStyC0der](https://github.com/RuStyC0der))
+* Set RuntimeDefault as default seccompProfile in securityContext ([#2061](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/pull/2061), [@torredil](https://github.com/torredil))
+* Increase default provisioner, resizer, snapshotter `retry-interval-max` ([#2057](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/pull/2057), [@AndrewSirenko](https://github.com/AndrewSirenko))
+
+## v2.31.0
+* Bump driver version to `v1.31.0`
+* Expose dnsConfig in Helm Chart for Custom DNS Configuration ([#2034](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/pull/2045), [@omerap12](https://github.com/omerap12))
+* Make scrape interval configurable ([#2035](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/pull/2035), [@omerap12](https://github.com/omerap12))
+* Add defaultStorageClass parameter ([#2039](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/pull/2039), [@torredil](https://github.com/torredil))
+* Upgrade sidecar containers ([#2041](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/pull/2041), [@torredil](https://github.com/torredil))
+
+## v2.30.0
+* Bump driver version to `v1.30.0`
+* Update voluemessnapshotcontents/status RBAC ([#1991](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/pull/1991), [@AndrewSirenko](https://github.com/AndrewSirenko))
+* Upgrade dependencies ([#2016](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/pull/2016), [@torredil](https://github.com/torredil))
+
## v2.29.1
* Bump driver version to `v1.29.1`
-* Remove `--reuse-values` deprecation warning
+* Remove `--reuse-values` deprecation warning
## v2.29.0
### Urgent Upgrade Notes
diff --git a/charts/kubezero-storage/charts/aws-ebs-csi-driver/Chart.yaml b/charts/kubezero-storage/charts/aws-ebs-csi-driver/Chart.yaml
index ba6dff0b..f22a10f7 100644
--- a/charts/kubezero-storage/charts/aws-ebs-csi-driver/Chart.yaml
+++ b/charts/kubezero-storage/charts/aws-ebs-csi-driver/Chart.yaml
@@ -1,5 +1,5 @@
apiVersion: v2
-appVersion: 1.29.1
+appVersion: 1.32.0
description: A Helm chart for AWS EBS CSI Driver
home: https://github.com/kubernetes-sigs/aws-ebs-csi-driver
keywords:
@@ -13,4 +13,4 @@ maintainers:
name: aws-ebs-csi-driver
sources:
- https://github.com/kubernetes-sigs/aws-ebs-csi-driver
-version: 2.29.1
+version: 2.32.0
diff --git a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/_node-windows.tpl b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/_node-windows.tpl
index 56e8dcfa..76ab90fd 100644
--- a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/_node-windows.tpl
+++ b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/_node-windows.tpl
@@ -5,7 +5,7 @@ kind: DaemonSet
apiVersion: apps/v1
metadata:
name: {{ printf "%s-windows" .NodeName }}
- namespace: {{ .Release.Namespace }}
+ namespace: {{ .Values.node.namespaceOverride | default .Release.Namespace }}
labels:
{{- include "aws-ebs-csi-driver.labels" . | nindent 4 }}
spec:
@@ -40,6 +40,7 @@ spec:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ .Values.node.serviceAccount.name }}
+ terminationGracePeriodSeconds: {{ .Values.node.terminationGracePeriodSeconds }}
priorityClassName: {{ .Values.node.priorityClassName | default "system-node-critical" }}
tolerations:
{{- if .Values.node.tolerateAllTaints }}
@@ -49,10 +50,21 @@ spec:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- end }}
+ {{- if .Values.node.windowsHostProcess }}
+ securityContext:
+ windowsOptions:
+ hostProcess: true
+ runAsUserName: "NT AUTHORITY\\SYSTEM"
+ hostNetwork: true
+ {{- end }}
containers:
- name: ebs-plugin
image: {{ printf "%s%s:%s" (default "" .Values.image.containerRegistry) .Values.image.repository (default (printf "v%s" .Chart.AppVersion) (toString .Values.image.tag)) }}
imagePullPolicy: {{ .Values.image.pullPolicy }}
+ {{- if .Values.node.windowsHostProcess }}
+ command:
+ - "aws-ebs-csi-driver.exe"
+ {{- end }}
args:
- node
- --endpoint=$(CSI_ENDPOINT)
@@ -66,9 +78,16 @@ spec:
{{- if .Values.node.otelTracing }}
- --enable-otel-tracing=true
{{- end}}
+ {{- if .Values.node.windowsHostProcess }}
+ - --windows-host-process=true
+ {{- end }}
env:
- name: CSI_ENDPOINT
+ {{- if .Values.node.windowsHostProcess }}
+ value: unix://C:\\var\\lib\\kubelet\\plugins\\ebs.csi.aws.com\\csi.sock
+ {{- else }}
value: unix:/csi/csi.sock
+ {{- end }}
- name: CSI_NODE_NAME
valueFrom:
fieldRef:
@@ -91,12 +110,14 @@ spec:
mountPropagation: "None"
- name: plugin-dir
mountPath: C:\csi
+ {{- if not .Values.node.windowsHostProcess }}
- name: csi-proxy-disk-pipe
mountPath: \\.\pipe\csi-proxy-disk-v1
- name: csi-proxy-volume-pipe
mountPath: \\.\pipe\csi-proxy-volume-v1
- name: csi-proxy-filesystem-pipe
mountPath: \\.\pipe\csi-proxy-filesystem-v1
+ {{- end }}
ports:
- name: healthz
containerPort: 9808
@@ -113,9 +134,11 @@ spec:
resources:
{{- toYaml . | nindent 12 }}
{{- end }}
+ {{- if not .Values.node.windowsHostProcess }}
securityContext:
windowsOptions:
runAsUserName: "ContainerAdministrator"
+ {{- end }}
lifecycle:
preStop:
exec:
@@ -123,15 +146,34 @@ spec:
- name: node-driver-registrar
image: {{ printf "%s%s:%s" (default "" .Values.image.containerRegistry) .Values.sidecars.nodeDriverRegistrar.image.repository .Values.sidecars.nodeDriverRegistrar.image.tag }}
imagePullPolicy: {{ default .Values.image.pullPolicy .Values.sidecars.nodeDriverRegistrar.image.pullPolicy }}
+ {{- if .Values.node.windowsHostProcess }}
+ command:
+ - "csi-node-driver-registrar.exe"
+ {{- end }}
args:
- --csi-address=$(ADDRESS)
- --kubelet-registration-path=$(DRIVER_REG_SOCK_PATH)
+ {{- if .Values.node.windowsHostProcess }}
+ - --plugin-registration-path=$(PLUGIN_REG_DIR)
+ {{- end }}
- --v={{ .Values.sidecars.nodeDriverRegistrar.logLevel }}
env:
- name: ADDRESS
+ {{- if .Values.node.windowsHostProcess }}
+ value: unix://C:\\var\\lib\\kubelet\\plugins\\ebs.csi.aws.com\\csi.sock
+ {{- else }}
value: unix:/csi/csi.sock
+ {{- end }}
- name: DRIVER_REG_SOCK_PATH
+ {{- if .Values.node.windowsHostProcess }}
+ value: C:\\var\\lib\\kubelet\\plugins\\ebs.csi.aws.com\\csi.sock
+ {{- else }}
value: C:\var\lib\kubelet\plugins\ebs.csi.aws.com\csi.sock
+ {{- end }}
+ {{- if .Values.node.windowsHostProcess }}
+ - name: PLUGIN_REG_DIR
+ value: C:\\var\\lib\\kubelet\\plugins_registry\\
+ {{- end }}
{{- if .Values.proxy.http_proxy }}
{{- include "aws-ebs-csi-driver.http-proxy" . | nindent 12 }}
{{- end }}
@@ -161,8 +203,16 @@ spec:
- name: liveness-probe
image: {{ printf "%s%s:%s" (default "" .Values.image.containerRegistry) .Values.sidecars.livenessProbe.image.repository .Values.sidecars.livenessProbe.image.tag }}
imagePullPolicy: {{ default .Values.image.pullPolicy .Values.sidecars.livenessProbe.image.pullPolicy }}
+ {{- if .Values.node.windowsHostProcess }}
+ command:
+ - "livenessprobe.exe"
+ {{- end }}
args:
+ {{- if .Values.node.windowsHostProcess }}
+ - --csi-address=unix://C:\\var\\lib\\kubelet\\plugins\\ebs.csi.aws.com\\csi.sock
+ {{- else }}
- --csi-address=unix:/csi/csi.sock
+ {{- end }}
volumeMounts:
- name: plugin-dir
mountPath: C:\csi
@@ -189,6 +239,7 @@ spec:
hostPath:
path: C:\var\lib\kubelet\plugins_registry
type: Directory
+ {{- if not .Values.node.windowsHostProcess }}
- name: csi-proxy-disk-pipe
hostPath:
path: \\.\pipe\csi-proxy-disk-v1
@@ -201,6 +252,7 @@ spec:
hostPath:
path: \\.\pipe\csi-proxy-filesystem-v1
type: ""
+ {{- end }}
- name: probe-dir
{{- if .Values.node.probeDirVolume }}
{{- toYaml .Values.node.probeDirVolume | nindent 10 }}
diff --git a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/_node.tpl b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/_node.tpl
index d62485df..383e2a21 100644
--- a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/_node.tpl
+++ b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/_node.tpl
@@ -5,7 +5,7 @@ kind: DaemonSet
apiVersion: apps/v1
metadata:
name: {{ .NodeName }}
- namespace: {{ .Release.Namespace }}
+ namespace: {{ .Values.node.namespaceOverride | default .Release.Namespace }}
labels:
{{- include "aws-ebs-csi-driver.labels" . | nindent 4 }}
{{- with .Values.node.daemonSetAnnotations }}
@@ -44,6 +44,7 @@ spec:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ .Values.node.serviceAccount.name }}
+ terminationGracePeriodSeconds: {{ .Values.node.terminationGracePeriodSeconds }}
priorityClassName: {{ .Values.node.priorityClassName | default "system-node-critical" }}
tolerations:
{{- if .Values.node.tolerateAllTaints }}
diff --git a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/clusterrole-provisioner.yaml b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/clusterrole-provisioner.yaml
index b67c6584..cb69cc8d 100644
--- a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/clusterrole-provisioner.yaml
+++ b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/clusterrole-provisioner.yaml
@@ -8,7 +8,7 @@ metadata:
rules:
- apiGroups: [ "" ]
resources: [ "persistentvolumes" ]
- verbs: [ "get", "list", "watch", "create", "delete" ]
+ verbs: [ "get", "list", "watch", "create", "patch", "delete" ]
- apiGroups: [ "" ]
resources: [ "persistentvolumeclaims" ]
verbs: [ "get", "list", "watch", "update" ]
diff --git a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/clusterrole-snapshotter.yaml b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/clusterrole-snapshotter.yaml
index 3ef76a32..697e818d 100644
--- a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/clusterrole-snapshotter.yaml
+++ b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/clusterrole-snapshotter.yaml
@@ -24,7 +24,7 @@ rules:
verbs: [ "create", "get", "list", "watch", "update", "delete", "patch" ]
- apiGroups: [ "snapshot.storage.k8s.io" ]
resources: [ "volumesnapshotcontents/status" ]
- verbs: [ "update" ]
+ verbs: [ "update", "patch" ]
{{- with .Values.sidecars.snapshotter.additionalClusterRoleRules }}
{{- . | toYaml | nindent 2 }}
{{- end }}
diff --git a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/clusterrolebinding-csi-node.yaml b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/clusterrolebinding-csi-node.yaml
index 55231356..8615ad4f 100644
--- a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/clusterrolebinding-csi-node.yaml
+++ b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/clusterrolebinding-csi-node.yaml
@@ -8,7 +8,7 @@ metadata:
subjects:
- kind: ServiceAccount
name: {{ .Values.node.serviceAccount.name }}
- namespace: {{ .Release.Namespace }}
+ namespace: {{ .Values.node.namespaceOverride | default .Release.Namespace }}
roleRef:
kind: ClusterRole
name: ebs-csi-node-role
diff --git a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/controller.yaml b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/controller.yaml
index f9eca67f..6b393f40 100644
--- a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/controller.yaml
+++ b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/controller.yaml
@@ -227,6 +227,9 @@ spec:
- --kube-api-burst=100
- --worker-threads=100
{{- end }}
+ {{- if not (regexMatch "(-retry-interval-max)" (join " " .Values.sidecars.provisioner.additionalArgs)) }}
+ - --retry-interval-max=30m
+ {{- end }}
{{- range .Values.sidecars.provisioner.additionalArgs }}
- {{ . }}
{{- end }}
@@ -280,6 +283,9 @@ spec:
- --kube-api-burst=100
- --worker-threads=100
{{- end }}
+ {{- if not (regexMatch "(-retry-interval-max)" (join " " .Values.sidecars.attacher.additionalArgs)) }}
+ - --retry-interval-max=5m
+ {{- end }}
{{- range .Values.sidecars.attacher.additionalArgs }}
- {{ . }}
{{- end }}
@@ -322,6 +328,9 @@ spec:
- --kube-api-burst=100
- --worker-threads=100
{{- end }}
+ {{- if not (regexMatch "(-retry-interval-max)" (join " " .Values.sidecars.snapshotter.additionalArgs)) }}
+ - --retry-interval-max=30m
+ {{- end }}
{{- range .Values.sidecars.snapshotter.additionalArgs }}
- {{ . }}
{{- end }}
@@ -435,6 +444,9 @@ spec:
- --kube-api-burst=100
- --workers=100
{{- end }}
+ {{- if not (regexMatch "(-retry-interval-max)" (join " " .Values.sidecars.resizer.additionalArgs)) }}
+ - --retry-interval-max=30m
+ {{- end }}
{{- range .Values.sidecars.resizer.additionalArgs }}
- {{ . }}
{{- end }}
@@ -501,3 +513,7 @@ spec:
{{- with .Values.controller.volumes }}
{{- toYaml . | nindent 8 }}
{{- end }}
+ {{- if .Values.controller.dnsConfig }}
+ dnsConfig:
+ {{- toYaml .Values.controller.dnsConfig | nindent 4 }}
+ {{- end }}
diff --git a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/ebs-csi-default-sc.yaml b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/ebs-csi-default-sc.yaml
new file mode 100644
index 00000000..a5859572
--- /dev/null
+++ b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/ebs-csi-default-sc.yaml
@@ -0,0 +1,11 @@
+{{- if .Values.defaultStorageClass.enabled }}
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+ name: ebs-csi-default-sc
+ annotations:
+ storageclass.kubernetes.io/is-default-class: "true"
+provisioner: ebs.csi.aws.com
+volumeBindingMode: WaitForFirstConsumer
+allowVolumeExpansion: true
+{{- end }}
diff --git a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/metrics.yaml b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/metrics.yaml
index 1dcdf4dd..d68bd7ab 100644
--- a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/metrics.yaml
+++ b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/metrics.yaml
@@ -37,6 +37,6 @@ spec:
endpoints:
- targetPort: 3301
path: /metrics
- interval: 15s
+ interval: {{ .Values.controller.serviceMonitor.interval | default "15s"}}
{{- end }}
{{- end }}
diff --git a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/serviceaccount-csi-node.yaml b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/serviceaccount-csi-node.yaml
index 9f3c7c7e..1182460a 100644
--- a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/serviceaccount-csi-node.yaml
+++ b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/serviceaccount-csi-node.yaml
@@ -3,7 +3,7 @@ apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ .Values.node.serviceAccount.name }}
- namespace: {{ .Release.Namespace }}
+ namespace: {{ .Values.node.namespaceOverride | default .Release.Namespace }}
labels:
{{- include "aws-ebs-csi-driver.labels" . | nindent 4 }}
{{- with .Values.node.serviceAccount.annotations }}
diff --git a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/tests/helm-tester.yaml b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/tests/helm-tester.yaml
index 16a5bf92..08113b7c 100644
--- a/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/tests/helm-tester.yaml
+++ b/charts/kubezero-storage/charts/aws-ebs-csi-driver/templates/tests/helm-tester.yaml
@@ -136,7 +136,7 @@ metadata:
subjects:
- kind: ServiceAccount
name: ebs-csi-driver-test
- namespace: kube-system
+ namespace: {{ .Release.Namespace }}
roleRef:
kind: ClusterRole
name: ebs-csi-driver-test
@@ -214,11 +214,14 @@ spec:
kubectl config set-context kubetest2 --cluster=cluster
kubectl config set-credentials sa --token=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
kubectl config set-context kubetest2 --user=sa && kubectl config use-context kubetest2
- export FOCUS_REGEX='\bebs.csi.aws.com\b.+(validate content|resize volume|offline PVC|AllowedTopologies|store data$SNAPSHOTS)'
+ export FOCUS_REGEX='\bebs.csi.aws.com\b.+(validate content|resize volume|offline PVC|AllowedTopologies|store data'
if kubectl get crd volumesnapshots.snapshot.storage.k8s.io; then
- FORCUS_REGEX="${FOCUS_REGEX}|snapshot fields"
+ FOCUS_REGEX="${FOCUS_REGEX}|snapshot fields)"
+ else
+ FOCUS_REGEX="${FOCUS_REGEX})"
fi
- kubetest2 noop --run-id='e2e-kubernetes' --test=ginkgo -- --test-package-version="$(curl -L https://dl.k8s.io/release/stable-1.29.txt)" --skip-regex='[Disruptive]|[Serial]' --focus-regex="$FOCUS_REGEX" --parallel=25 --test-args='-storage.testdriver=/etc/config/manifests.yaml'
+ export KUBE_VERSION=$(kubectl version --output json | jq -r '.serverVersion.major + "." + .serverVersion.minor')
+ kubetest2 noop --run-id='e2e-kubernetes' --test=ginkgo -- --test-package-version="$(curl -L https://dl.k8s.io/release/stable-${KUBE_VERSION}.txt)" --skip-regex='[Disruptive]|[Serial]' --focus-regex="$FOCUS_REGEX" --parallel=25 --test-args='-storage.testdriver=/etc/config/manifests.yaml'
volumeMounts:
- name: config-vol
mountPath: /etc/config
diff --git a/charts/kubezero-storage/charts/aws-ebs-csi-driver/values.yaml b/charts/kubezero-storage/charts/aws-ebs-csi-driver/values.yaml
index 0c4e51e3..6b7216ff 100644
--- a/charts/kubezero-storage/charts/aws-ebs-csi-driver/values.yaml
+++ b/charts/kubezero-storage/charts/aws-ebs-csi-driver/values.yaml
@@ -7,11 +7,9 @@ image:
# Overrides the image tag whose default is v{{ .Chart.AppVersion }}
tag: ""
pullPolicy: IfNotPresent
-
# -- Custom labels to add into metadata
-customLabels:
- {}
- # k8s-app: aws-ebs-csi-driver
+customLabels: {}
+# k8s-app: aws-ebs-csi-driver
sidecars:
provisioner:
@@ -19,7 +17,7 @@ sidecars:
image:
pullPolicy: IfNotPresent
repository: public.ecr.aws/eks-distro/kubernetes-csi/external-provisioner
- tag: "v4.0.0-eks-1-29-7"
+ tag: "v5.0.1-eks-1-30-8"
logLevel: 2
# Additional parameters provided by external-provisioner.
additionalArgs: []
@@ -37,6 +35,8 @@ sidecars:
# renewDeadline: "10s"
# retryPeriod: "5s"
securityContext:
+ seccompProfile:
+ type: RuntimeDefault
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
attacher:
@@ -44,7 +44,7 @@ sidecars:
image:
pullPolicy: IfNotPresent
repository: public.ecr.aws/eks-distro/kubernetes-csi/external-attacher
- tag: "v4.5.0-eks-1-29-7"
+ tag: "v4.6.1-eks-1-30-8"
# Tune leader lease election for csi-attacher.
# Leader election is on by default.
leaderElection:
@@ -62,6 +62,8 @@ sidecars:
additionalClusterRoleRules: []
resources: {}
securityContext:
+ seccompProfile:
+ type: RuntimeDefault
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
snapshotter:
@@ -71,7 +73,7 @@ sidecars:
image:
pullPolicy: IfNotPresent
repository: public.ecr.aws/eks-distro/kubernetes-csi/external-snapshotter/csi-snapshotter
- tag: "v7.0.1-eks-1-29-7"
+ tag: "v8.0.1-eks-1-30-8"
logLevel: 2
# Additional parameters provided by csi-snapshotter.
additionalArgs: []
@@ -79,13 +81,15 @@ sidecars:
additionalClusterRoleRules: []
resources: {}
securityContext:
+ seccompProfile:
+ type: RuntimeDefault
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
livenessProbe:
image:
pullPolicy: IfNotPresent
repository: public.ecr.aws/eks-distro/kubernetes-csi/livenessprobe
- tag: "v2.12.0-eks-1-29-7"
+ tag: "v2.13.0-eks-1-30-8"
# Additional parameters provided by livenessprobe.
additionalArgs: []
resources: {}
@@ -97,7 +101,7 @@ sidecars:
image:
pullPolicy: IfNotPresent
repository: public.ecr.aws/eks-distro/kubernetes-csi/external-resizer
- tag: "v1.10.0-eks-1-29-7"
+ tag: "v1.11.1-eks-1-30-8"
# Tune leader lease election for csi-resizer.
# Leader election is on by default.
leaderElection:
@@ -115,6 +119,8 @@ sidecars:
additionalClusterRoleRules: []
resources: {}
securityContext:
+ seccompProfile:
+ type: RuntimeDefault
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
nodeDriverRegistrar:
@@ -122,7 +128,7 @@ sidecars:
image:
pullPolicy: IfNotPresent
repository: public.ecr.aws/eks-distro/kubernetes-csi/node-driver-registrar
- tag: "v2.10.0-eks-1-29-7"
+ tag: "v2.11.0-eks-1-30-8"
logLevel: 2
# Additional parameters provided by node-driver-registrar.
additionalArgs: []
@@ -133,9 +139,9 @@ sidecars:
livenessProbe:
exec:
command:
- - /csi-node-driver-registrar
- - --kubelet-registration-path=$(DRIVER_REG_SOCK_PATH)
- - --mode=kubelet-registration-probe
+ - /csi-node-driver-registrar
+ - --kubelet-registration-path=$(DRIVER_REG_SOCK_PATH)
+ - --mode=kubelet-registration-probe
initialDelaySeconds: 30
periodSeconds: 90
timeoutSeconds: 15
@@ -144,7 +150,7 @@ sidecars:
image:
pullPolicy: IfNotPresent
repository: public.ecr.aws/ebs-csi-driver/volume-modifier-for-k8s
- tag: "v0.2.1"
+ tag: "v0.3.0"
leaderElection:
enabled: true
# Optional values to tune lease behavior.
@@ -158,22 +164,20 @@ sidecars:
additionalArgs: []
resources: {}
securityContext:
+ seccompProfile:
+ type: RuntimeDefault
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
-
proxy:
http_proxy:
no_proxy:
-
imagePullSecrets: []
nameOverride:
fullnameOverride:
-
awsAccessSecret:
name: aws-secret
keyId: key_id
accessKey: access_key
-
controller:
batching: true
volumeModificationFeature:
@@ -185,24 +189,24 @@ controller:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- - weight: 1
- preference:
- matchExpressions:
- - key: eks.amazonaws.com/compute-type
- operator: NotIn
- values:
- - fargate
+ - weight: 1
+ preference:
+ matchExpressions:
+ - key: eks.amazonaws.com/compute-type
+ operator: NotIn
+ values:
+ - fargate
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- - podAffinityTerm:
- labelSelector:
- matchExpressions:
- - key: app
- operator: In
- values:
- - ebs-csi-controller
- topologyKey: kubernetes.io/hostname
- weight: 100
+ - podAffinityTerm:
+ labelSelector:
+ matchExpressions:
+ - key: app
+ operator: In
+ values:
+ - ebs-csi-controller
+ topologyKey: kubernetes.io/hostname
+ weight: 100
# The default filesystem type of the volume to provision when fstype is unspecified in the StorageClass.
# If the default is not set and fstype is unset in the StorageClass, then no fstype will be set
defaultFsType: ext4
@@ -229,6 +233,7 @@ controller:
# Additional labels for ServiceMonitor object
labels:
release: prometheus
+ interval: "15s"
# If set to true, AWS API call metrics will be exported to the following
# TCP endpoint: "0.0.0.0:3301"
# ---
@@ -265,7 +270,7 @@ controller:
limits:
memory: 256Mi
serviceAccount:
- # A service account will be created for you if set to true. Set to false if you want to use your own.
+ # A service account will be created for you if set to true. Set to false if you want to use your own.
create: true
name: ebs-csi-controller-sa
annotations: {}
@@ -310,6 +315,8 @@ controller:
# ---
# securityContext on the controller container (see sidecars for securityContext on sidecar containers)
containerSecurityContext:
+ seccompProfile:
+ type: RuntimeDefault
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
initContainers: []
@@ -325,6 +332,8 @@ controller:
# otelServiceName: ebs-csi-controller
# otelExporterEndpoint: "http://localhost:4317"
+ # Enable dnsConfig for the controller and node pods
+ dnsConfig: {}
node:
env: []
envFrom: []
@@ -337,28 +346,29 @@ node:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- - matchExpressions:
- - key: eks.amazonaws.com/compute-type
- operator: NotIn
- values:
- - fargate
- - key: node.kubernetes.io/instance-type
- operator: NotIn
- values:
- - a1.medium
- - a1.large
- - a1.xlarge
- - a1.2xlarge
- - a1.4xlarge
+ - matchExpressions:
+ - key: eks.amazonaws.com/compute-type
+ operator: NotIn
+ values:
+ - fargate
+ - key: node.kubernetes.io/instance-type
+ operator: NotIn
+ values:
+ - a1.medium
+ - a1.large
+ - a1.xlarge
+ - a1.2xlarge
+ - a1.4xlarge
nodeSelector: {}
daemonSetAnnotations: {}
podAnnotations: {}
podLabels: {}
+ terminationGracePeriodSeconds: 30
tolerateAllTaints: true
tolerations:
- - operator: Exists
- effect: NoExecute
- tolerationSeconds: 300
+ - operator: Exists
+ effect: NoExecute
+ tolerationSeconds: 300
resources:
requests:
cpu: 10m
@@ -397,6 +407,8 @@ node:
runAsUser: 0
runAsGroup: 0
fsGroup: 0
+ # allows you to deploy aws-ebs-csi-node daemonset to separate namespace (make sure namespace exists before deploy)
+ namespaceOverride: ""
# Add additional volume mounts on the node pods with node.volumes and node.volumeMounts
volumes: []
# Add additional volumes to be mounted onto the node pods:
@@ -410,6 +422,7 @@ node:
# mountPath: /mount/path
# ---
# securityContext on the node container (see sidecars for securityContext on sidecar containers)
+ # Privileged containers always run as `Unconfined`, which means that they are not restricted by a seccomp profile.
containerSecurityContext:
readOnlyRootFilesystem: true
privileged: true
@@ -417,19 +430,17 @@ node:
otelTracing: {}
# otelServiceName: ebs-csi-node
# otelExporterEndpoint: "http://localhost:4317"
-
additionalDaemonSets:
- # Additional node DaemonSets, using the node config structure
- # See docs/additional-daemonsets.md for more information
- #
- # example:
- # nodeSelector:
- # node.kubernetes.io/instance-type: c5.large
- # volumeAttachLimit: 15
+# Additional node DaemonSets, using the node config structure
+# See docs/additional-daemonsets.md for more information
+#
+# example:
+# nodeSelector:
+# node.kubernetes.io/instance-type: c5.large
+# volumeAttachLimit: 15
# Enable compatibility for the A1 instance family via use of an AL2-based image in a separate DaemonSet
# a1CompatibilityDaemonSet: true
-
storageClasses: []
# Add StorageClass resources like:
# - name: ebs-sc
@@ -446,6 +457,8 @@ storageClasses: []
# parameters:
# encrypted: "true"
+defaultStorageClass:
+ enabled: false
volumeSnapshotClasses: []
# Add VolumeSnapshotClass resources like:
# - name: ebs-vsc
@@ -463,8 +476,7 @@ volumeSnapshotClasses: []
# Intended for use with older clusters that cannot easily replace the CSIDriver object
# This parameter should always be false for new installations
useOldCSIDriver: false
-
helmTester:
enabled: true
# Supply a custom image to the ebs-csi-driver-test pod in helm-tester.yaml
- image: "gcr.io/k8s-staging-test-infra/kubekins-e2e:v20240311-b09cdeb92c-master"
+ image: "gcr.io/k8s-staging-test-infra/kubekins-e2e:v20240611-597c402033-master"
diff --git a/charts/kubezero-storage/charts/aws-efs-csi-driver/CHANGELOG.md b/charts/kubezero-storage/charts/aws-efs-csi-driver/CHANGELOG.md
index 85f2d4d7..a0a7190d 100644
--- a/charts/kubezero-storage/charts/aws-efs-csi-driver/CHANGELOG.md
+++ b/charts/kubezero-storage/charts/aws-efs-csi-driver/CHANGELOG.md
@@ -1,4 +1,18 @@
# Helm chart
+# v3.0.6
+* Bump app/driver version to `v2.0.5`
+# v3.0.5
+* Bump app/driver version to `v2.0.4`
+# v3.0.4
+* Bump app/driver version to `v2.0.3`
+# v3.0.3
+* Bump app/driver version to `v2.0.2`
+# v3.0.2
+* Update Helm to use the image from Public ECR rather than DockerHub
+# v3.0.1
+* Bump app/driver version to `v2.0.1`
+# v3.0.0
+* Bump app/driver version to `v2.0.0`
# v2.5.7
* Bump app/driver version to `v1.7.7`
# v2.5.6
diff --git a/charts/kubezero-storage/charts/aws-efs-csi-driver/Chart.yaml b/charts/kubezero-storage/charts/aws-efs-csi-driver/Chart.yaml
index 51c0a36a..d6a13911 100644
--- a/charts/kubezero-storage/charts/aws-efs-csi-driver/Chart.yaml
+++ b/charts/kubezero-storage/charts/aws-efs-csi-driver/Chart.yaml
@@ -1,5 +1,5 @@
apiVersion: v2
-appVersion: 1.7.7
+appVersion: 2.0.5
description: A Helm chart for AWS EFS CSI Driver
home: https://github.com/kubernetes-sigs/aws-efs-csi-driver
keywords:
@@ -15,4 +15,4 @@ maintainers:
name: aws-efs-csi-driver
sources:
- https://github.com/kubernetes-sigs/aws-efs-csi-driver
-version: 2.5.7
+version: 3.0.6
diff --git a/charts/kubezero-storage/charts/aws-efs-csi-driver/templates/controller-deployment.yaml b/charts/kubezero-storage/charts/aws-efs-csi-driver/templates/controller-deployment.yaml
index 3aa6cfb3..94e321ca 100644
--- a/charts/kubezero-storage/charts/aws-efs-csi-driver/templates/controller-deployment.yaml
+++ b/charts/kubezero-storage/charts/aws-efs-csi-driver/templates/controller-deployment.yaml
@@ -93,14 +93,15 @@ spec:
- name: AWS_USE_FIPS_ENDPOINT
value: "true"
{{- end }}
- {{- if .Values.controller.extraEnv }}
- {{- toYaml .Values.controller.extraEnv | nindent 12 }}
+ {{- with .Values.controller.env }}
+ {{- toYaml . | nindent 12 }}
{{- end }}
volumeMounts:
- name: socket-dir
mountPath: /var/lib/csi/sockets/pluginproxy/
- - name: aws-token
- mountPath: /var/run/secrets/sts.amazonaws.com/serviceaccount/
+ {{- with .Values.controller.volumeMounts }}
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
ports:
- name: healthz
containerPort: {{ .Values.controller.healthPort }}
@@ -155,6 +156,9 @@ spec:
volumeMounts:
- name: socket-dir
mountPath: /csi
+ {{- with .Values.controller.volumeMounts }}
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
{{- with .Values.sidecars.livenessProbe.resources }}
resources: {{ toYaml . | nindent 12 }}
{{- end }}
@@ -165,13 +169,9 @@ spec:
volumes:
- name: socket-dir
emptyDir: {}
- - name: aws-token
- projected:
- sources:
- - serviceAccountToken:
- path: token
- expirationSeconds: 86400
- audience: "sts.amazonaws.com"
+ {{- with .Values.controller.volumes }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
{{- with .Values.controller.affinity }}
affinity: {{- toYaml . | nindent 8 }}
{{- end }}
diff --git a/charts/kubezero-storage/charts/aws-efs-csi-driver/templates/controller-serviceaccount.yaml b/charts/kubezero-storage/charts/aws-efs-csi-driver/templates/controller-serviceaccount.yaml
index 48d1a90c..44326cd5 100644
--- a/charts/kubezero-storage/charts/aws-efs-csi-driver/templates/controller-serviceaccount.yaml
+++ b/charts/kubezero-storage/charts/aws-efs-csi-driver/templates/controller-serviceaccount.yaml
@@ -21,7 +21,7 @@ metadata:
rules:
- apiGroups: [""]
resources: ["persistentvolumes"]
- verbs: ["get", "list", "watch", "create", "delete"]
+ verbs: ["get", "list", "watch", "create", "patch", "delete"]
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
verbs: ["get", "list", "watch", "update"]
diff --git a/charts/kubezero-storage/charts/aws-efs-csi-driver/templates/node-daemonset.yaml b/charts/kubezero-storage/charts/aws-efs-csi-driver/templates/node-daemonset.yaml
index 5eb8a9bd..c472b4a9 100644
--- a/charts/kubezero-storage/charts/aws-efs-csi-driver/templates/node-daemonset.yaml
+++ b/charts/kubezero-storage/charts/aws-efs-csi-driver/templates/node-daemonset.yaml
@@ -21,6 +21,9 @@ spec:
app: efs-csi-node
app.kubernetes.io/name: {{ include "aws-efs-csi-driver.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
+ {{- with .Values.node.podLabels }}
+ {{ toYaml . | nindent 8 }}
+ {{- end }}
{{- if .Values.node.podAnnotations }}
annotations: {{ toYaml .Values.node.podAnnotations | nindent 8 }}
{{- end }}
@@ -53,7 +56,7 @@ spec:
dnsConfig: {{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ .Values.node.serviceAccount.name }}
- priorityClassName: system-node-critical
+ priorityClassName: {{ .Values.node.priorityClassName}}
{{- with .Values.node.tolerations }}
tolerations: {{- toYaml . | nindent 8 }}
{{- end }}
@@ -85,6 +88,9 @@ spec:
- name: AWS_USE_FIPS_ENDPOINT
value: "true"
{{- end }}
+ {{- with .Values.node.env }}
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
volumeMounts:
- name: kubelet-dir
mountPath: /var/lib/kubelet
@@ -97,6 +103,9 @@ spec:
mountPath: /var/amazon/efs
- name: efs-utils-config-legacy
mountPath: /etc/amazon/efs-legacy
+ {{- with .Values.node.volumeMounts }}
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
ports:
- name: healthz
containerPort: {{ .Values.node.healthPort }}
@@ -182,3 +191,6 @@ spec:
hostPath:
path: /etc/amazon/efs
type: DirectoryOrCreate
+ {{- with .Values.node.volumes }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
\ No newline at end of file
diff --git a/charts/kubezero-storage/charts/aws-efs-csi-driver/values.yaml b/charts/kubezero-storage/charts/aws-efs-csi-driver/values.yaml
index 13456b77..84b48288 100644
--- a/charts/kubezero-storage/charts/aws-efs-csi-driver/values.yaml
+++ b/charts/kubezero-storage/charts/aws-efs-csi-driver/values.yaml
@@ -10,15 +10,15 @@ replicaCount: 2
useFIPS: false
image:
- repository: amazon/aws-efs-csi-driver
- tag: "v1.7.7"
+ repository: public.ecr.aws/efs-csi-driver/amazon/aws-efs-csi-driver
+ tag: "v2.0.5"
pullPolicy: IfNotPresent
sidecars:
livenessProbe:
image:
repository: public.ecr.aws/eks-distro/kubernetes-csi/livenessprobe
- tag: v2.11.0-eks-1-29-2
+ tag: v2.13.0-eks-1-30-8
pullPolicy: IfNotPresent
resources: {}
securityContext:
@@ -27,7 +27,7 @@ sidecars:
nodeDriverRegistrar:
image:
repository: public.ecr.aws/eks-distro/kubernetes-csi/node-driver-registrar
- tag: v2.9.3-eks-1-29-2
+ tag: v2.11.0-eks-1-30-8
pullPolicy: IfNotPresent
resources: {}
securityContext:
@@ -36,7 +36,7 @@ sidecars:
csiProvisioner:
image:
repository: public.ecr.aws/eks-distro/kubernetes-csi/external-provisioner
- tag: v3.6.3-eks-1-29-2
+ tag: v5.0.1-eks-1-30-8
pullPolicy: IfNotPresent
resources: {}
securityContext:
@@ -89,6 +89,9 @@ controller:
- key: efs.csi.aws.com/agent-not-ready
operator: Exists
affinity: {}
+ env: []
+ volumes: []
+ volumeMounts: []
# Specifies whether a service account should be created
serviceAccount:
create: true
@@ -130,6 +133,7 @@ node:
# "fs-01234567":
# ip: 10.10.2.2
# region: us-east-2
+ priorityClassName: system-node-critical
dnsPolicy: ClusterFirst
dnsConfig:
{}
@@ -138,6 +142,7 @@ node:
# dnsConfig:
# nameservers:
# - 169.254.169.253
+ podLabels: {}
podAnnotations: {}
resources:
{}
@@ -178,6 +183,9 @@ node:
runAsUser: 0
runAsGroup: 0
fsGroup: 0
+ env: []
+ volumes: []
+ volumeMounts: []
storageClasses: []
# Add StorageClass resources like:
diff --git a/charts/kubezero-storage/charts/lvm-localpv/Chart.yaml b/charts/kubezero-storage/charts/lvm-localpv/Chart.yaml
index 9ffdf012..50d04e8c 100644
--- a/charts/kubezero-storage/charts/lvm-localpv/Chart.yaml
+++ b/charts/kubezero-storage/charts/lvm-localpv/Chart.yaml
@@ -1,9 +1,10 @@
apiVersion: v2
-appVersion: 1.5.0
+appVersion: 1.6.0
dependencies:
-- name: crds
+- condition: crds.enabled
+ name: crds
repository: ""
- version: 1.5.0
+ version: 1.6.0
description: CSI Driver for dynamic provisioning of LVM Persistent Local Volumes.
home: https://openebs.io/
icon: https://raw.githubusercontent.com/cncf/artwork/master/projects/openebs/icon/color/openebs-icon-color.png
@@ -14,14 +15,7 @@ keywords:
- LVM
- Local Persistent Volumes
- storage
-maintainers:
-- email: prateek.pandey@mayadata.io
- name: prateekpandey14
-- email: pawan@mayadata.io
- name: pawanpraka1
-- email: yashpal.c1995@gmail.com
- name: iyashu
name: lvm-localpv
sources:
- https://github.com/openebs/lvm-localpv
-version: 1.5.0
+version: 1.6.0
diff --git a/charts/kubezero-storage/charts/lvm-localpv/README.md b/charts/kubezero-storage/charts/lvm-localpv/README.md
index f2ff2227..e9385ec4 100644
--- a/charts/kubezero-storage/charts/lvm-localpv/README.md
+++ b/charts/kubezero-storage/charts/lvm-localpv/README.md
@@ -10,15 +10,6 @@ A Helm chart for openebs lvm localpv provisioner. This chart bootstraps OpenEBS
**Homepage:**
-## Maintainers
-
-| Name | Email | Url |
-| ---- | ------ | --- |
-| pawanpraka1 | pawan@mayadata.io | |
-| prateekpandey14 | prateek.pandey@mayadata.io | |
-| iyashu | yashpal.c1995@gmail.com | |
-
-
## Get Repo Info
```console
@@ -101,7 +92,7 @@ helm install openebs-lvmlocalpv openebs-lvmlocalpv/lvm-localpv --namespace opene
| `lvmPlugin.image.registry` | Registry for openebs-lvm-plugin image | `""` |
| `lvmPlugin.image.repository` | Image repository for openebs-lvm-plugin | `openebs/lvm-driver` |
| `lvmPlugin.image.pullPolicy` | Image pull policy for openebs-lvm-plugin | `IfNotPresent` |
-| `lvmPlugin.image.tag` | Image tag for openebs-lvm-plugin | `1.3.0` |
+| `lvmPlugin.image.tag` | Image tag for openebs-lvm-plugin | `1.6.0` |
| `lvmPlugin.metricsPort` | The TCP port number used for exposing lvm-metrics | `9500` |
| `lvmPlugin.allowedTopologies` | The comma seperated list of allowed node topologies | `kubernetes.io/hostname,` |
| `lvmNode.driverRegistrar.image.registry` | Registry for csi-node-driver-registrar image | `registry.k8s.io/` |
diff --git a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/Chart.yaml b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/Chart.yaml
index 7ad178b0..bf85f488 100644
--- a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/Chart.yaml
+++ b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/Chart.yaml
@@ -1,4 +1,4 @@
apiVersion: v2
description: A Helm chart that collects CustomResourceDefinitions (CRDs) from lvm-localpv.
name: crds
-version: 1.5.0
+version: 1.6.0
diff --git a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/_helpers.tpl b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/_helpers.tpl
index d1657f80..8e6eef83 100644
--- a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/_helpers.tpl
+++ b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/_helpers.tpl
@@ -1,17 +1,18 @@
-{{/*
- This returns a "1" if the CRD is absent in the cluster
- Usage:
- {{- if (include "crdIsAbsent" (list )) -}}
- # CRD Yaml
- {{- end -}}
-*/}}
-{{- define "crdIsAbsent" -}}
- {{- $crdName := index . 0 -}}
- {{- $crd := lookup "apiextensions.k8s.io/v1" "CustomResourceDefinition" "" $crdName -}}
- {{- $output := "1" -}}
- {{- if $crd -}}
- {{- $output = "" -}}
- {{- end -}}
+{{/* vim: set filetype=mustache: */}}
- {{- $output -}}
+{{/*
+ Adds extra annotations to CRDs. This targets two scenarios: preventing CRD recycling in case
+ the chart is removed; and adding custom annotations.
+ NOTE: This function assumes the element `metadata.annotations` already exists.
+ Usage:
+ {{- include "crds.extraAnnotations" .Values.csi.volumeSnapshots | nindent 4 }}
+*/}}
+
+{{- define "crds.extraAnnotations" -}}
+{{- if .keep -}}
+helm.sh/resource-policy: keep
+{{ end }}
+{{- with .annotations }}
+ {{- toYaml . }}
+{{- end }}
{{- end -}}
\ No newline at end of file
diff --git a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/csi-volume-snapshot-class.yaml b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/csi-volume-snapshot-class.yaml
index 93258c3d..421e37a5 100644
--- a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/csi-volume-snapshot-class.yaml
+++ b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/csi-volume-snapshot-class.yaml
@@ -1,12 +1,11 @@
{{- if .Values.csi.volumeSnapshots.enabled -}}
-{{- $crdName := "volumesnapshotclasses.snapshot.storage.k8s.io" -}}
-{{- if (include "crdIsAbsent" (list $crdName)) -}}
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
api-approved.kubernetes.io: https://github.com/kubernetes-csi/external-snapshotter/pull/814
controller-gen.kubebuilder.io/version: v0.11.3
+ {{- include "crds.extraAnnotations" .Values.csi.volumeSnapshots | nindent 4 }}
creationTimestamp: null
name: volumesnapshotclasses.snapshot.storage.k8s.io
spec:
@@ -148,5 +147,4 @@ status:
plural: ""
conditions: []
storedVersions: []
-{{- end -}}
{{- end -}}
\ No newline at end of file
diff --git a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/csi-volume-snapshot-content.yaml b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/csi-volume-snapshot-content.yaml
index ee98aa67..def585bf 100644
--- a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/csi-volume-snapshot-content.yaml
+++ b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/csi-volume-snapshot-content.yaml
@@ -1,12 +1,11 @@
{{- if .Values.csi.volumeSnapshots.enabled -}}
-{{- $crdName := "volumesnapshotcontents.snapshot.storage.k8s.io" -}}
-{{- if (include "crdIsAbsent" (list $crdName)) -}}
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
api-approved.kubernetes.io: https://github.com/kubernetes-csi/external-snapshotter/pull/814
controller-gen.kubebuilder.io/version: v0.11.3
+ {{- include "crds.extraAnnotations" .Values.csi.volumeSnapshots | nindent 4 }}
creationTimestamp: null
name: volumesnapshotcontents.snapshot.storage.k8s.io
spec:
@@ -486,5 +485,4 @@ status:
plural: ""
conditions: []
storedVersions: []
-{{- end -}}
{{- end -}}
\ No newline at end of file
diff --git a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/csi-volume-snapshot.yaml b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/csi-volume-snapshot.yaml
index 1b9c8b69..57faafba 100644
--- a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/csi-volume-snapshot.yaml
+++ b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/csi-volume-snapshot.yaml
@@ -1,12 +1,11 @@
{{- if .Values.csi.volumeSnapshots.enabled -}}
-{{- $crdName := "volumesnapshots.snapshot.storage.k8s.io" -}}
-{{- if (include "crdIsAbsent" (list $crdName)) -}}
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
api-approved.kubernetes.io: https://github.com/kubernetes-csi/external-snapshotter/pull/814
controller-gen.kubebuilder.io/version: v0.11.3
+ {{- include "crds.extraAnnotations" .Values.csi.volumeSnapshots | nindent 4 }}
creationTimestamp: null
name: volumesnapshots.snapshot.storage.k8s.io
spec:
@@ -388,5 +387,4 @@ status:
plural: ""
conditions: []
storedVersions: []
-{{- end -}}
{{- end -}}
\ No newline at end of file
diff --git a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/lvmnode.yaml b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/lvmnode.yaml
index ca801e0a..6ac4348f 100644
--- a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/lvmnode.yaml
+++ b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/lvmnode.yaml
@@ -1,6 +1,4 @@
{{- if .Values.lvmLocalPv.enabled -}}
-{{- $crdName := "lvmnodes.local.openebs.io" -}}
-{{- if (include "crdIsAbsent" (list $crdName)) -}}
##############################################
########### ############
########### LVMNode CRD ############
@@ -17,6 +15,7 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.4.0
+ {{- include "crds.extraAnnotations" .Values.lvmLocalPv | nindent 4 }}
creationTimestamp: null
name: lvmnodes.local.openebs.io
spec:
@@ -176,5 +175,4 @@ status:
plural: ""
conditions: []
storedVersions: []
-{{- end -}}
{{- end -}}
\ No newline at end of file
diff --git a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/lvmsnapshot.yaml b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/lvmsnapshot.yaml
index 115e7002..e53120eb 100644
--- a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/lvmsnapshot.yaml
+++ b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/lvmsnapshot.yaml
@@ -1,6 +1,4 @@
{{- if .Values.lvmLocalPv.enabled -}}
-{{- $crdName := "lvmsnapshots.local.openebs.io" -}}
-{{- if (include "crdIsAbsent" (list $crdName)) -}}
##############################################
########### ############
########### LVMSnapshot CRD ############
@@ -17,6 +15,7 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.4.0
+ {{- include "crds.extraAnnotations" .Values.lvmLocalPv | nindent 4 }}
creationTimestamp: null
name: lvmsnapshots.local.openebs.io
spec:
@@ -84,5 +83,4 @@ status:
plural: ""
conditions: []
storedVersions: []
-{{- end -}}
{{- end -}}
\ No newline at end of file
diff --git a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/lvmvolume.yaml b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/lvmvolume.yaml
index bdb18cbc..8c1a5c1e 100644
--- a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/lvmvolume.yaml
+++ b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/templates/lvmvolume.yaml
@@ -1,6 +1,4 @@
{{- if .Values.lvmLocalPv.enabled -}}
-{{- $crdName := "lvmvolumes.local.openebs.io" -}}
-{{- if (include "crdIsAbsent" (list $crdName)) -}}
##############################################
########### ############
########### LVMVolume CRD ############
@@ -17,6 +15,7 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.4.0
+ {{- include "crds.extraAnnotations" .Values.lvmLocalPv | nindent 4 }}
creationTimestamp: null
name: lvmvolumes.local.openebs.io
spec:
@@ -152,5 +151,4 @@ status:
plural: ""
conditions: []
storedVersions: []
-{{- end -}}
{{- end -}}
\ No newline at end of file
diff --git a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/values.yaml b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/values.yaml
index ddfb7cf2..a7ef0f50 100644
--- a/charts/kubezero-storage/charts/lvm-localpv/charts/crds/values.yaml
+++ b/charts/kubezero-storage/charts/lvm-localpv/charts/crds/values.yaml
@@ -1,8 +1,12 @@
lvmLocalPv:
# Install lvm-localpv CRDs
enabled: true
+ # Keep CRDs on chart uninstall
+ keep: true
csi:
volumeSnapshots:
# Install Volume Snapshot CRDs
enabled: true
+ # Keep CRDs on chart uninstall
+ keep: true
diff --git a/charts/kubezero-storage/charts/lvm-localpv/templates/_helpers.tpl b/charts/kubezero-storage/charts/lvm-localpv/templates/_helpers.tpl
index 6251921d..b43ec257 100644
--- a/charts/kubezero-storage/charts/lvm-localpv/templates/_helpers.tpl
+++ b/charts/kubezero-storage/charts/lvm-localpv/templates/_helpers.tpl
@@ -136,3 +136,10 @@ Create the name of the priority class for csi controller plugin
{{- printf "%s" .Values.lvmController.priorityClass.name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
+
+{{/*
+Ensure that the path to kubelet ends with a slash
+*/}}
+{{- define "lvmlocalpv.lvmNode.kubeletDir" -}}
+{{- printf "%s/" (.Values.lvmNode.kubeletDir | trimSuffix "/") -}}
+{{- end }}
diff --git a/charts/kubezero-storage/charts/lvm-localpv/templates/lvm-controller.yaml b/charts/kubezero-storage/charts/lvm-localpv/templates/lvm-controller.yaml
index 73da698e..b1729d4f 100644
--- a/charts/kubezero-storage/charts/lvm-localpv/templates/lvm-controller.yaml
+++ b/charts/kubezero-storage/charts/lvm-localpv/templates/lvm-controller.yaml
@@ -23,16 +23,6 @@ spec:
{{ toYaml . | nindent 8 }}
{{- end}}
spec:
- affinity:
- podAntiAffinity:
- requiredDuringSchedulingIgnoredDuringExecution:
- - labelSelector:
- matchExpressions:
- - key: app
- operator: In
- values:
- - openebs-lvm-controller
- topologyKey: "kubernetes.io/hostname"
{{- if .Values.lvmController.priorityClass.create }}
priorityClassName: {{ template "lvmlocalpv.lvmController.priorityClassName" . }}
{{- end }}
diff --git a/charts/kubezero-storage/charts/lvm-localpv/templates/lvm-node.yaml b/charts/kubezero-storage/charts/lvm-localpv/templates/lvm-node.yaml
index 23071ec9..a72c83e8 100644
--- a/charts/kubezero-storage/charts/lvm-localpv/templates/lvm-node.yaml
+++ b/charts/kubezero-storage/charts/lvm-localpv/templates/lvm-node.yaml
@@ -47,7 +47,7 @@ spec:
- name: ADDRESS
value: /plugin/csi.sock
- name: DRIVER_REG_SOCK_PATH
- value: {{ .Values.lvmNode.kubeletDir }}plugins/lvm-localpv/csi.sock
+ value: {{ printf "%s%s" (include "lvmlocalpv.lvmNode.kubeletDir" .) "plugins/lvm-localpv/csi.sock" | quote }}
- name: KUBE_NODE_NAME
valueFrom:
fieldRef:
@@ -117,7 +117,7 @@ spec:
- name: device-dir
mountPath: /dev
- name: pods-mount-dir
- mountPath: {{ .Values.lvmNode.kubeletDir }}
+ mountPath: {{ include "lvmlocalpv.lvmNode.kubeletDir" . | quote }}
# needed so that any mounts setup inside this container are
# propagated back to the host machine.
mountPropagation: "Bidirectional"
@@ -130,15 +130,15 @@ spec:
type: Directory
- name: registration-dir
hostPath:
- path: {{ .Values.lvmNode.kubeletDir }}plugins_registry/
+ path: {{ printf "%s%s" (include "lvmlocalpv.lvmNode.kubeletDir" .) "plugins_registry/" | quote }}
type: DirectoryOrCreate
- name: plugin-dir
hostPath:
- path: {{ .Values.lvmNode.kubeletDir }}plugins/lvm-localpv/
+ path: {{ printf "%s%s" (include "lvmlocalpv.lvmNode.kubeletDir" .) "plugins/lvm-localpv/" | quote }}
type: DirectoryOrCreate
- name: pods-mount-dir
hostPath:
- path: {{ .Values.lvmNode.kubeletDir }}
+ path: {{ include "lvmlocalpv.lvmNode.kubeletDir" . | quote }}
type: Directory
{{- if .Values.imagePullSecrets }}
imagePullSecrets:
diff --git a/charts/kubezero-storage/charts/lvm-localpv/values.yaml b/charts/kubezero-storage/charts/lvm-localpv/values.yaml
index 7f6bb54d..c40f7405 100644
--- a/charts/kubezero-storage/charts/lvm-localpv/values.yaml
+++ b/charts/kubezero-storage/charts/lvm-localpv/values.yaml
@@ -2,7 +2,7 @@
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
release:
- version: "1.5.0"
+ version: "1.6.0"
imagePullSecrets:
# - name: "image-pull-secret"
@@ -151,7 +151,7 @@ lvmPlugin:
repository: openebs/lvm-driver
pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion.
- tag: 1.5.0
+ tag: 1.6.0
ioLimits:
enabled: false
containerRuntime: containerd
@@ -187,7 +187,11 @@ crds:
lvmLocalPv:
# Install lvm-localpv CRDs
enabled: true
+ # Keep CRDs on chart uninstall
+ keep: true
csi:
volumeSnapshots:
# Install Volume Snapshot CRDs
enabled: true
+ # Keep CRDs on chart uninstall
+ keep: true
diff --git a/charts/kubezero-storage/jsonnet/dashboards/openebs-diskpool.json b/charts/kubezero-storage/jsonnet/dashboards/openebs-diskpool.json
new file mode 100644
index 00000000..4c679eff
--- /dev/null
+++ b/charts/kubezero-storage/jsonnet/dashboards/openebs-diskpool.json
@@ -0,0 +1,836 @@
+{
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": {
+ "type": "grafana",
+ "uid": "-- Grafana --"
+ },
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 0,
+ "id": 41,
+ "links": [ ],
+ "panels": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": true,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisGridShow": true,
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "opacity",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineStyle": {
+ "fill": "solid"
+ },
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "fieldMinMax": false,
+ "mappings": [
+ {
+ "options": {
+ "1": {
+ "index": 0,
+ "text": "Online"
+ },
+ "2": {
+ "index": 1,
+ "text": "Degraded"
+ },
+ "3": {
+ "index": 2,
+ "text": "Faulted"
+ },
+ "4": {
+ "index": 3,
+ "text": "Removed"
+ },
+ "5": {
+ "index": 4,
+ "text": "Unavail"
+ },
+ "6": {
+ "index": 5,
+ "text": "NoPoolsAvailable"
+ }
+ },
+ "type": "value"
+ }
+ ],
+ "max": 6,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": [ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 0,
+ "y": 0
+ },
+ "id": 1,
+ "maxDataPoints": 827,
+ "options": {
+ "legend": {
+ "calcs": [ ],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "timezone": [
+ "browser"
+ ],
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "diskpool_status{name=~\"$mayastor_diskpool\"}",
+ "instant": false,
+ "legendFormat": "{{name}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "DiskPool Status",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "fieldMinMax": false,
+ "mappings": [ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "gbytes"
+ },
+ "overrides": [ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 12,
+ "y": 0
+ },
+ "id": 2,
+ "maxDataPoints": 827,
+ "options": {
+ "legend": {
+ "calcs": [ ],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "diskpool_total_size_bytes{name=~\"$mayastor_diskpool\"}/(1024*1024*1024)",
+ "instant": false,
+ "legendFormat": "{{name}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "DiskPool Total Size",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "fieldMinMax": false,
+ "mappings": [ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "gbytes"
+ },
+ "overrides": [ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 0,
+ "y": 8
+ },
+ "id": 3,
+ "maxDataPoints": 827,
+ "options": {
+ "legend": {
+ "calcs": [ ],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "diskpool_used_size_bytes{name=~\"$mayastor_diskpool\"}/(1024*1024*1024)",
+ "instant": false,
+ "legendFormat": "{{name}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "DiskPool Used Size",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "fieldMinMax": false,
+ "mappings": [ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "gbytes"
+ },
+ "overrides": [ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 12,
+ "y": 8
+ },
+ "id": 4,
+ "maxDataPoints": 827,
+ "options": {
+ "legend": {
+ "calcs": [ ],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "(diskpool_total_size_bytes{name=~\"$mayastor_diskpool\"}-diskpool_used_size_bytes{name=~\"$mayastor_diskpool\"})/(1024*1024*1024)",
+ "instant": false,
+ "legendFormat": "{{name}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "DiskPool Available Size",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineStyle": {
+ "fill": "solid"
+ },
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "iops"
+ },
+ "overrides": [ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 0,
+ "y": 16
+ },
+ "id": 5,
+ "options": {
+ "legend": {
+ "calcs": [ ],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "10.4.0",
+ "targets": [
+ {
+ "datasource": {
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "irate(diskpool_num_read_ops{name=~\"$mayastor_diskpool\"}[1m])",
+ "interval": "",
+ "legendFormat": "read iops",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "expr": "irate(diskpool_num_write_ops{name=~\"$mayastor_diskpool\"}[1m])",
+ "format": "time_series",
+ "hide": false,
+ "instant": false,
+ "interval": "",
+ "legendFormat": "write iops",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "IOPS",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineStyle": {
+ "fill": "solid"
+ },
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "binBps"
+ },
+ "overrides": [ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 12,
+ "y": 16
+ },
+ "id": 6,
+ "options": {
+ "legend": {
+ "calcs": [ ],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "10.4.0",
+ "targets": [
+ {
+ "datasource": {
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "irate(diskpool_bytes_read{name=~\"$mayastor_diskpool\"}[1m])",
+ "interval": "",
+ "legendFormat": "read",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "expr": "irate(diskpool_bytes_written{name=~\"$mayastor_diskpool\"}[1m])",
+ "hide": false,
+ "instant": false,
+ "legendFormat": "write",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Throughput",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineStyle": {
+ "fill": "solid"
+ },
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": [ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 6,
+ "y": 24
+ },
+ "id": 7,
+ "options": {
+ "legend": {
+ "calcs": [ ],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "10.4.0",
+ "targets": [
+ {
+ "datasource": {
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "((irate(diskpool_read_latency_us{name=~\"$mayastor_diskpool\"}[1m]))/(irate(diskpool_num_read_ops{name=~\"$mayastor_diskpool\"}[1m])))/1000000",
+ "interval": "",
+ "legendFormat": "read",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "expr": "((irate(diskpool_write_latency_us{name=~\"$mayastor_diskpool\"}[1m]))/(irate(diskpool_num_write_ops{name=~\"$mayastor_diskpool\"}[1m])))/1000000",
+ "hide": false,
+ "instant": false,
+ "legendFormat": "write",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Latency",
+ "type": "timeseries"
+ }
+ ],
+ "refresh": "5s",
+ "schemaVersion": 39,
+ "tags": [
+ "OpenEBS",
+ "Mayastor"
+ ],
+ "templating": {
+ "list": [
+ {
+ "current": {
+ "selected": false,
+ "text": "Prometheus",
+ "value": "prometheus"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "multi": false,
+ "name": "datasource",
+ "options": [ ],
+ "query": "prometheus",
+ "queryValue": "",
+ "refresh": 1,
+ "regex": "",
+ "skipUrlSync": false,
+ "type": "datasource"
+ },
+ {
+ "current": {
+ "selected": true,
+ "text": [
+ "pool-on-node-1"
+ ],
+ "value": [
+ "pool-on-node-1"
+ ]
+ },
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prometheus"
+ },
+ "definition": "label_values(diskpool_status,name)",
+ "hide": 0,
+ "includeAll": true,
+ "multi": true,
+ "name": "mayastor_diskpool",
+ "options": [ ],
+ "query": {
+ "qryType": 1,
+ "query": "label_values(diskpool_status,name)",
+ "refId": "PrometheusVariableQueryEditor-VariableQuery"
+ },
+ "refresh": 2,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 0,
+ "type": "query"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-1h",
+ "to": "now"
+ },
+ "timepicker": { },
+ "timezone": "browser",
+ "title": "OpenEBS / Replicated PV / Mayastor / DiskPool",
+ "uid": "edl0359q6u1a8f",
+ "version": 7,
+ "weekStart": ""
+}
diff --git a/charts/kubezero-storage/jsonnet/dashboards/openebs-volume-replica.json b/charts/kubezero-storage/jsonnet/dashboards/openebs-volume-replica.json
new file mode 100644
index 00000000..1081c480
--- /dev/null
+++ b/charts/kubezero-storage/jsonnet/dashboards/openebs-volume-replica.json
@@ -0,0 +1,422 @@
+{
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": {
+ "type": "grafana",
+ "uid": "-- Grafana --"
+ },
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 0,
+ "id": 43,
+ "links": [ ],
+ "panels": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineStyle": {
+ "fill": "solid"
+ },
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "iops"
+ },
+ "overrides": [ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 0,
+ "y": 0
+ },
+ "id": 1,
+ "options": {
+ "legend": {
+ "calcs": [ ],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "10.4.0",
+ "targets": [
+ {
+ "datasource": {
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "irate(replica_num_read_ops{name=~\"$replica_name\"}[1m])",
+ "interval": "",
+ "legendFormat": "read",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "expr": "irate(replica_num_write_ops{name=~\"$replica_name\"}[1m])",
+ "format": "time_series",
+ "hide": false,
+ "instant": false,
+ "interval": "",
+ "legendFormat": "write",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "IOPS",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineStyle": {
+ "fill": "solid"
+ },
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "binBps"
+ },
+ "overrides": [ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 12,
+ "y": 0
+ },
+ "id": 2,
+ "options": {
+ "legend": {
+ "calcs": [ ],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "10.4.0",
+ "targets": [
+ {
+ "datasource": {
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "irate(replica_bytes_read{name=~\"$replica_name\"}[1m])",
+ "interval": "",
+ "legendFormat": "read",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "expr": "irate(replica_bytes_written{name=~\"$replica_name\"}[1m])",
+ "hide": false,
+ "instant": false,
+ "legendFormat": "write",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Throughput",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineStyle": {
+ "fill": "solid"
+ },
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": [ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 6,
+ "y": 8
+ },
+ "id": 3,
+ "options": {
+ "legend": {
+ "calcs": [ ],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "10.4.0",
+ "targets": [
+ {
+ "datasource": {
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "((irate(replica_read_latency_us{name=~\"$replica_name\"}[1m]))/(irate(replica_num_read_ops{name=~\"$replica_name\"}[1m])))/1000000",
+ "interval": "",
+ "legendFormat": "read",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "expr": "((irate(replica_write_latency_us{name=~\"$replica_name\"}[1m]))/(irate(replica_num_write_ops{name=~\"$replica_name\"}[1m])))/1000000",
+ "hide": false,
+ "instant": false,
+ "legendFormat": "write",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Latency",
+ "type": "timeseries"
+ }
+ ],
+ "refresh": "5s",
+ "schemaVersion": 39,
+ "tags": [
+ "OpenEBS",
+ "Mayastor"
+ ],
+ "templating": {
+ "list": [
+ {
+ "current": {
+ "selected": false,
+ "text": "Prometheus",
+ "value": "prometheus"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "multi": false,
+ "name": "datasource",
+ "options": [ ],
+ "query": "prometheus",
+ "refresh": 1,
+ "regex": "",
+ "skipUrlSync": false,
+ "type": "datasource"
+ },
+ {
+ "current": {
+ "selected": true,
+ "text": [
+ "All"
+ ],
+ "value": [
+ "$__all"
+ ]
+ },
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "definition": "label_values(replica_num_read_ops,name)",
+ "hide": 0,
+ "includeAll": true,
+ "multi": true,
+ "name": "replica_name",
+ "options": [ ],
+ "query": {
+ "qryType": 1,
+ "query": "label_values(replica_num_read_ops,name)",
+ "refId": "PrometheusVariableQueryEditor-VariableQuery"
+ },
+ "refresh": 2,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 0,
+ "type": "query"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-1h",
+ "to": "now"
+ },
+ "timepicker": { },
+ "timezone": "browser",
+ "title": "OpenEBS / Replicated PV / Mayastor / Volume Replica",
+ "uid": "fdl05xto1hn28e",
+ "version": 6,
+ "weekStart": ""
+}
diff --git a/charts/kubezero-storage/jsonnet/dashboards/openebs-volume.json b/charts/kubezero-storage/jsonnet/dashboards/openebs-volume.json
new file mode 100644
index 00000000..44537e86
--- /dev/null
+++ b/charts/kubezero-storage/jsonnet/dashboards/openebs-volume.json
@@ -0,0 +1,422 @@
+{
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": {
+ "type": "grafana",
+ "uid": "-- Grafana --"
+ },
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 0,
+ "id": 42,
+ "links": [ ],
+ "panels": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineStyle": {
+ "fill": "solid"
+ },
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "iops"
+ },
+ "overrides": [ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 0,
+ "y": 0
+ },
+ "id": 1,
+ "options": {
+ "legend": {
+ "calcs": [ ],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "10.4.0",
+ "targets": [
+ {
+ "datasource": {
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "irate(volume_num_read_ops{pv_name=~\"$pv_name\"}[1m])",
+ "interval": "",
+ "legendFormat": "read",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "expr": "irate(volume_num_write_ops{pv_name=~\"$pv_name\"}[1m])",
+ "format": "time_series",
+ "hide": false,
+ "instant": false,
+ "interval": "",
+ "legendFormat": "write",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "IOPS",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineStyle": {
+ "fill": "solid"
+ },
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "binBps"
+ },
+ "overrides": [ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 12,
+ "y": 0
+ },
+ "id": 2,
+ "options": {
+ "legend": {
+ "calcs": [ ],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "10.4.0",
+ "targets": [
+ {
+ "datasource": {
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "irate(volume_bytes_read{pv_name=~\"$pv_name\"}[1m])",
+ "interval": "",
+ "legendFormat": "read",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "expr": "irate(volume_bytes_written{pv_name=~\"$pv_name\"}[1m])",
+ "hide": false,
+ "instant": false,
+ "legendFormat": "write",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Throughput",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineStyle": {
+ "fill": "solid"
+ },
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": [ ]
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 6,
+ "y": 8
+ },
+ "id": 3,
+ "options": {
+ "legend": {
+ "calcs": [ ],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "10.4.0",
+ "targets": [
+ {
+ "datasource": {
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "exemplar": true,
+ "expr": "((irate(volume_read_latency_us{pv_name=~\"$pv_name\"}[1m]))/(irate(volume_num_read_ops{pv_name=~\"$pv_name\"}[1m])))/1000000",
+ "interval": "",
+ "legendFormat": "read",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "$datasource"
+ },
+ "editorMode": "code",
+ "expr": "((irate(volume_write_latency_us{pv_name=~\"$pv_name\"}[1m]))/(irate(volume_num_write_ops{pv_name=~\"$pv_name\"}[1m])))/1000000",
+ "hide": false,
+ "instant": false,
+ "legendFormat": "write",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Latency",
+ "type": "timeseries"
+ }
+ ],
+ "refresh": "5s",
+ "schemaVersion": 39,
+ "tags": [
+ "OpenEBS",
+ "Mayastor"
+ ],
+ "templating": {
+ "list": [
+ {
+ "current": {
+ "selected": false,
+ "text": "Prometheus",
+ "value": "prometheus"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "multi": false,
+ "name": "datasource",
+ "options": [ ],
+ "query": "prometheus",
+ "refresh": 1,
+ "regex": "",
+ "skipUrlSync": false,
+ "type": "datasource"
+ },
+ {
+ "current": {
+ "selected": true,
+ "text": [
+ "pvc-d070ac1c-6bb7-4ece-9893-5471c0c636a8"
+ ],
+ "value": [
+ "pvc-d070ac1c-6bb7-4ece-9893-5471c0c636a8"
+ ]
+ },
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "definition": "label_values(volume_num_read_ops,pv_name)",
+ "hide": 0,
+ "includeAll": true,
+ "multi": true,
+ "name": "pv_name",
+ "options": [ ],
+ "query": {
+ "qryType": 1,
+ "query": "label_values(volume_num_read_ops,pv_name)",
+ "refId": "PrometheusVariableQueryEditor-VariableQuery"
+ },
+ "refresh": 2,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 0,
+ "type": "query"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-1h",
+ "to": "now"
+ },
+ "timepicker": { },
+ "timezone": "browser",
+ "title": "OpenEBS / Replicated PV / Mayastor / Volume",
+ "uid": "fdl05gxyisqo0d",
+ "version": 6,
+ "weekStart": ""
+}
diff --git a/charts/kubezero-storage/jsonnet/jsonnetfile.lock.json b/charts/kubezero-storage/jsonnet/jsonnetfile.lock.json
index 6dc7ff72..536b530b 100644
--- a/charts/kubezero-storage/jsonnet/jsonnetfile.lock.json
+++ b/charts/kubezero-storage/jsonnet/jsonnetfile.lock.json
@@ -18,8 +18,8 @@
"subdir": "contrib/mixin"
}
},
- "version": "65ac859a1b613a3b1b509cd80400f9fcbeae97d6",
- "sum": "xuUBd2vqF7asyVDe5CE08uPT/RxAdy8O75EjFJoMXXU="
+ "version": "e7f572914d79f0705b3dc8ca28d9a14b0f854d49",
+ "sum": "IXI3LQIT9NmTPJAk8WLUJd5+qZfcGpeNCyWIK7oEpws="
},
{
"source": {
@@ -58,8 +58,8 @@
"subdir": "gen/grafonnet-latest"
}
},
- "version": "6ac1593ca787638da223380ff4a3fd0f96e953e1",
- "sum": "GxEO83uxgsDclLp/fmlUJZDbSGpeUZY6Ap3G2cgdL1g="
+ "version": "119d65363dff84a1976bba609f2ac3a8f450e760",
+ "sum": "eyuJ0jOXeA4MrobbNgU4/v5a7ASDHslHZ0eS6hDdWoI="
},
{
"source": {
@@ -68,18 +68,18 @@
"subdir": "gen/grafonnet-v10.0.0"
}
},
- "version": "6ac1593ca787638da223380ff4a3fd0f96e953e1",
- "sum": "W7sLuAvMSJPkC7Oo31t45Nz/cUdJV7jzNSJTd3F1daM="
+ "version": "119d65363dff84a1976bba609f2ac3a8f450e760",
+ "sum": "xdcrJPJlpkq4+5LpGwN4tPAuheNNLXZjE6tDcyvFjr0="
},
{
"source": {
"git": {
"remote": "https://github.com/grafana/grafonnet.git",
- "subdir": "gen/grafonnet-v10.4.0"
+ "subdir": "gen/grafonnet-v11.0.0"
}
},
- "version": "6ac1593ca787638da223380ff4a3fd0f96e953e1",
- "sum": "ZSmDT7i/qU9P8ggmuPuJT+jonq1ZEsBRCXycW/H5L/A="
+ "version": "119d65363dff84a1976bba609f2ac3a8f450e760",
+ "sum": "Fuo+qTZZzF+sHDBWX/8fkPsUmwW6qhH8hRVz45HznfI="
},
{
"source": {
@@ -88,8 +88,8 @@
"subdir": "grafana-builder"
}
},
- "version": "b5e3f0ecb726452a92f68c5eeb983c9d972cb051",
- "sum": "+z5VY+bPBNqXcmNAV8xbJcbsRA+pro1R3IM7aIY8OlU="
+ "version": "ea6f2601969aa12c02dbca761ce4316aff036af2",
+ "sum": "udZaafkbKYMGodLqsFhEe+Oy/St2p0edrK7hiMPEey0="
},
{
"source": {
@@ -118,8 +118,8 @@
"subdir": ""
}
},
- "version": "b247371d1780f530587a8d9dd04ccb19ea970ba0",
- "sum": "7M2QHK3WhOc1xT7T7KhL9iKsCYTfsIXpmcItffAcbL0="
+ "version": "3dfa72d1d1ab31a686b1f52ec28bbf77c972bd23",
+ "sum": "7ufhpvzoDqAYLrfAsGkTAIRmu2yWQkmHukTE//jOsJU="
},
{
"source": {
@@ -128,8 +128,8 @@
"subdir": "jsonnet/kube-state-metrics"
}
},
- "version": "9e855147a20f2539b0b8c3ea1aa7cd761c104797",
- "sum": "msMZyUvcebzRILLzNlTIiSOwa1XgQKtP7jbZTkiqwM0="
+ "version": "7104d579e93d672754c018a924d6c3f7ec23874e",
+ "sum": "pvInhJNQVDOcC3NGWRMKRIP954mAvLXCQpTlafIg7fA="
},
{
"source": {
@@ -138,7 +138,7 @@
"subdir": "jsonnet/kube-state-metrics-mixin"
}
},
- "version": "9e855147a20f2539b0b8c3ea1aa7cd761c104797",
+ "version": "7104d579e93d672754c018a924d6c3f7ec23874e",
"sum": "qclI7LwucTjBef3PkGBkKxF0mfZPbHnn4rlNWKGtR4c="
},
{
@@ -148,8 +148,8 @@
"subdir": ""
}
},
- "version": "161b5af7f7525c223b9165a13db2d6b667d08aad",
- "sum": "+4p4yiEg1uHBlA140bP7q0zGgkHxiLIoCOpI2gja0Rw="
+ "version": "ac1fc45d5b5012c1c0cd97e49d8168b783f6ec74",
+ "sum": "x4ichkWQBusHv8ph2UddBrbe4oDbKlOtwXqzQ4X+8mI="
},
{
"source": {
@@ -158,8 +158,8 @@
"subdir": "jsonnet/kube-prometheus"
}
},
- "version": "76f2e1ef95be0df752037baa040781c5219e1fb3",
- "sum": "IgpAgyyBZ7VT2vr9kSYQP/lkZUNQnbqpGh2sYCtUKs0="
+ "version": "defa2bd1e242519c62a5c2b3b786b1caa6d906d4",
+ "sum": "INKeZ+QIIPImq+TrfHT8CpYdoRzzxRk0txG07XlOo/Q="
},
{
"source": {
@@ -168,7 +168,7 @@
"subdir": "jsonnet/mixin"
}
},
- "version": "06bdd34e7691d13b560cf1694561c5777216472b",
+ "version": "609424db53853b992277b7a9a0e5cf59f4cc24f3",
"sum": "gi+knjdxs2T715iIQIntrimbHRgHnpM8IFBJDD1gYfs=",
"name": "prometheus-operator-mixin"
},
@@ -179,8 +179,8 @@
"subdir": "jsonnet/prometheus-operator"
}
},
- "version": "06bdd34e7691d13b560cf1694561c5777216472b",
- "sum": "uZ0NldrHp01uGnOYEKB+Nq8W97bkf4EfMP9ePWIG+wk="
+ "version": "609424db53853b992277b7a9a0e5cf59f4cc24f3",
+ "sum": "z2/5LjQpWC7snhT+n/mtQqoy5986uI95sTqcKQziwGU="
},
{
"source": {
@@ -189,7 +189,7 @@
"subdir": "doc/alertmanager-mixin"
}
},
- "version": "14cbe6301c732658d6fe877ec55ad5b738abcf06",
+ "version": "eb8369ec510d76f63901379a8437c4b55885d6c5",
"sum": "IpF46ZXsm+0wJJAPtAre8+yxTNZA57mBqGpBP/r7/kw=",
"name": "alertmanager"
},
@@ -200,8 +200,8 @@
"subdir": "docs/node-mixin"
}
},
- "version": "b6227af54b20d147463e1672a3e8bfca47fa10ee",
- "sum": "vWhHvFqV7+fxrQddTeGVKi1e4EzB3VWtNyD8TjSmevY="
+ "version": "b9d0932179a0c5b3a8863f3d6cdafe8584cedc8e",
+ "sum": "rhUvbqviGjQ2mwsRhHKMN0TiS3YvnYpUXHew3XlQ+Wg="
},
{
"source": {
@@ -210,8 +210,8 @@
"subdir": "documentation/prometheus-mixin"
}
},
- "version": "633224886a1c975dd3a8a8308a0b1d630048a21c",
- "sum": "u/Fpz2MPkezy71/q+c7mF0vc3hE9fWt2W/YbvF0LP/8=",
+ "version": "e9dec5fc537b1709f3a0e4c959043fb159b5d413",
+ "sum": "dYLcLzGH4yF3qB7OGC/7z4nqeTNjv42L7Q3BENU8XJI=",
"name": "prometheus"
},
{
@@ -232,7 +232,7 @@
"subdir": "mixin"
}
},
- "version": "f7853dd12cc228960e24c78c10154099a9aeaec8",
+ "version": "35c0dbec856f97683a846e9c53f83156a3a44ff3",
"sum": "HhSSbGGCNHCMy1ee5jElYDm0yS9Vesa7QB2/SHKdjsY=",
"name": "thanos-mixin"
}
diff --git a/charts/kubezero-storage/templates/k8up/crds.yaml b/charts/kubezero-storage/templates/k8up/crds.yaml
index 3e91e92a..6132e25c 100644
--- a/charts/kubezero-storage/templates/k8up/crds.yaml
+++ b/charts/kubezero-storage/templates/k8up/crds.yaml
@@ -351,6 +351,56 @@ spec:
path:
type: string
type: object
+ tlsOptions:
+ properties:
+ caCert:
+ type: string
+ clientCert:
+ type: string
+ clientKey:
+ type: string
+ type: object
+ volumeMounts:
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
type: object
failedJobsHistoryLimit:
description: |-
@@ -364,6 +414,21 @@ spec:
Deprecated: Use FailedJobsHistoryLimit and SuccessfulJobsHistoryLimit respectively.
type: integer
+ podConfigRef:
+ description: |-
+ PodConfigRef describes the pod spec with wich this action shall be executed.
+ It takes precedence over the Resources or PodSecurityContext field.
+ It does not allow changing the image or the command of the resulting pod.
+ This is for advanced use-cases only. Please only set this if you know what you're doing.
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
podSecurityContext:
description: PodSecurityContext describes the security context with which this action shall be executed.
properties:
@@ -655,6 +720,56 @@ spec:
type: object
x-kubernetes-map-type: atomic
type: object
+ tlsOptions:
+ properties:
+ caCert:
+ type: string
+ clientCert:
+ type: string
+ clientKey:
+ type: string
+ type: object
+ volumeMounts:
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
type: object
snapshot:
type: string
@@ -668,6 +783,163 @@ spec:
items:
type: string
type: array
+ volumes:
+ description: Volumes List of volumes that can be mounted by containers belonging to the pod.
+ items:
+ properties:
+ configMap:
+ description: configMap represents a configMap that should populate this volume
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items if unspecified, each key-value pair in the Data field of the referenced
+ ConfigMap will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the ConfigMap,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: optional specify whether the ConfigMap or its keys must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ name:
+ description: |-
+ name of the volume.
+ Must be a DNS_LABEL and unique within the pod.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ persistentVolumeClaim:
+ description: |-
+ persistentVolumeClaimVolumeSource represents a reference to a
+ PersistentVolumeClaim in the same namespace.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ properties:
+ claimName:
+ description: |-
+ claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ type: string
+ readOnly:
+ description: |-
+ readOnly Will force the ReadOnly setting in VolumeMounts.
+ Default false.
+ type: boolean
+ required:
+ - claimName
+ type: object
+ secret:
+ description: |-
+ secret represents a secret that should populate this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is Optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values
+ for mode bits. Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items If unspecified, each key-value pair in the Data field of the referenced
+ Secret will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the Secret,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ optional:
+ description: optional field specify whether the Secret or its keys must be defined
+ type: boolean
+ secretName:
+ description: |-
+ secretName is the name of the secret in the pod's namespace to use.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ type: string
+ type: object
+ required:
+ - name
+ type: object
+ type: array
type: object
status:
description: |-
@@ -1109,6 +1381,56 @@ spec:
path:
type: string
type: object
+ tlsOptions:
+ properties:
+ caCert:
+ type: string
+ clientCert:
+ type: string
+ clientKey:
+ type: string
+ type: object
+ volumeMounts:
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
type: object
failedJobsHistoryLimit:
description: |-
@@ -1122,6 +1444,21 @@ spec:
Deprecated: Use FailedJobsHistoryLimit and SuccessfulJobsHistoryLimit respectively.
type: integer
+ podConfigRef:
+ description: |-
+ PodConfigRef describes the pod spec with wich this action shall be executed.
+ It takes precedence over the Resources or PodSecurityContext field.
+ It does not allow changing the image or the command of the resulting pod.
+ This is for advanced use-cases only. Please only set this if you know what you're doing.
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
podSecurityContext:
description: PodSecurityContext describes the security context with which this action shall be executed.
properties:
@@ -1365,6 +1702,163 @@ spec:
items:
type: string
type: array
+ volumes:
+ description: Volumes List of volumes that can be mounted by containers belonging to the pod.
+ items:
+ properties:
+ configMap:
+ description: configMap represents a configMap that should populate this volume
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items if unspecified, each key-value pair in the Data field of the referenced
+ ConfigMap will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the ConfigMap,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: optional specify whether the ConfigMap or its keys must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ name:
+ description: |-
+ name of the volume.
+ Must be a DNS_LABEL and unique within the pod.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ persistentVolumeClaim:
+ description: |-
+ persistentVolumeClaimVolumeSource represents a reference to a
+ PersistentVolumeClaim in the same namespace.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ properties:
+ claimName:
+ description: |-
+ claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ type: string
+ readOnly:
+ description: |-
+ readOnly Will force the ReadOnly setting in VolumeMounts.
+ Default false.
+ type: boolean
+ required:
+ - claimName
+ type: object
+ secret:
+ description: |-
+ secret represents a secret that should populate this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is Optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values
+ for mode bits. Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items If unspecified, each key-value pair in the Data field of the referenced
+ Secret will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the Secret,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ optional:
+ description: optional field specify whether the Secret or its keys must be defined
+ type: boolean
+ secretName:
+ description: |-
+ secretName is the name of the secret in the pod's namespace to use.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ type: string
+ type: object
+ required:
+ - name
+ type: object
+ type: array
type: object
status:
description: |-
@@ -1801,6 +2295,56 @@ spec:
path:
type: string
type: object
+ tlsOptions:
+ properties:
+ caCert:
+ type: string
+ clientCert:
+ type: string
+ clientKey:
+ type: string
+ type: object
+ volumeMounts:
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
type: object
failedJobsHistoryLimit:
description: |-
@@ -1814,6 +2358,21 @@ spec:
Deprecated: Use FailedJobsHistoryLimit and SuccessfulJobsHistoryLimit respectively.
type: integer
+ podConfigRef:
+ description: |-
+ PodConfigRef describes the pod spec with wich this action shall be executed.
+ It takes precedence over the Resources or PodSecurityContext field.
+ It does not allow changing the image or the command of the resulting pod.
+ This is for advanced use-cases only. Please only set this if you know what you're doing.
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
podSecurityContext:
description: PodSecurityContext describes the security context with which this action shall be executed.
properties:
@@ -2046,6 +2605,163 @@ spec:
SuccessfulJobsHistoryLimit amount of successful jobs to keep for later analysis.
KeepJobs is used property is not specified.
type: integer
+ volumes:
+ description: Volumes List of volumes that can be mounted by containers belonging to the pod.
+ items:
+ properties:
+ configMap:
+ description: configMap represents a configMap that should populate this volume
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items if unspecified, each key-value pair in the Data field of the referenced
+ ConfigMap will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the ConfigMap,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: optional specify whether the ConfigMap or its keys must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ name:
+ description: |-
+ name of the volume.
+ Must be a DNS_LABEL and unique within the pod.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ persistentVolumeClaim:
+ description: |-
+ persistentVolumeClaimVolumeSource represents a reference to a
+ PersistentVolumeClaim in the same namespace.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ properties:
+ claimName:
+ description: |-
+ claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ type: string
+ readOnly:
+ description: |-
+ readOnly Will force the ReadOnly setting in VolumeMounts.
+ Default false.
+ type: boolean
+ required:
+ - claimName
+ type: object
+ secret:
+ description: |-
+ secret represents a secret that should populate this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is Optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values
+ for mode bits. Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items If unspecified, each key-value pair in the Data field of the referenced
+ Secret will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the Secret,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ optional:
+ description: optional field specify whether the Secret or its keys must be defined
+ type: boolean
+ secretName:
+ description: |-
+ secretName is the name of the secret in the pod's namespace to use.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ type: string
+ type: object
+ required:
+ - name
+ type: object
+ type: array
type: object
status:
description: |-
@@ -2131,6 +2847,7145 @@ spec:
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.14.0
+ name: podconfigs.k8up.io
+spec:
+ group: k8up.io
+ names:
+ kind: PodConfig
+ listKind: PodConfigList
+ plural: podconfigs
+ singular: podconfig
+ scope: Namespaced
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ description: |-
+ PodConfig is the Schema for the PodConcig API
+ Any annotations and labels set on this object will also be set on
+ the final pod.
+ properties:
+ apiVersion:
+ description: |-
+ APIVersion defines the versioned schema of this representation of an object.
+ Servers should convert recognized schemas to the latest internal value, and
+ may reject unrecognized values.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+ type: string
+ kind:
+ description: |-
+ Kind is a string value representing the REST resource this object represents.
+ Servers may infer this from the endpoint the client submits requests to.
+ Cannot be updated.
+ In CamelCase.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: PodConfigSpec contains the podTemplate definition.
+ properties:
+ template:
+ description: PodTemplateSpec describes the data a pod should have when created from a template
+ properties:
+ metadata:
+ description: |-
+ Standard object's metadata.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ type: object
+ spec:
+ description: |-
+ Specification of the desired behavior of the pod.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+ properties:
+ activeDeadlineSeconds:
+ description: |-
+ Optional duration in seconds the pod may be active on the node relative to
+ StartTime before the system will actively try to mark it failed and kill associated containers.
+ Value must be a positive integer.
+ format: int64
+ type: integer
+ affinity:
+ description: If specified, the pod's scheduling constraints
+ properties:
+ nodeAffinity:
+ description: Describes node affinity scheduling rules for the pod.
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ description: |-
+ The scheduler will prefer to schedule pods to nodes that satisfy
+ the affinity expressions specified by this field, but it may choose
+ a node that violates one or more of the expressions. The node that is
+ most preferred is the one with the greatest sum of weights, i.e.
+ for each node that meets all of the scheduling requirements (resource
+ request, requiredDuringScheduling affinity expressions, etc.),
+ compute a sum by iterating through the elements of this field and adding
+ "weight" to the sum if the node matches the corresponding matchExpressions; the
+ node(s) with the highest sum are the most preferred.
+ items:
+ description: |-
+ An empty preferred scheduling term matches all objects with implicit weight 0
+ (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).
+ properties:
+ preference:
+ description: A node selector term, associated with the corresponding weight.
+ properties:
+ matchExpressions:
+ description: A list of node selector requirements by node's labels.
+ items:
+ description: |-
+ A node selector requirement is a selector that contains values, a key, and an operator
+ that relates the key and values.
+ properties:
+ key:
+ description: The label key that the selector applies to.
+ type: string
+ operator:
+ description: |-
+ Represents a key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
+ type: string
+ values:
+ description: |-
+ An array of string values. If the operator is In or NotIn,
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ the values array must be empty. If the operator is Gt or Lt, the values
+ array must have a single element, which will be interpreted as an integer.
+ This array is replaced during a strategic merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchFields:
+ description: A list of node selector requirements by node's fields.
+ items:
+ description: |-
+ A node selector requirement is a selector that contains values, a key, and an operator
+ that relates the key and values.
+ properties:
+ key:
+ description: The label key that the selector applies to.
+ type: string
+ operator:
+ description: |-
+ Represents a key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
+ type: string
+ values:
+ description: |-
+ An array of string values. If the operator is In or NotIn,
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ the values array must be empty. If the operator is Gt or Lt, the values
+ array must have a single element, which will be interpreted as an integer.
+ This array is replaced during a strategic merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ type: object
+ x-kubernetes-map-type: atomic
+ weight:
+ description: Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.
+ format: int32
+ type: integer
+ required:
+ - preference
+ - weight
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ description: |-
+ If the affinity requirements specified by this field are not met at
+ scheduling time, the pod will not be scheduled onto the node.
+ If the affinity requirements specified by this field cease to be met
+ at some point during pod execution (e.g. due to an update), the system
+ may or may not try to eventually evict the pod from its node.
+ properties:
+ nodeSelectorTerms:
+ description: Required. A list of node selector terms. The terms are ORed.
+ items:
+ description: |-
+ A null or empty node selector term matches no objects. The requirements of
+ them are ANDed.
+ The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.
+ properties:
+ matchExpressions:
+ description: A list of node selector requirements by node's labels.
+ items:
+ description: |-
+ A node selector requirement is a selector that contains values, a key, and an operator
+ that relates the key and values.
+ properties:
+ key:
+ description: The label key that the selector applies to.
+ type: string
+ operator:
+ description: |-
+ Represents a key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
+ type: string
+ values:
+ description: |-
+ An array of string values. If the operator is In or NotIn,
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ the values array must be empty. If the operator is Gt or Lt, the values
+ array must have a single element, which will be interpreted as an integer.
+ This array is replaced during a strategic merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchFields:
+ description: A list of node selector requirements by node's fields.
+ items:
+ description: |-
+ A node selector requirement is a selector that contains values, a key, and an operator
+ that relates the key and values.
+ properties:
+ key:
+ description: The label key that the selector applies to.
+ type: string
+ operator:
+ description: |-
+ Represents a key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
+ type: string
+ values:
+ description: |-
+ An array of string values. If the operator is In or NotIn,
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ the values array must be empty. If the operator is Gt or Lt, the values
+ array must have a single element, which will be interpreted as an integer.
+ This array is replaced during a strategic merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ type: object
+ x-kubernetes-map-type: atomic
+ type: array
+ required:
+ - nodeSelectorTerms
+ type: object
+ x-kubernetes-map-type: atomic
+ type: object
+ podAffinity:
+ description: Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ description: |-
+ The scheduler will prefer to schedule pods to nodes that satisfy
+ the affinity expressions specified by this field, but it may choose
+ a node that violates one or more of the expressions. The node that is
+ most preferred is the one with the greatest sum of weights, i.e.
+ for each node that meets all of the scheduling requirements (resource
+ request, requiredDuringScheduling affinity expressions, etc.),
+ compute a sum by iterating through the elements of this field and adding
+ "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
+ node(s) with the highest sum are the most preferred.
+ items:
+ description: The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)
+ properties:
+ podAffinityTerm:
+ description: Required. A pod affinity term, associated with the corresponding weight.
+ properties:
+ labelSelector:
+ description: |-
+ A label query over a set of resources, in this case pods.
+ If it's null, this PodAffinityTerm matches with no Pods.
+ properties:
+ matchExpressions:
+ description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ items:
+ description: |-
+ A label selector requirement is a selector that contains values, a key, and an operator that
+ relates the key and values.
+ properties:
+ key:
+ description: key is the label key that the selector applies to.
+ type: string
+ operator:
+ description: |-
+ operator represents a key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists and DoesNotExist.
+ type: string
+ values:
+ description: |-
+ values is an array of string values. If the operator is In or NotIn,
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ the values array must be empty. This array is replaced during a strategic
+ merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: |-
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ map is equivalent to an element of matchExpressions, whose key field is "key", the
+ operator is "In", and the values array contains only "value". The requirements are ANDed.
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ matchLabelKeys:
+ description: |-
+ MatchLabelKeys is a set of pod label keys to select which pods will
+ be taken into consideration. The keys are used to lookup values from the
+ incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+ to select the group of existing pods which pods will be taken into consideration
+ for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
+ pod labels will be ignored. The default value is empty.
+ The same key is forbidden to exist in both MatchLabelKeys and LabelSelector.
+ Also, MatchLabelKeys cannot be set when LabelSelector isn't set.
+ This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ mismatchLabelKeys:
+ description: |-
+ MismatchLabelKeys is a set of pod label keys to select which pods will
+ be taken into consideration. The keys are used to lookup values from the
+ incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+ to select the group of existing pods which pods will be taken into consideration
+ for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
+ pod labels will be ignored. The default value is empty.
+ The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector.
+ Also, MismatchLabelKeys cannot be set when LabelSelector isn't set.
+ This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ namespaceSelector:
+ description: |-
+ A label query over the set of namespaces that the term applies to.
+ The term is applied to the union of the namespaces selected by this field
+ and the ones listed in the namespaces field.
+ null selector and null or empty namespaces list means "this pod's namespace".
+ An empty selector ({}) matches all namespaces.
+ properties:
+ matchExpressions:
+ description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ items:
+ description: |-
+ A label selector requirement is a selector that contains values, a key, and an operator that
+ relates the key and values.
+ properties:
+ key:
+ description: key is the label key that the selector applies to.
+ type: string
+ operator:
+ description: |-
+ operator represents a key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists and DoesNotExist.
+ type: string
+ values:
+ description: |-
+ values is an array of string values. If the operator is In or NotIn,
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ the values array must be empty. This array is replaced during a strategic
+ merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: |-
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ map is equivalent to an element of matchExpressions, whose key field is "key", the
+ operator is "In", and the values array contains only "value". The requirements are ANDed.
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ namespaces:
+ description: |-
+ namespaces specifies a static list of namespace names that the term applies to.
+ The term is applied to the union of the namespaces listed in this field
+ and the ones selected by namespaceSelector.
+ null or empty namespaces list and null namespaceSelector means "this pod's namespace".
+ items:
+ type: string
+ type: array
+ topologyKey:
+ description: |-
+ This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
+ the labelSelector in the specified namespaces, where co-located is defined as running on a node
+ whose value of the label with key topologyKey matches that of any node on which any of the
+ selected pods is running.
+ Empty topologyKey is not allowed.
+ type: string
+ required:
+ - topologyKey
+ type: object
+ weight:
+ description: |-
+ weight associated with matching the corresponding podAffinityTerm,
+ in the range 1-100.
+ format: int32
+ type: integer
+ required:
+ - podAffinityTerm
+ - weight
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ description: |-
+ If the affinity requirements specified by this field are not met at
+ scheduling time, the pod will not be scheduled onto the node.
+ If the affinity requirements specified by this field cease to be met
+ at some point during pod execution (e.g. due to a pod label update), the
+ system may or may not try to eventually evict the pod from its node.
+ When there are multiple elements, the lists of nodes corresponding to each
+ podAffinityTerm are intersected, i.e. all terms must be satisfied.
+ items:
+ description: |-
+ Defines a set of pods (namely those matching the labelSelector
+ relative to the given namespace(s)) that this pod should be
+ co-located (affinity) or not co-located (anti-affinity) with,
+ where co-located is defined as running on a node whose value of
+ the label with key matches that of any node on which
+ a pod of the set of pods is running
+ properties:
+ labelSelector:
+ description: |-
+ A label query over a set of resources, in this case pods.
+ If it's null, this PodAffinityTerm matches with no Pods.
+ properties:
+ matchExpressions:
+ description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ items:
+ description: |-
+ A label selector requirement is a selector that contains values, a key, and an operator that
+ relates the key and values.
+ properties:
+ key:
+ description: key is the label key that the selector applies to.
+ type: string
+ operator:
+ description: |-
+ operator represents a key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists and DoesNotExist.
+ type: string
+ values:
+ description: |-
+ values is an array of string values. If the operator is In or NotIn,
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ the values array must be empty. This array is replaced during a strategic
+ merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: |-
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ map is equivalent to an element of matchExpressions, whose key field is "key", the
+ operator is "In", and the values array contains only "value". The requirements are ANDed.
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ matchLabelKeys:
+ description: |-
+ MatchLabelKeys is a set of pod label keys to select which pods will
+ be taken into consideration. The keys are used to lookup values from the
+ incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+ to select the group of existing pods which pods will be taken into consideration
+ for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
+ pod labels will be ignored. The default value is empty.
+ The same key is forbidden to exist in both MatchLabelKeys and LabelSelector.
+ Also, MatchLabelKeys cannot be set when LabelSelector isn't set.
+ This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ mismatchLabelKeys:
+ description: |-
+ MismatchLabelKeys is a set of pod label keys to select which pods will
+ be taken into consideration. The keys are used to lookup values from the
+ incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+ to select the group of existing pods which pods will be taken into consideration
+ for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
+ pod labels will be ignored. The default value is empty.
+ The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector.
+ Also, MismatchLabelKeys cannot be set when LabelSelector isn't set.
+ This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ namespaceSelector:
+ description: |-
+ A label query over the set of namespaces that the term applies to.
+ The term is applied to the union of the namespaces selected by this field
+ and the ones listed in the namespaces field.
+ null selector and null or empty namespaces list means "this pod's namespace".
+ An empty selector ({}) matches all namespaces.
+ properties:
+ matchExpressions:
+ description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ items:
+ description: |-
+ A label selector requirement is a selector that contains values, a key, and an operator that
+ relates the key and values.
+ properties:
+ key:
+ description: key is the label key that the selector applies to.
+ type: string
+ operator:
+ description: |-
+ operator represents a key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists and DoesNotExist.
+ type: string
+ values:
+ description: |-
+ values is an array of string values. If the operator is In or NotIn,
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ the values array must be empty. This array is replaced during a strategic
+ merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: |-
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ map is equivalent to an element of matchExpressions, whose key field is "key", the
+ operator is "In", and the values array contains only "value". The requirements are ANDed.
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ namespaces:
+ description: |-
+ namespaces specifies a static list of namespace names that the term applies to.
+ The term is applied to the union of the namespaces listed in this field
+ and the ones selected by namespaceSelector.
+ null or empty namespaces list and null namespaceSelector means "this pod's namespace".
+ items:
+ type: string
+ type: array
+ topologyKey:
+ description: |-
+ This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
+ the labelSelector in the specified namespaces, where co-located is defined as running on a node
+ whose value of the label with key topologyKey matches that of any node on which any of the
+ selected pods is running.
+ Empty topologyKey is not allowed.
+ type: string
+ required:
+ - topologyKey
+ type: object
+ type: array
+ type: object
+ podAntiAffinity:
+ description: Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ description: |-
+ The scheduler will prefer to schedule pods to nodes that satisfy
+ the anti-affinity expressions specified by this field, but it may choose
+ a node that violates one or more of the expressions. The node that is
+ most preferred is the one with the greatest sum of weights, i.e.
+ for each node that meets all of the scheduling requirements (resource
+ request, requiredDuringScheduling anti-affinity expressions, etc.),
+ compute a sum by iterating through the elements of this field and adding
+ "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
+ node(s) with the highest sum are the most preferred.
+ items:
+ description: The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)
+ properties:
+ podAffinityTerm:
+ description: Required. A pod affinity term, associated with the corresponding weight.
+ properties:
+ labelSelector:
+ description: |-
+ A label query over a set of resources, in this case pods.
+ If it's null, this PodAffinityTerm matches with no Pods.
+ properties:
+ matchExpressions:
+ description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ items:
+ description: |-
+ A label selector requirement is a selector that contains values, a key, and an operator that
+ relates the key and values.
+ properties:
+ key:
+ description: key is the label key that the selector applies to.
+ type: string
+ operator:
+ description: |-
+ operator represents a key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists and DoesNotExist.
+ type: string
+ values:
+ description: |-
+ values is an array of string values. If the operator is In or NotIn,
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ the values array must be empty. This array is replaced during a strategic
+ merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: |-
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ map is equivalent to an element of matchExpressions, whose key field is "key", the
+ operator is "In", and the values array contains only "value". The requirements are ANDed.
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ matchLabelKeys:
+ description: |-
+ MatchLabelKeys is a set of pod label keys to select which pods will
+ be taken into consideration. The keys are used to lookup values from the
+ incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+ to select the group of existing pods which pods will be taken into consideration
+ for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
+ pod labels will be ignored. The default value is empty.
+ The same key is forbidden to exist in both MatchLabelKeys and LabelSelector.
+ Also, MatchLabelKeys cannot be set when LabelSelector isn't set.
+ This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ mismatchLabelKeys:
+ description: |-
+ MismatchLabelKeys is a set of pod label keys to select which pods will
+ be taken into consideration. The keys are used to lookup values from the
+ incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+ to select the group of existing pods which pods will be taken into consideration
+ for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
+ pod labels will be ignored. The default value is empty.
+ The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector.
+ Also, MismatchLabelKeys cannot be set when LabelSelector isn't set.
+ This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ namespaceSelector:
+ description: |-
+ A label query over the set of namespaces that the term applies to.
+ The term is applied to the union of the namespaces selected by this field
+ and the ones listed in the namespaces field.
+ null selector and null or empty namespaces list means "this pod's namespace".
+ An empty selector ({}) matches all namespaces.
+ properties:
+ matchExpressions:
+ description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ items:
+ description: |-
+ A label selector requirement is a selector that contains values, a key, and an operator that
+ relates the key and values.
+ properties:
+ key:
+ description: key is the label key that the selector applies to.
+ type: string
+ operator:
+ description: |-
+ operator represents a key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists and DoesNotExist.
+ type: string
+ values:
+ description: |-
+ values is an array of string values. If the operator is In or NotIn,
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ the values array must be empty. This array is replaced during a strategic
+ merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: |-
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ map is equivalent to an element of matchExpressions, whose key field is "key", the
+ operator is "In", and the values array contains only "value". The requirements are ANDed.
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ namespaces:
+ description: |-
+ namespaces specifies a static list of namespace names that the term applies to.
+ The term is applied to the union of the namespaces listed in this field
+ and the ones selected by namespaceSelector.
+ null or empty namespaces list and null namespaceSelector means "this pod's namespace".
+ items:
+ type: string
+ type: array
+ topologyKey:
+ description: |-
+ This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
+ the labelSelector in the specified namespaces, where co-located is defined as running on a node
+ whose value of the label with key topologyKey matches that of any node on which any of the
+ selected pods is running.
+ Empty topologyKey is not allowed.
+ type: string
+ required:
+ - topologyKey
+ type: object
+ weight:
+ description: |-
+ weight associated with matching the corresponding podAffinityTerm,
+ in the range 1-100.
+ format: int32
+ type: integer
+ required:
+ - podAffinityTerm
+ - weight
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ description: |-
+ If the anti-affinity requirements specified by this field are not met at
+ scheduling time, the pod will not be scheduled onto the node.
+ If the anti-affinity requirements specified by this field cease to be met
+ at some point during pod execution (e.g. due to a pod label update), the
+ system may or may not try to eventually evict the pod from its node.
+ When there are multiple elements, the lists of nodes corresponding to each
+ podAffinityTerm are intersected, i.e. all terms must be satisfied.
+ items:
+ description: |-
+ Defines a set of pods (namely those matching the labelSelector
+ relative to the given namespace(s)) that this pod should be
+ co-located (affinity) or not co-located (anti-affinity) with,
+ where co-located is defined as running on a node whose value of
+ the label with key matches that of any node on which
+ a pod of the set of pods is running
+ properties:
+ labelSelector:
+ description: |-
+ A label query over a set of resources, in this case pods.
+ If it's null, this PodAffinityTerm matches with no Pods.
+ properties:
+ matchExpressions:
+ description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ items:
+ description: |-
+ A label selector requirement is a selector that contains values, a key, and an operator that
+ relates the key and values.
+ properties:
+ key:
+ description: key is the label key that the selector applies to.
+ type: string
+ operator:
+ description: |-
+ operator represents a key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists and DoesNotExist.
+ type: string
+ values:
+ description: |-
+ values is an array of string values. If the operator is In or NotIn,
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ the values array must be empty. This array is replaced during a strategic
+ merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: |-
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ map is equivalent to an element of matchExpressions, whose key field is "key", the
+ operator is "In", and the values array contains only "value". The requirements are ANDed.
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ matchLabelKeys:
+ description: |-
+ MatchLabelKeys is a set of pod label keys to select which pods will
+ be taken into consideration. The keys are used to lookup values from the
+ incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+ to select the group of existing pods which pods will be taken into consideration
+ for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
+ pod labels will be ignored. The default value is empty.
+ The same key is forbidden to exist in both MatchLabelKeys and LabelSelector.
+ Also, MatchLabelKeys cannot be set when LabelSelector isn't set.
+ This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ mismatchLabelKeys:
+ description: |-
+ MismatchLabelKeys is a set of pod label keys to select which pods will
+ be taken into consideration. The keys are used to lookup values from the
+ incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+ to select the group of existing pods which pods will be taken into consideration
+ for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
+ pod labels will be ignored. The default value is empty.
+ The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector.
+ Also, MismatchLabelKeys cannot be set when LabelSelector isn't set.
+ This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ namespaceSelector:
+ description: |-
+ A label query over the set of namespaces that the term applies to.
+ The term is applied to the union of the namespaces selected by this field
+ and the ones listed in the namespaces field.
+ null selector and null or empty namespaces list means "this pod's namespace".
+ An empty selector ({}) matches all namespaces.
+ properties:
+ matchExpressions:
+ description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ items:
+ description: |-
+ A label selector requirement is a selector that contains values, a key, and an operator that
+ relates the key and values.
+ properties:
+ key:
+ description: key is the label key that the selector applies to.
+ type: string
+ operator:
+ description: |-
+ operator represents a key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists and DoesNotExist.
+ type: string
+ values:
+ description: |-
+ values is an array of string values. If the operator is In or NotIn,
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ the values array must be empty. This array is replaced during a strategic
+ merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: |-
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ map is equivalent to an element of matchExpressions, whose key field is "key", the
+ operator is "In", and the values array contains only "value". The requirements are ANDed.
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ namespaces:
+ description: |-
+ namespaces specifies a static list of namespace names that the term applies to.
+ The term is applied to the union of the namespaces listed in this field
+ and the ones selected by namespaceSelector.
+ null or empty namespaces list and null namespaceSelector means "this pod's namespace".
+ items:
+ type: string
+ type: array
+ topologyKey:
+ description: |-
+ This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
+ the labelSelector in the specified namespaces, where co-located is defined as running on a node
+ whose value of the label with key topologyKey matches that of any node on which any of the
+ selected pods is running.
+ Empty topologyKey is not allowed.
+ type: string
+ required:
+ - topologyKey
+ type: object
+ type: array
+ type: object
+ type: object
+ automountServiceAccountToken:
+ description: AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.
+ type: boolean
+ containers:
+ description: |-
+ List of containers belonging to the pod.
+ Containers cannot currently be added or removed.
+ There must be at least one container in a Pod.
+ Cannot be updated.
+ items:
+ description: A single application container that you want to run within a pod.
+ properties:
+ args:
+ description: |-
+ Arguments to the entrypoint.
+ The container image's CMD is used if this is not provided.
+ Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
+ cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will
+ produce the string literal "$(VAR_NAME)". Escaped references will never be expanded, regardless
+ of whether the variable exists or not. Cannot be updated.
+ More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
+ items:
+ type: string
+ type: array
+ command:
+ description: |-
+ Entrypoint array. Not executed within a shell.
+ The container image's ENTRYPOINT is used if this is not provided.
+ Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
+ cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will
+ produce the string literal "$(VAR_NAME)". Escaped references will never be expanded, regardless
+ of whether the variable exists or not. Cannot be updated.
+ More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
+ items:
+ type: string
+ type: array
+ env:
+ description: |-
+ List of environment variables to set in the container.
+ Cannot be updated.
+ items:
+ description: EnvVar represents an environment variable present in a Container.
+ properties:
+ name:
+ description: Name of the environment variable. Must be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $$ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment variable's value. Cannot be used if value is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: Specify whether the ConfigMap or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ properties:
+ apiVersion:
+ description: Version of the schema the FieldPath is written in terms of, defaults to "v1".
+ type: string
+ fieldPath:
+ description: Path of the field to select in the specified API version.
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
+ properties:
+ containerName:
+ description: 'Container name: required for volumes, optional for env vars'
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ description: Specifies the output format of the exposed resources, defaults to "1"
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ description: 'Required: resource to select'
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ secretKeyRef:
+ description: Selects a key of a secret in the pod's namespace
+ properties:
+ key:
+ description: The key of the secret to select from. Must be a valid secret key.
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: Specify whether the Secret or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ envFrom:
+ description: |-
+ List of sources to populate environment variables in the container.
+ The keys defined within a source must be a C_IDENTIFIER. All invalid keys
+ will be reported as an event when the container is starting. When a key exists in multiple
+ sources, the value associated with the last source will take precedence.
+ Values defined by an Env with a duplicate key will take precedence.
+ Cannot be updated.
+ items:
+ description: EnvFromSource represents the source of a set of ConfigMaps
+ properties:
+ configMapRef:
+ description: The ConfigMap to select from
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: Specify whether the ConfigMap must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ prefix:
+ description: An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.
+ type: string
+ secretRef:
+ description: The Secret to select from
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: Specify whether the Secret must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ type: object
+ type: array
+ image:
+ description: |-
+ Container image name.
+ More info: https://kubernetes.io/docs/concepts/containers/images
+ This field is optional to allow higher level config management to default or override
+ container images in workload controllers like Deployments and StatefulSets.
+ type: string
+ imagePullPolicy:
+ description: |-
+ Image pull policy.
+ One of Always, Never, IfNotPresent.
+ Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.
+ Cannot be updated.
+ More info: https://kubernetes.io/docs/concepts/containers/images#updating-images
+ type: string
+ lifecycle:
+ description: |-
+ Actions that the management system should take in response to container lifecycle events.
+ Cannot be updated.
+ properties:
+ postStart:
+ description: |-
+ PostStart is called immediately after a container is created. If the handler fails,
+ the container is terminated and restarted according to its restart policy.
+ Other management of the container blocks until the hook completes.
+ More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
+ properties:
+ exec:
+ description: Exec specifies the action to take.
+ properties:
+ command:
+ description: |-
+ Command is the command line to execute inside the container, the working directory for the
+ command is root ('/') in the container's filesystem. The command is simply exec'd, it is
+ not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
+ a shell, you need to explicitly call out to that shell.
+ Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ description: HTTPGet specifies the http request to perform.
+ properties:
+ host:
+ description: |-
+ Host name to connect to, defaults to the pod IP. You probably want to set
+ "Host" in httpHeaders instead.
+ type: string
+ httpHeaders:
+ description: Custom headers to set in the request. HTTP allows repeated headers.
+ items:
+ description: HTTPHeader describes a custom header to be used in HTTP probes
+ properties:
+ name:
+ description: |-
+ The header field name.
+ This will be canonicalized upon output, so case-variant names will be understood as the same header.
+ type: string
+ value:
+ description: The header field value
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ path:
+ description: Path to access on the HTTP server.
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Name or number of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ scheme:
+ description: |-
+ Scheme to use for connecting to the host.
+ Defaults to HTTP.
+ type: string
+ required:
+ - port
+ type: object
+ sleep:
+ description: Sleep represents the duration that the container should sleep before being terminated.
+ properties:
+ seconds:
+ description: Seconds is the number of seconds to sleep.
+ format: int64
+ type: integer
+ required:
+ - seconds
+ type: object
+ tcpSocket:
+ description: |-
+ Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
+ for the backward compatibility. There are no validation of this field and
+ lifecycle hooks will fail in runtime when tcp handler is specified.
+ properties:
+ host:
+ description: 'Optional: Host name to connect to, defaults to the pod IP.'
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Number or name of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ required:
+ - port
+ type: object
+ type: object
+ preStop:
+ description: |-
+ PreStop is called immediately before a container is terminated due to an
+ API request or management event such as liveness/startup probe failure,
+ preemption, resource contention, etc. The handler is not called if the
+ container crashes or exits. The Pod's termination grace period countdown begins before the
+ PreStop hook is executed. Regardless of the outcome of the handler, the
+ container will eventually terminate within the Pod's termination grace
+ period (unless delayed by finalizers). Other management of the container blocks until the hook completes
+ or until the termination grace period is reached.
+ More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
+ properties:
+ exec:
+ description: Exec specifies the action to take.
+ properties:
+ command:
+ description: |-
+ Command is the command line to execute inside the container, the working directory for the
+ command is root ('/') in the container's filesystem. The command is simply exec'd, it is
+ not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
+ a shell, you need to explicitly call out to that shell.
+ Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ description: HTTPGet specifies the http request to perform.
+ properties:
+ host:
+ description: |-
+ Host name to connect to, defaults to the pod IP. You probably want to set
+ "Host" in httpHeaders instead.
+ type: string
+ httpHeaders:
+ description: Custom headers to set in the request. HTTP allows repeated headers.
+ items:
+ description: HTTPHeader describes a custom header to be used in HTTP probes
+ properties:
+ name:
+ description: |-
+ The header field name.
+ This will be canonicalized upon output, so case-variant names will be understood as the same header.
+ type: string
+ value:
+ description: The header field value
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ path:
+ description: Path to access on the HTTP server.
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Name or number of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ scheme:
+ description: |-
+ Scheme to use for connecting to the host.
+ Defaults to HTTP.
+ type: string
+ required:
+ - port
+ type: object
+ sleep:
+ description: Sleep represents the duration that the container should sleep before being terminated.
+ properties:
+ seconds:
+ description: Seconds is the number of seconds to sleep.
+ format: int64
+ type: integer
+ required:
+ - seconds
+ type: object
+ tcpSocket:
+ description: |-
+ Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
+ for the backward compatibility. There are no validation of this field and
+ lifecycle hooks will fail in runtime when tcp handler is specified.
+ properties:
+ host:
+ description: 'Optional: Host name to connect to, defaults to the pod IP.'
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Number or name of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ required:
+ - port
+ type: object
+ type: object
+ type: object
+ livenessProbe:
+ description: |-
+ Periodic probe of container liveness.
+ Container will be restarted if the probe fails.
+ Cannot be updated.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ properties:
+ exec:
+ description: Exec specifies the action to take.
+ properties:
+ command:
+ description: |-
+ Command is the command line to execute inside the container, the working directory for the
+ command is root ('/') in the container's filesystem. The command is simply exec'd, it is
+ not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
+ a shell, you need to explicitly call out to that shell.
+ Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ description: |-
+ Minimum consecutive failures for the probe to be considered failed after having succeeded.
+ Defaults to 3. Minimum value is 1.
+ format: int32
+ type: integer
+ grpc:
+ description: GRPC specifies an action involving a GRPC port.
+ properties:
+ port:
+ description: Port number of the gRPC service. Number must be in the range 1 to 65535.
+ format: int32
+ type: integer
+ service:
+ description: |-
+ Service is the name of the service to place in the gRPC HealthCheckRequest
+ (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
+
+
+ If this is not specified, the default behavior is defined by gRPC.
+ type: string
+ required:
+ - port
+ type: object
+ httpGet:
+ description: HTTPGet specifies the http request to perform.
+ properties:
+ host:
+ description: |-
+ Host name to connect to, defaults to the pod IP. You probably want to set
+ "Host" in httpHeaders instead.
+ type: string
+ httpHeaders:
+ description: Custom headers to set in the request. HTTP allows repeated headers.
+ items:
+ description: HTTPHeader describes a custom header to be used in HTTP probes
+ properties:
+ name:
+ description: |-
+ The header field name.
+ This will be canonicalized upon output, so case-variant names will be understood as the same header.
+ type: string
+ value:
+ description: The header field value
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ path:
+ description: Path to access on the HTTP server.
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Name or number of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ scheme:
+ description: |-
+ Scheme to use for connecting to the host.
+ Defaults to HTTP.
+ type: string
+ required:
+ - port
+ type: object
+ initialDelaySeconds:
+ description: |-
+ Number of seconds after the container has started before liveness probes are initiated.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ periodSeconds:
+ description: |-
+ How often (in seconds) to perform the probe.
+ Default to 10 seconds. Minimum value is 1.
+ format: int32
+ type: integer
+ successThreshold:
+ description: |-
+ Minimum consecutive successes for the probe to be considered successful after having failed.
+ Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.
+ format: int32
+ type: integer
+ tcpSocket:
+ description: TCPSocket specifies an action involving a TCP port.
+ properties:
+ host:
+ description: 'Optional: Host name to connect to, defaults to the pod IP.'
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Number or name of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ required:
+ - port
+ type: object
+ terminationGracePeriodSeconds:
+ description: |-
+ Optional duration in seconds the pod needs to terminate gracefully upon probe failure.
+ The grace period is the duration in seconds after the processes running in the pod are sent
+ a termination signal and the time when the processes are forcibly halted with a kill signal.
+ Set this value longer than the expected cleanup time for your process.
+ If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this
+ value overrides the value provided by the pod spec.
+ Value must be non-negative integer. The value zero indicates stop immediately via
+ the kill signal (no opportunity to shut down).
+ This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate.
+ Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.
+ format: int64
+ type: integer
+ timeoutSeconds:
+ description: |-
+ Number of seconds after which the probe times out.
+ Defaults to 1 second. Minimum value is 1.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ type: object
+ name:
+ description: |-
+ Name of the container specified as a DNS_LABEL.
+ Each container in a pod must have a unique name (DNS_LABEL).
+ Cannot be updated.
+ type: string
+ ports:
+ description: |-
+ List of ports to expose from the container. Not specifying a port here
+ DOES NOT prevent that port from being exposed. Any port which is
+ listening on the default "0.0.0.0" address inside a container will be
+ accessible from the network.
+ Modifying this array with strategic merge patch may corrupt the data.
+ For more information See https://github.com/kubernetes/kubernetes/issues/108255.
+ Cannot be updated.
+ items:
+ description: ContainerPort represents a network port in a single container.
+ properties:
+ containerPort:
+ description: |-
+ Number of port to expose on the pod's IP address.
+ This must be a valid port number, 0 < x < 65536.
+ format: int32
+ type: integer
+ hostIP:
+ description: What host IP to bind the external port to.
+ type: string
+ hostPort:
+ description: |-
+ Number of port to expose on the host.
+ If specified, this must be a valid port number, 0 < x < 65536.
+ If HostNetwork is specified, this must match ContainerPort.
+ Most containers do not need this.
+ format: int32
+ type: integer
+ name:
+ description: |-
+ If specified, this must be an IANA_SVC_NAME and unique within the pod. Each
+ named port in a pod must have a unique name. Name for the port that can be
+ referred to by services.
+ type: string
+ protocol:
+ default: TCP
+ description: |-
+ Protocol for port. Must be UDP, TCP, or SCTP.
+ Defaults to "TCP".
+ type: string
+ required:
+ - containerPort
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - containerPort
+ - protocol
+ x-kubernetes-list-type: map
+ readinessProbe:
+ description: |-
+ Periodic probe of container service readiness.
+ Container will be removed from service endpoints if the probe fails.
+ Cannot be updated.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ properties:
+ exec:
+ description: Exec specifies the action to take.
+ properties:
+ command:
+ description: |-
+ Command is the command line to execute inside the container, the working directory for the
+ command is root ('/') in the container's filesystem. The command is simply exec'd, it is
+ not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
+ a shell, you need to explicitly call out to that shell.
+ Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ description: |-
+ Minimum consecutive failures for the probe to be considered failed after having succeeded.
+ Defaults to 3. Minimum value is 1.
+ format: int32
+ type: integer
+ grpc:
+ description: GRPC specifies an action involving a GRPC port.
+ properties:
+ port:
+ description: Port number of the gRPC service. Number must be in the range 1 to 65535.
+ format: int32
+ type: integer
+ service:
+ description: |-
+ Service is the name of the service to place in the gRPC HealthCheckRequest
+ (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
+
+
+ If this is not specified, the default behavior is defined by gRPC.
+ type: string
+ required:
+ - port
+ type: object
+ httpGet:
+ description: HTTPGet specifies the http request to perform.
+ properties:
+ host:
+ description: |-
+ Host name to connect to, defaults to the pod IP. You probably want to set
+ "Host" in httpHeaders instead.
+ type: string
+ httpHeaders:
+ description: Custom headers to set in the request. HTTP allows repeated headers.
+ items:
+ description: HTTPHeader describes a custom header to be used in HTTP probes
+ properties:
+ name:
+ description: |-
+ The header field name.
+ This will be canonicalized upon output, so case-variant names will be understood as the same header.
+ type: string
+ value:
+ description: The header field value
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ path:
+ description: Path to access on the HTTP server.
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Name or number of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ scheme:
+ description: |-
+ Scheme to use for connecting to the host.
+ Defaults to HTTP.
+ type: string
+ required:
+ - port
+ type: object
+ initialDelaySeconds:
+ description: |-
+ Number of seconds after the container has started before liveness probes are initiated.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ periodSeconds:
+ description: |-
+ How often (in seconds) to perform the probe.
+ Default to 10 seconds. Minimum value is 1.
+ format: int32
+ type: integer
+ successThreshold:
+ description: |-
+ Minimum consecutive successes for the probe to be considered successful after having failed.
+ Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.
+ format: int32
+ type: integer
+ tcpSocket:
+ description: TCPSocket specifies an action involving a TCP port.
+ properties:
+ host:
+ description: 'Optional: Host name to connect to, defaults to the pod IP.'
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Number or name of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ required:
+ - port
+ type: object
+ terminationGracePeriodSeconds:
+ description: |-
+ Optional duration in seconds the pod needs to terminate gracefully upon probe failure.
+ The grace period is the duration in seconds after the processes running in the pod are sent
+ a termination signal and the time when the processes are forcibly halted with a kill signal.
+ Set this value longer than the expected cleanup time for your process.
+ If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this
+ value overrides the value provided by the pod spec.
+ Value must be non-negative integer. The value zero indicates stop immediately via
+ the kill signal (no opportunity to shut down).
+ This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate.
+ Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.
+ format: int64
+ type: integer
+ timeoutSeconds:
+ description: |-
+ Number of seconds after which the probe times out.
+ Defaults to 1 second. Minimum value is 1.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ type: object
+ resizePolicy:
+ description: Resources resize policy for the container.
+ items:
+ description: ContainerResizePolicy represents resource resize policy for the container.
+ properties:
+ resourceName:
+ description: |-
+ Name of the resource to which this resource resize policy applies.
+ Supported values: cpu, memory.
+ type: string
+ restartPolicy:
+ description: |-
+ Restart policy to apply when specified resource is resized.
+ If not specified, it defaults to NotRequired.
+ type: string
+ required:
+ - resourceName
+ - restartPolicy
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ resources:
+ description: |-
+ Compute Resources required by this container.
+ Cannot be updated.
+ More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ properties:
+ claims:
+ description: |-
+ Claims lists the names of resources, defined in spec.resourceClaims,
+ that are used by this container.
+
+
+ This is an alpha field and requires enabling the
+ DynamicResourceAllocation feature gate.
+
+
+ This field is immutable. It can only be set for containers.
+ items:
+ description: ResourceClaim references one entry in PodSpec.ResourceClaims.
+ properties:
+ name:
+ description: |-
+ Name must match the name of one entry in pod.spec.resourceClaims of
+ the Pod where this field is used. It makes that resource available
+ inside a container.
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: |-
+ Limits describes the maximum amount of compute resources allowed.
+ More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: |-
+ Requests describes the minimum amount of compute resources required.
+ If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
+ otherwise to an implementation-defined value. Requests cannot exceed Limits.
+ More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ type: object
+ type: object
+ restartPolicy:
+ description: |-
+ RestartPolicy defines the restart behavior of individual containers in a pod.
+ This field may only be set for init containers, and the only allowed value is "Always".
+ For non-init containers or when this field is not specified,
+ the restart behavior is defined by the Pod's restart policy and the container type.
+ Setting the RestartPolicy as "Always" for the init container will have the following effect:
+ this init container will be continually restarted on
+ exit until all regular containers have terminated. Once all regular
+ containers have completed, all init containers with restartPolicy "Always"
+ will be shut down. This lifecycle differs from normal init containers and
+ is often referred to as a "sidecar" container. Although this init
+ container still starts in the init container sequence, it does not wait
+ for the container to complete before proceeding to the next init
+ container. Instead, the next init container starts immediately after this
+ init container is started, or after any startupProbe has successfully
+ completed.
+ type: string
+ securityContext:
+ description: |-
+ SecurityContext defines the security options the container should be run with.
+ If set, the fields of SecurityContext override the equivalent fields of PodSecurityContext.
+ More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
+ properties:
+ allowPrivilegeEscalation:
+ description: |-
+ AllowPrivilegeEscalation controls whether a process can gain more
+ privileges than its parent process. This bool directly controls if
+ the no_new_privs flag will be set on the container process.
+ AllowPrivilegeEscalation is true always when the container is:
+ 1) run as Privileged
+ 2) has CAP_SYS_ADMIN
+ Note that this field cannot be set when spec.os.name is windows.
+ type: boolean
+ capabilities:
+ description: |-
+ The capabilities to add/drop when running containers.
+ Defaults to the default set of capabilities granted by the container runtime.
+ Note that this field cannot be set when spec.os.name is windows.
+ properties:
+ add:
+ description: Added capabilities
+ items:
+ description: Capability represent POSIX capabilities type
+ type: string
+ type: array
+ drop:
+ description: Removed capabilities
+ items:
+ description: Capability represent POSIX capabilities type
+ type: string
+ type: array
+ type: object
+ privileged:
+ description: |-
+ Run container in privileged mode.
+ Processes in privileged containers are essentially equivalent to root on the host.
+ Defaults to false.
+ Note that this field cannot be set when spec.os.name is windows.
+ type: boolean
+ procMount:
+ description: |-
+ procMount denotes the type of proc mount to use for the containers.
+ The default is DefaultProcMount which uses the container runtime defaults for
+ readonly paths and masked paths.
+ This requires the ProcMountType feature flag to be enabled.
+ Note that this field cannot be set when spec.os.name is windows.
+ type: string
+ readOnlyRootFilesystem:
+ description: |-
+ Whether this container has a read-only root filesystem.
+ Default is false.
+ Note that this field cannot be set when spec.os.name is windows.
+ type: boolean
+ runAsGroup:
+ description: |-
+ The GID to run the entrypoint of the container process.
+ Uses runtime default if unset.
+ May also be set in PodSecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence.
+ Note that this field cannot be set when spec.os.name is windows.
+ format: int64
+ type: integer
+ runAsNonRoot:
+ description: |-
+ Indicates that the container must run as a non-root user.
+ If true, the Kubelet will validate the image at runtime to ensure that it
+ does not run as UID 0 (root) and fail to start the container if it does.
+ If unset or false, no such validation will be performed.
+ May also be set in PodSecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence.
+ type: boolean
+ runAsUser:
+ description: |-
+ The UID to run the entrypoint of the container process.
+ Defaults to user specified in image metadata if unspecified.
+ May also be set in PodSecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence.
+ Note that this field cannot be set when spec.os.name is windows.
+ format: int64
+ type: integer
+ seLinuxOptions:
+ description: |-
+ The SELinux context to be applied to the container.
+ If unspecified, the container runtime will allocate a random SELinux context for each
+ container. May also be set in PodSecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence.
+ Note that this field cannot be set when spec.os.name is windows.
+ properties:
+ level:
+ description: Level is SELinux level label that applies to the container.
+ type: string
+ role:
+ description: Role is a SELinux role label that applies to the container.
+ type: string
+ type:
+ description: Type is a SELinux type label that applies to the container.
+ type: string
+ user:
+ description: User is a SELinux user label that applies to the container.
+ type: string
+ type: object
+ seccompProfile:
+ description: |-
+ The seccomp options to use by this container. If seccomp options are
+ provided at both the pod & container level, the container options
+ override the pod options.
+ Note that this field cannot be set when spec.os.name is windows.
+ properties:
+ localhostProfile:
+ description: |-
+ localhostProfile indicates a profile defined in a file on the node should be used.
+ The profile must be preconfigured on the node to work.
+ Must be a descending path, relative to the kubelet's configured seccomp profile location.
+ Must be set if type is "Localhost". Must NOT be set for any other type.
+ type: string
+ type:
+ description: |-
+ type indicates which kind of seccomp profile will be applied.
+ Valid options are:
+
+
+ Localhost - a profile defined in a file on the node should be used.
+ RuntimeDefault - the container runtime default profile should be used.
+ Unconfined - no profile should be applied.
+ type: string
+ required:
+ - type
+ type: object
+ windowsOptions:
+ description: |-
+ The Windows specific settings applied to all containers.
+ If unspecified, the options from the PodSecurityContext will be used.
+ If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
+ Note that this field cannot be set when spec.os.name is linux.
+ properties:
+ gmsaCredentialSpec:
+ description: |-
+ GMSACredentialSpec is where the GMSA admission webhook
+ (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the
+ GMSA credential spec named by the GMSACredentialSpecName field.
+ type: string
+ gmsaCredentialSpecName:
+ description: GMSACredentialSpecName is the name of the GMSA credential spec to use.
+ type: string
+ hostProcess:
+ description: |-
+ HostProcess determines if a container should be run as a 'Host Process' container.
+ All of a Pod's containers must have the same effective HostProcess value
+ (it is not allowed to have a mix of HostProcess containers and non-HostProcess containers).
+ In addition, if HostProcess is true then HostNetwork must also be set to true.
+ type: boolean
+ runAsUserName:
+ description: |-
+ The UserName in Windows to run the entrypoint of the container process.
+ Defaults to the user specified in image metadata if unspecified.
+ May also be set in PodSecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence.
+ type: string
+ type: object
+ type: object
+ startupProbe:
+ description: |-
+ StartupProbe indicates that the Pod has successfully initialized.
+ If specified, no other probes are executed until this completes successfully.
+ If this probe fails, the Pod will be restarted, just as if the livenessProbe failed.
+ This can be used to provide different probe parameters at the beginning of a Pod's lifecycle,
+ when it might take a long time to load data or warm a cache, than during steady-state operation.
+ This cannot be updated.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ properties:
+ exec:
+ description: Exec specifies the action to take.
+ properties:
+ command:
+ description: |-
+ Command is the command line to execute inside the container, the working directory for the
+ command is root ('/') in the container's filesystem. The command is simply exec'd, it is
+ not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
+ a shell, you need to explicitly call out to that shell.
+ Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ description: |-
+ Minimum consecutive failures for the probe to be considered failed after having succeeded.
+ Defaults to 3. Minimum value is 1.
+ format: int32
+ type: integer
+ grpc:
+ description: GRPC specifies an action involving a GRPC port.
+ properties:
+ port:
+ description: Port number of the gRPC service. Number must be in the range 1 to 65535.
+ format: int32
+ type: integer
+ service:
+ description: |-
+ Service is the name of the service to place in the gRPC HealthCheckRequest
+ (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
+
+
+ If this is not specified, the default behavior is defined by gRPC.
+ type: string
+ required:
+ - port
+ type: object
+ httpGet:
+ description: HTTPGet specifies the http request to perform.
+ properties:
+ host:
+ description: |-
+ Host name to connect to, defaults to the pod IP. You probably want to set
+ "Host" in httpHeaders instead.
+ type: string
+ httpHeaders:
+ description: Custom headers to set in the request. HTTP allows repeated headers.
+ items:
+ description: HTTPHeader describes a custom header to be used in HTTP probes
+ properties:
+ name:
+ description: |-
+ The header field name.
+ This will be canonicalized upon output, so case-variant names will be understood as the same header.
+ type: string
+ value:
+ description: The header field value
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ path:
+ description: Path to access on the HTTP server.
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Name or number of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ scheme:
+ description: |-
+ Scheme to use for connecting to the host.
+ Defaults to HTTP.
+ type: string
+ required:
+ - port
+ type: object
+ initialDelaySeconds:
+ description: |-
+ Number of seconds after the container has started before liveness probes are initiated.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ periodSeconds:
+ description: |-
+ How often (in seconds) to perform the probe.
+ Default to 10 seconds. Minimum value is 1.
+ format: int32
+ type: integer
+ successThreshold:
+ description: |-
+ Minimum consecutive successes for the probe to be considered successful after having failed.
+ Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.
+ format: int32
+ type: integer
+ tcpSocket:
+ description: TCPSocket specifies an action involving a TCP port.
+ properties:
+ host:
+ description: 'Optional: Host name to connect to, defaults to the pod IP.'
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Number or name of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ required:
+ - port
+ type: object
+ terminationGracePeriodSeconds:
+ description: |-
+ Optional duration in seconds the pod needs to terminate gracefully upon probe failure.
+ The grace period is the duration in seconds after the processes running in the pod are sent
+ a termination signal and the time when the processes are forcibly halted with a kill signal.
+ Set this value longer than the expected cleanup time for your process.
+ If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this
+ value overrides the value provided by the pod spec.
+ Value must be non-negative integer. The value zero indicates stop immediately via
+ the kill signal (no opportunity to shut down).
+ This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate.
+ Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.
+ format: int64
+ type: integer
+ timeoutSeconds:
+ description: |-
+ Number of seconds after which the probe times out.
+ Defaults to 1 second. Minimum value is 1.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ type: object
+ stdin:
+ description: |-
+ Whether this container should allocate a buffer for stdin in the container runtime. If this
+ is not set, reads from stdin in the container will always result in EOF.
+ Default is false.
+ type: boolean
+ stdinOnce:
+ description: |-
+ Whether the container runtime should close the stdin channel after it has been opened by
+ a single attach. When stdin is true the stdin stream will remain open across multiple attach
+ sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the
+ first client attaches to stdin, and then remains open and accepts data until the client disconnects,
+ at which time stdin is closed and remains closed until the container is restarted. If this
+ flag is false, a container processes that reads from stdin will never receive an EOF.
+ Default is false
+ type: boolean
+ terminationMessagePath:
+ description: |-
+ Optional: Path at which the file to which the container's termination message
+ will be written is mounted into the container's filesystem.
+ Message written is intended to be brief final status, such as an assertion failure message.
+ Will be truncated by the node if greater than 4096 bytes. The total message length across
+ all containers will be limited to 12kb.
+ Defaults to /dev/termination-log.
+ Cannot be updated.
+ type: string
+ terminationMessagePolicy:
+ description: |-
+ Indicate how the termination message should be populated. File will use the contents of
+ terminationMessagePath to populate the container status message on both success and failure.
+ FallbackToLogsOnError will use the last chunk of container log output if the termination
+ message file is empty and the container exited with an error.
+ The log output is limited to 2048 bytes or 80 lines, whichever is smaller.
+ Defaults to File.
+ Cannot be updated.
+ type: string
+ tty:
+ description: |-
+ Whether this container should allocate a TTY for itself, also requires 'stdin' to be true.
+ Default is false.
+ type: boolean
+ volumeDevices:
+ description: volumeDevices is the list of block devices to be used by the container.
+ items:
+ description: volumeDevice describes a mapping of a raw block device within a container.
+ properties:
+ devicePath:
+ description: devicePath is the path inside of the container that the device will be mapped to.
+ type: string
+ name:
+ description: name must match the name of a persistentVolumeClaim in the pod
+ type: string
+ required:
+ - devicePath
+ - name
+ type: object
+ type: array
+ volumeMounts:
+ description: |-
+ Pod volumes to mount into the container's filesystem.
+ Cannot be updated.
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
+ workingDir:
+ description: |-
+ Container's working directory.
+ If not specified, the container runtime's default will be used, which
+ might be configured in the container image.
+ Cannot be updated.
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ dnsConfig:
+ description: |-
+ Specifies the DNS parameters of a pod.
+ Parameters specified here will be merged to the generated DNS
+ configuration based on DNSPolicy.
+ properties:
+ nameservers:
+ description: |-
+ A list of DNS name server IP addresses.
+ This will be appended to the base nameservers generated from DNSPolicy.
+ Duplicated nameservers will be removed.
+ items:
+ type: string
+ type: array
+ options:
+ description: |-
+ A list of DNS resolver options.
+ This will be merged with the base options generated from DNSPolicy.
+ Duplicated entries will be removed. Resolution options given in Options
+ will override those that appear in the base DNSPolicy.
+ items:
+ description: PodDNSConfigOption defines DNS resolver options of a pod.
+ properties:
+ name:
+ description: Required.
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ searches:
+ description: |-
+ A list of DNS search domains for host-name lookup.
+ This will be appended to the base search paths generated from DNSPolicy.
+ Duplicated search paths will be removed.
+ items:
+ type: string
+ type: array
+ type: object
+ dnsPolicy:
+ description: |-
+ Set DNS policy for the pod.
+ Defaults to "ClusterFirst".
+ Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'.
+ DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy.
+ To have DNS options set along with hostNetwork, you have to specify DNS policy
+ explicitly to 'ClusterFirstWithHostNet'.
+ type: string
+ enableServiceLinks:
+ description: |-
+ EnableServiceLinks indicates whether information about services should be injected into pod's
+ environment variables, matching the syntax of Docker links.
+ Optional: Defaults to true.
+ type: boolean
+ ephemeralContainers:
+ description: |-
+ List of ephemeral containers run in this pod. Ephemeral containers may be run in an existing
+ pod to perform user-initiated actions such as debugging. This list cannot be specified when
+ creating a pod, and it cannot be modified by updating the pod spec. In order to add an
+ ephemeral container to an existing pod, use the pod's ephemeralcontainers subresource.
+ items:
+ description: |-
+ An EphemeralContainer is a temporary container that you may add to an existing Pod for
+ user-initiated activities such as debugging. Ephemeral containers have no resource or
+ scheduling guarantees, and they will not be restarted when they exit or when a Pod is
+ removed or restarted. The kubelet may evict a Pod if an ephemeral container causes the
+ Pod to exceed its resource allocation.
+
+
+ To add an ephemeral container, use the ephemeralcontainers subresource of an existing
+ Pod. Ephemeral containers may not be removed or restarted.
+ properties:
+ args:
+ description: |-
+ Arguments to the entrypoint.
+ The image's CMD is used if this is not provided.
+ Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
+ cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will
+ produce the string literal "$(VAR_NAME)". Escaped references will never be expanded, regardless
+ of whether the variable exists or not. Cannot be updated.
+ More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
+ items:
+ type: string
+ type: array
+ command:
+ description: |-
+ Entrypoint array. Not executed within a shell.
+ The image's ENTRYPOINT is used if this is not provided.
+ Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
+ cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will
+ produce the string literal "$(VAR_NAME)". Escaped references will never be expanded, regardless
+ of whether the variable exists or not. Cannot be updated.
+ More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
+ items:
+ type: string
+ type: array
+ env:
+ description: |-
+ List of environment variables to set in the container.
+ Cannot be updated.
+ items:
+ description: EnvVar represents an environment variable present in a Container.
+ properties:
+ name:
+ description: Name of the environment variable. Must be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $$ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment variable's value. Cannot be used if value is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: Specify whether the ConfigMap or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ properties:
+ apiVersion:
+ description: Version of the schema the FieldPath is written in terms of, defaults to "v1".
+ type: string
+ fieldPath:
+ description: Path of the field to select in the specified API version.
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
+ properties:
+ containerName:
+ description: 'Container name: required for volumes, optional for env vars'
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ description: Specifies the output format of the exposed resources, defaults to "1"
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ description: 'Required: resource to select'
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ secretKeyRef:
+ description: Selects a key of a secret in the pod's namespace
+ properties:
+ key:
+ description: The key of the secret to select from. Must be a valid secret key.
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: Specify whether the Secret or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ envFrom:
+ description: |-
+ List of sources to populate environment variables in the container.
+ The keys defined within a source must be a C_IDENTIFIER. All invalid keys
+ will be reported as an event when the container is starting. When a key exists in multiple
+ sources, the value associated with the last source will take precedence.
+ Values defined by an Env with a duplicate key will take precedence.
+ Cannot be updated.
+ items:
+ description: EnvFromSource represents the source of a set of ConfigMaps
+ properties:
+ configMapRef:
+ description: The ConfigMap to select from
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: Specify whether the ConfigMap must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ prefix:
+ description: An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.
+ type: string
+ secretRef:
+ description: The Secret to select from
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: Specify whether the Secret must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ type: object
+ type: array
+ image:
+ description: |-
+ Container image name.
+ More info: https://kubernetes.io/docs/concepts/containers/images
+ type: string
+ imagePullPolicy:
+ description: |-
+ Image pull policy.
+ One of Always, Never, IfNotPresent.
+ Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.
+ Cannot be updated.
+ More info: https://kubernetes.io/docs/concepts/containers/images#updating-images
+ type: string
+ lifecycle:
+ description: Lifecycle is not allowed for ephemeral containers.
+ properties:
+ postStart:
+ description: |-
+ PostStart is called immediately after a container is created. If the handler fails,
+ the container is terminated and restarted according to its restart policy.
+ Other management of the container blocks until the hook completes.
+ More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
+ properties:
+ exec:
+ description: Exec specifies the action to take.
+ properties:
+ command:
+ description: |-
+ Command is the command line to execute inside the container, the working directory for the
+ command is root ('/') in the container's filesystem. The command is simply exec'd, it is
+ not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
+ a shell, you need to explicitly call out to that shell.
+ Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ description: HTTPGet specifies the http request to perform.
+ properties:
+ host:
+ description: |-
+ Host name to connect to, defaults to the pod IP. You probably want to set
+ "Host" in httpHeaders instead.
+ type: string
+ httpHeaders:
+ description: Custom headers to set in the request. HTTP allows repeated headers.
+ items:
+ description: HTTPHeader describes a custom header to be used in HTTP probes
+ properties:
+ name:
+ description: |-
+ The header field name.
+ This will be canonicalized upon output, so case-variant names will be understood as the same header.
+ type: string
+ value:
+ description: The header field value
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ path:
+ description: Path to access on the HTTP server.
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Name or number of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ scheme:
+ description: |-
+ Scheme to use for connecting to the host.
+ Defaults to HTTP.
+ type: string
+ required:
+ - port
+ type: object
+ sleep:
+ description: Sleep represents the duration that the container should sleep before being terminated.
+ properties:
+ seconds:
+ description: Seconds is the number of seconds to sleep.
+ format: int64
+ type: integer
+ required:
+ - seconds
+ type: object
+ tcpSocket:
+ description: |-
+ Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
+ for the backward compatibility. There are no validation of this field and
+ lifecycle hooks will fail in runtime when tcp handler is specified.
+ properties:
+ host:
+ description: 'Optional: Host name to connect to, defaults to the pod IP.'
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Number or name of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ required:
+ - port
+ type: object
+ type: object
+ preStop:
+ description: |-
+ PreStop is called immediately before a container is terminated due to an
+ API request or management event such as liveness/startup probe failure,
+ preemption, resource contention, etc. The handler is not called if the
+ container crashes or exits. The Pod's termination grace period countdown begins before the
+ PreStop hook is executed. Regardless of the outcome of the handler, the
+ container will eventually terminate within the Pod's termination grace
+ period (unless delayed by finalizers). Other management of the container blocks until the hook completes
+ or until the termination grace period is reached.
+ More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
+ properties:
+ exec:
+ description: Exec specifies the action to take.
+ properties:
+ command:
+ description: |-
+ Command is the command line to execute inside the container, the working directory for the
+ command is root ('/') in the container's filesystem. The command is simply exec'd, it is
+ not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
+ a shell, you need to explicitly call out to that shell.
+ Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ description: HTTPGet specifies the http request to perform.
+ properties:
+ host:
+ description: |-
+ Host name to connect to, defaults to the pod IP. You probably want to set
+ "Host" in httpHeaders instead.
+ type: string
+ httpHeaders:
+ description: Custom headers to set in the request. HTTP allows repeated headers.
+ items:
+ description: HTTPHeader describes a custom header to be used in HTTP probes
+ properties:
+ name:
+ description: |-
+ The header field name.
+ This will be canonicalized upon output, so case-variant names will be understood as the same header.
+ type: string
+ value:
+ description: The header field value
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ path:
+ description: Path to access on the HTTP server.
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Name or number of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ scheme:
+ description: |-
+ Scheme to use for connecting to the host.
+ Defaults to HTTP.
+ type: string
+ required:
+ - port
+ type: object
+ sleep:
+ description: Sleep represents the duration that the container should sleep before being terminated.
+ properties:
+ seconds:
+ description: Seconds is the number of seconds to sleep.
+ format: int64
+ type: integer
+ required:
+ - seconds
+ type: object
+ tcpSocket:
+ description: |-
+ Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
+ for the backward compatibility. There are no validation of this field and
+ lifecycle hooks will fail in runtime when tcp handler is specified.
+ properties:
+ host:
+ description: 'Optional: Host name to connect to, defaults to the pod IP.'
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Number or name of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ required:
+ - port
+ type: object
+ type: object
+ type: object
+ livenessProbe:
+ description: Probes are not allowed for ephemeral containers.
+ properties:
+ exec:
+ description: Exec specifies the action to take.
+ properties:
+ command:
+ description: |-
+ Command is the command line to execute inside the container, the working directory for the
+ command is root ('/') in the container's filesystem. The command is simply exec'd, it is
+ not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
+ a shell, you need to explicitly call out to that shell.
+ Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ description: |-
+ Minimum consecutive failures for the probe to be considered failed after having succeeded.
+ Defaults to 3. Minimum value is 1.
+ format: int32
+ type: integer
+ grpc:
+ description: GRPC specifies an action involving a GRPC port.
+ properties:
+ port:
+ description: Port number of the gRPC service. Number must be in the range 1 to 65535.
+ format: int32
+ type: integer
+ service:
+ description: |-
+ Service is the name of the service to place in the gRPC HealthCheckRequest
+ (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
+
+
+ If this is not specified, the default behavior is defined by gRPC.
+ type: string
+ required:
+ - port
+ type: object
+ httpGet:
+ description: HTTPGet specifies the http request to perform.
+ properties:
+ host:
+ description: |-
+ Host name to connect to, defaults to the pod IP. You probably want to set
+ "Host" in httpHeaders instead.
+ type: string
+ httpHeaders:
+ description: Custom headers to set in the request. HTTP allows repeated headers.
+ items:
+ description: HTTPHeader describes a custom header to be used in HTTP probes
+ properties:
+ name:
+ description: |-
+ The header field name.
+ This will be canonicalized upon output, so case-variant names will be understood as the same header.
+ type: string
+ value:
+ description: The header field value
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ path:
+ description: Path to access on the HTTP server.
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Name or number of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ scheme:
+ description: |-
+ Scheme to use for connecting to the host.
+ Defaults to HTTP.
+ type: string
+ required:
+ - port
+ type: object
+ initialDelaySeconds:
+ description: |-
+ Number of seconds after the container has started before liveness probes are initiated.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ periodSeconds:
+ description: |-
+ How often (in seconds) to perform the probe.
+ Default to 10 seconds. Minimum value is 1.
+ format: int32
+ type: integer
+ successThreshold:
+ description: |-
+ Minimum consecutive successes for the probe to be considered successful after having failed.
+ Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.
+ format: int32
+ type: integer
+ tcpSocket:
+ description: TCPSocket specifies an action involving a TCP port.
+ properties:
+ host:
+ description: 'Optional: Host name to connect to, defaults to the pod IP.'
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Number or name of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ required:
+ - port
+ type: object
+ terminationGracePeriodSeconds:
+ description: |-
+ Optional duration in seconds the pod needs to terminate gracefully upon probe failure.
+ The grace period is the duration in seconds after the processes running in the pod are sent
+ a termination signal and the time when the processes are forcibly halted with a kill signal.
+ Set this value longer than the expected cleanup time for your process.
+ If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this
+ value overrides the value provided by the pod spec.
+ Value must be non-negative integer. The value zero indicates stop immediately via
+ the kill signal (no opportunity to shut down).
+ This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate.
+ Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.
+ format: int64
+ type: integer
+ timeoutSeconds:
+ description: |-
+ Number of seconds after which the probe times out.
+ Defaults to 1 second. Minimum value is 1.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ type: object
+ name:
+ description: |-
+ Name of the ephemeral container specified as a DNS_LABEL.
+ This name must be unique among all containers, init containers and ephemeral containers.
+ type: string
+ ports:
+ description: Ports are not allowed for ephemeral containers.
+ items:
+ description: ContainerPort represents a network port in a single container.
+ properties:
+ containerPort:
+ description: |-
+ Number of port to expose on the pod's IP address.
+ This must be a valid port number, 0 < x < 65536.
+ format: int32
+ type: integer
+ hostIP:
+ description: What host IP to bind the external port to.
+ type: string
+ hostPort:
+ description: |-
+ Number of port to expose on the host.
+ If specified, this must be a valid port number, 0 < x < 65536.
+ If HostNetwork is specified, this must match ContainerPort.
+ Most containers do not need this.
+ format: int32
+ type: integer
+ name:
+ description: |-
+ If specified, this must be an IANA_SVC_NAME and unique within the pod. Each
+ named port in a pod must have a unique name. Name for the port that can be
+ referred to by services.
+ type: string
+ protocol:
+ default: TCP
+ description: |-
+ Protocol for port. Must be UDP, TCP, or SCTP.
+ Defaults to "TCP".
+ type: string
+ required:
+ - containerPort
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - containerPort
+ - protocol
+ x-kubernetes-list-type: map
+ readinessProbe:
+ description: Probes are not allowed for ephemeral containers.
+ properties:
+ exec:
+ description: Exec specifies the action to take.
+ properties:
+ command:
+ description: |-
+ Command is the command line to execute inside the container, the working directory for the
+ command is root ('/') in the container's filesystem. The command is simply exec'd, it is
+ not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
+ a shell, you need to explicitly call out to that shell.
+ Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ description: |-
+ Minimum consecutive failures for the probe to be considered failed after having succeeded.
+ Defaults to 3. Minimum value is 1.
+ format: int32
+ type: integer
+ grpc:
+ description: GRPC specifies an action involving a GRPC port.
+ properties:
+ port:
+ description: Port number of the gRPC service. Number must be in the range 1 to 65535.
+ format: int32
+ type: integer
+ service:
+ description: |-
+ Service is the name of the service to place in the gRPC HealthCheckRequest
+ (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
+
+
+ If this is not specified, the default behavior is defined by gRPC.
+ type: string
+ required:
+ - port
+ type: object
+ httpGet:
+ description: HTTPGet specifies the http request to perform.
+ properties:
+ host:
+ description: |-
+ Host name to connect to, defaults to the pod IP. You probably want to set
+ "Host" in httpHeaders instead.
+ type: string
+ httpHeaders:
+ description: Custom headers to set in the request. HTTP allows repeated headers.
+ items:
+ description: HTTPHeader describes a custom header to be used in HTTP probes
+ properties:
+ name:
+ description: |-
+ The header field name.
+ This will be canonicalized upon output, so case-variant names will be understood as the same header.
+ type: string
+ value:
+ description: The header field value
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ path:
+ description: Path to access on the HTTP server.
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Name or number of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ scheme:
+ description: |-
+ Scheme to use for connecting to the host.
+ Defaults to HTTP.
+ type: string
+ required:
+ - port
+ type: object
+ initialDelaySeconds:
+ description: |-
+ Number of seconds after the container has started before liveness probes are initiated.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ periodSeconds:
+ description: |-
+ How often (in seconds) to perform the probe.
+ Default to 10 seconds. Minimum value is 1.
+ format: int32
+ type: integer
+ successThreshold:
+ description: |-
+ Minimum consecutive successes for the probe to be considered successful after having failed.
+ Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.
+ format: int32
+ type: integer
+ tcpSocket:
+ description: TCPSocket specifies an action involving a TCP port.
+ properties:
+ host:
+ description: 'Optional: Host name to connect to, defaults to the pod IP.'
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Number or name of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ required:
+ - port
+ type: object
+ terminationGracePeriodSeconds:
+ description: |-
+ Optional duration in seconds the pod needs to terminate gracefully upon probe failure.
+ The grace period is the duration in seconds after the processes running in the pod are sent
+ a termination signal and the time when the processes are forcibly halted with a kill signal.
+ Set this value longer than the expected cleanup time for your process.
+ If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this
+ value overrides the value provided by the pod spec.
+ Value must be non-negative integer. The value zero indicates stop immediately via
+ the kill signal (no opportunity to shut down).
+ This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate.
+ Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.
+ format: int64
+ type: integer
+ timeoutSeconds:
+ description: |-
+ Number of seconds after which the probe times out.
+ Defaults to 1 second. Minimum value is 1.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ type: object
+ resizePolicy:
+ description: Resources resize policy for the container.
+ items:
+ description: ContainerResizePolicy represents resource resize policy for the container.
+ properties:
+ resourceName:
+ description: |-
+ Name of the resource to which this resource resize policy applies.
+ Supported values: cpu, memory.
+ type: string
+ restartPolicy:
+ description: |-
+ Restart policy to apply when specified resource is resized.
+ If not specified, it defaults to NotRequired.
+ type: string
+ required:
+ - resourceName
+ - restartPolicy
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ resources:
+ description: |-
+ Resources are not allowed for ephemeral containers. Ephemeral containers use spare resources
+ already allocated to the pod.
+ properties:
+ claims:
+ description: |-
+ Claims lists the names of resources, defined in spec.resourceClaims,
+ that are used by this container.
+
+
+ This is an alpha field and requires enabling the
+ DynamicResourceAllocation feature gate.
+
+
+ This field is immutable. It can only be set for containers.
+ items:
+ description: ResourceClaim references one entry in PodSpec.ResourceClaims.
+ properties:
+ name:
+ description: |-
+ Name must match the name of one entry in pod.spec.resourceClaims of
+ the Pod where this field is used. It makes that resource available
+ inside a container.
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: |-
+ Limits describes the maximum amount of compute resources allowed.
+ More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: |-
+ Requests describes the minimum amount of compute resources required.
+ If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
+ otherwise to an implementation-defined value. Requests cannot exceed Limits.
+ More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ type: object
+ type: object
+ restartPolicy:
+ description: |-
+ Restart policy for the container to manage the restart behavior of each
+ container within a pod.
+ This may only be set for init containers. You cannot set this field on
+ ephemeral containers.
+ type: string
+ securityContext:
+ description: |-
+ Optional: SecurityContext defines the security options the ephemeral container should be run with.
+ If set, the fields of SecurityContext override the equivalent fields of PodSecurityContext.
+ properties:
+ allowPrivilegeEscalation:
+ description: |-
+ AllowPrivilegeEscalation controls whether a process can gain more
+ privileges than its parent process. This bool directly controls if
+ the no_new_privs flag will be set on the container process.
+ AllowPrivilegeEscalation is true always when the container is:
+ 1) run as Privileged
+ 2) has CAP_SYS_ADMIN
+ Note that this field cannot be set when spec.os.name is windows.
+ type: boolean
+ capabilities:
+ description: |-
+ The capabilities to add/drop when running containers.
+ Defaults to the default set of capabilities granted by the container runtime.
+ Note that this field cannot be set when spec.os.name is windows.
+ properties:
+ add:
+ description: Added capabilities
+ items:
+ description: Capability represent POSIX capabilities type
+ type: string
+ type: array
+ drop:
+ description: Removed capabilities
+ items:
+ description: Capability represent POSIX capabilities type
+ type: string
+ type: array
+ type: object
+ privileged:
+ description: |-
+ Run container in privileged mode.
+ Processes in privileged containers are essentially equivalent to root on the host.
+ Defaults to false.
+ Note that this field cannot be set when spec.os.name is windows.
+ type: boolean
+ procMount:
+ description: |-
+ procMount denotes the type of proc mount to use for the containers.
+ The default is DefaultProcMount which uses the container runtime defaults for
+ readonly paths and masked paths.
+ This requires the ProcMountType feature flag to be enabled.
+ Note that this field cannot be set when spec.os.name is windows.
+ type: string
+ readOnlyRootFilesystem:
+ description: |-
+ Whether this container has a read-only root filesystem.
+ Default is false.
+ Note that this field cannot be set when spec.os.name is windows.
+ type: boolean
+ runAsGroup:
+ description: |-
+ The GID to run the entrypoint of the container process.
+ Uses runtime default if unset.
+ May also be set in PodSecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence.
+ Note that this field cannot be set when spec.os.name is windows.
+ format: int64
+ type: integer
+ runAsNonRoot:
+ description: |-
+ Indicates that the container must run as a non-root user.
+ If true, the Kubelet will validate the image at runtime to ensure that it
+ does not run as UID 0 (root) and fail to start the container if it does.
+ If unset or false, no such validation will be performed.
+ May also be set in PodSecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence.
+ type: boolean
+ runAsUser:
+ description: |-
+ The UID to run the entrypoint of the container process.
+ Defaults to user specified in image metadata if unspecified.
+ May also be set in PodSecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence.
+ Note that this field cannot be set when spec.os.name is windows.
+ format: int64
+ type: integer
+ seLinuxOptions:
+ description: |-
+ The SELinux context to be applied to the container.
+ If unspecified, the container runtime will allocate a random SELinux context for each
+ container. May also be set in PodSecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence.
+ Note that this field cannot be set when spec.os.name is windows.
+ properties:
+ level:
+ description: Level is SELinux level label that applies to the container.
+ type: string
+ role:
+ description: Role is a SELinux role label that applies to the container.
+ type: string
+ type:
+ description: Type is a SELinux type label that applies to the container.
+ type: string
+ user:
+ description: User is a SELinux user label that applies to the container.
+ type: string
+ type: object
+ seccompProfile:
+ description: |-
+ The seccomp options to use by this container. If seccomp options are
+ provided at both the pod & container level, the container options
+ override the pod options.
+ Note that this field cannot be set when spec.os.name is windows.
+ properties:
+ localhostProfile:
+ description: |-
+ localhostProfile indicates a profile defined in a file on the node should be used.
+ The profile must be preconfigured on the node to work.
+ Must be a descending path, relative to the kubelet's configured seccomp profile location.
+ Must be set if type is "Localhost". Must NOT be set for any other type.
+ type: string
+ type:
+ description: |-
+ type indicates which kind of seccomp profile will be applied.
+ Valid options are:
+
+
+ Localhost - a profile defined in a file on the node should be used.
+ RuntimeDefault - the container runtime default profile should be used.
+ Unconfined - no profile should be applied.
+ type: string
+ required:
+ - type
+ type: object
+ windowsOptions:
+ description: |-
+ The Windows specific settings applied to all containers.
+ If unspecified, the options from the PodSecurityContext will be used.
+ If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
+ Note that this field cannot be set when spec.os.name is linux.
+ properties:
+ gmsaCredentialSpec:
+ description: |-
+ GMSACredentialSpec is where the GMSA admission webhook
+ (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the
+ GMSA credential spec named by the GMSACredentialSpecName field.
+ type: string
+ gmsaCredentialSpecName:
+ description: GMSACredentialSpecName is the name of the GMSA credential spec to use.
+ type: string
+ hostProcess:
+ description: |-
+ HostProcess determines if a container should be run as a 'Host Process' container.
+ All of a Pod's containers must have the same effective HostProcess value
+ (it is not allowed to have a mix of HostProcess containers and non-HostProcess containers).
+ In addition, if HostProcess is true then HostNetwork must also be set to true.
+ type: boolean
+ runAsUserName:
+ description: |-
+ The UserName in Windows to run the entrypoint of the container process.
+ Defaults to the user specified in image metadata if unspecified.
+ May also be set in PodSecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence.
+ type: string
+ type: object
+ type: object
+ startupProbe:
+ description: Probes are not allowed for ephemeral containers.
+ properties:
+ exec:
+ description: Exec specifies the action to take.
+ properties:
+ command:
+ description: |-
+ Command is the command line to execute inside the container, the working directory for the
+ command is root ('/') in the container's filesystem. The command is simply exec'd, it is
+ not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
+ a shell, you need to explicitly call out to that shell.
+ Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ description: |-
+ Minimum consecutive failures for the probe to be considered failed after having succeeded.
+ Defaults to 3. Minimum value is 1.
+ format: int32
+ type: integer
+ grpc:
+ description: GRPC specifies an action involving a GRPC port.
+ properties:
+ port:
+ description: Port number of the gRPC service. Number must be in the range 1 to 65535.
+ format: int32
+ type: integer
+ service:
+ description: |-
+ Service is the name of the service to place in the gRPC HealthCheckRequest
+ (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
+
+
+ If this is not specified, the default behavior is defined by gRPC.
+ type: string
+ required:
+ - port
+ type: object
+ httpGet:
+ description: HTTPGet specifies the http request to perform.
+ properties:
+ host:
+ description: |-
+ Host name to connect to, defaults to the pod IP. You probably want to set
+ "Host" in httpHeaders instead.
+ type: string
+ httpHeaders:
+ description: Custom headers to set in the request. HTTP allows repeated headers.
+ items:
+ description: HTTPHeader describes a custom header to be used in HTTP probes
+ properties:
+ name:
+ description: |-
+ The header field name.
+ This will be canonicalized upon output, so case-variant names will be understood as the same header.
+ type: string
+ value:
+ description: The header field value
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ path:
+ description: Path to access on the HTTP server.
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Name or number of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ scheme:
+ description: |-
+ Scheme to use for connecting to the host.
+ Defaults to HTTP.
+ type: string
+ required:
+ - port
+ type: object
+ initialDelaySeconds:
+ description: |-
+ Number of seconds after the container has started before liveness probes are initiated.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ periodSeconds:
+ description: |-
+ How often (in seconds) to perform the probe.
+ Default to 10 seconds. Minimum value is 1.
+ format: int32
+ type: integer
+ successThreshold:
+ description: |-
+ Minimum consecutive successes for the probe to be considered successful after having failed.
+ Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.
+ format: int32
+ type: integer
+ tcpSocket:
+ description: TCPSocket specifies an action involving a TCP port.
+ properties:
+ host:
+ description: 'Optional: Host name to connect to, defaults to the pod IP.'
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Number or name of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ required:
+ - port
+ type: object
+ terminationGracePeriodSeconds:
+ description: |-
+ Optional duration in seconds the pod needs to terminate gracefully upon probe failure.
+ The grace period is the duration in seconds after the processes running in the pod are sent
+ a termination signal and the time when the processes are forcibly halted with a kill signal.
+ Set this value longer than the expected cleanup time for your process.
+ If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this
+ value overrides the value provided by the pod spec.
+ Value must be non-negative integer. The value zero indicates stop immediately via
+ the kill signal (no opportunity to shut down).
+ This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate.
+ Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.
+ format: int64
+ type: integer
+ timeoutSeconds:
+ description: |-
+ Number of seconds after which the probe times out.
+ Defaults to 1 second. Minimum value is 1.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ type: object
+ stdin:
+ description: |-
+ Whether this container should allocate a buffer for stdin in the container runtime. If this
+ is not set, reads from stdin in the container will always result in EOF.
+ Default is false.
+ type: boolean
+ stdinOnce:
+ description: |-
+ Whether the container runtime should close the stdin channel after it has been opened by
+ a single attach. When stdin is true the stdin stream will remain open across multiple attach
+ sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the
+ first client attaches to stdin, and then remains open and accepts data until the client disconnects,
+ at which time stdin is closed and remains closed until the container is restarted. If this
+ flag is false, a container processes that reads from stdin will never receive an EOF.
+ Default is false
+ type: boolean
+ targetContainerName:
+ description: |-
+ If set, the name of the container from PodSpec that this ephemeral container targets.
+ The ephemeral container will be run in the namespaces (IPC, PID, etc) of this container.
+ If not set then the ephemeral container uses the namespaces configured in the Pod spec.
+
+
+ The container runtime must implement support for this feature. If the runtime does not
+ support namespace targeting then the result of setting this field is undefined.
+ type: string
+ terminationMessagePath:
+ description: |-
+ Optional: Path at which the file to which the container's termination message
+ will be written is mounted into the container's filesystem.
+ Message written is intended to be brief final status, such as an assertion failure message.
+ Will be truncated by the node if greater than 4096 bytes. The total message length across
+ all containers will be limited to 12kb.
+ Defaults to /dev/termination-log.
+ Cannot be updated.
+ type: string
+ terminationMessagePolicy:
+ description: |-
+ Indicate how the termination message should be populated. File will use the contents of
+ terminationMessagePath to populate the container status message on both success and failure.
+ FallbackToLogsOnError will use the last chunk of container log output if the termination
+ message file is empty and the container exited with an error.
+ The log output is limited to 2048 bytes or 80 lines, whichever is smaller.
+ Defaults to File.
+ Cannot be updated.
+ type: string
+ tty:
+ description: |-
+ Whether this container should allocate a TTY for itself, also requires 'stdin' to be true.
+ Default is false.
+ type: boolean
+ volumeDevices:
+ description: volumeDevices is the list of block devices to be used by the container.
+ items:
+ description: volumeDevice describes a mapping of a raw block device within a container.
+ properties:
+ devicePath:
+ description: devicePath is the path inside of the container that the device will be mapped to.
+ type: string
+ name:
+ description: name must match the name of a persistentVolumeClaim in the pod
+ type: string
+ required:
+ - devicePath
+ - name
+ type: object
+ type: array
+ volumeMounts:
+ description: |-
+ Pod volumes to mount into the container's filesystem. Subpath mounts are not allowed for ephemeral containers.
+ Cannot be updated.
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
+ workingDir:
+ description: |-
+ Container's working directory.
+ If not specified, the container runtime's default will be used, which
+ might be configured in the container image.
+ Cannot be updated.
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ hostAliases:
+ description: |-
+ HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts
+ file if specified. This is only valid for non-hostNetwork pods.
+ items:
+ description: |-
+ HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the
+ pod's hosts file.
+ properties:
+ hostnames:
+ description: Hostnames for the above IP address.
+ items:
+ type: string
+ type: array
+ ip:
+ description: IP address of the host file entry.
+ type: string
+ type: object
+ type: array
+ hostIPC:
+ description: |-
+ Use the host's ipc namespace.
+ Optional: Default to false.
+ type: boolean
+ hostNetwork:
+ description: |-
+ Host networking requested for this pod. Use the host's network namespace.
+ If this option is set, the ports that will be used must be specified.
+ Default to false.
+ type: boolean
+ hostPID:
+ description: |-
+ Use the host's pid namespace.
+ Optional: Default to false.
+ type: boolean
+ hostUsers:
+ description: |-
+ Use the host's user namespace.
+ Optional: Default to true.
+ If set to true or not present, the pod will be run in the host user namespace, useful
+ for when the pod needs a feature only available to the host user namespace, such as
+ loading a kernel module with CAP_SYS_MODULE.
+ When set to false, a new userns is created for the pod. Setting false is useful for
+ mitigating container breakout vulnerabilities even allowing users to run their
+ containers as root without actually having root privileges on the host.
+ This field is alpha-level and is only honored by servers that enable the UserNamespacesSupport feature.
+ type: boolean
+ hostname:
+ description: |-
+ Specifies the hostname of the Pod
+ If not specified, the pod's hostname will be set to a system-defined value.
+ type: string
+ imagePullSecrets:
+ description: |-
+ ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec.
+ If specified, these secrets will be passed to individual puller implementations for them to use.
+ More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod
+ items:
+ description: |-
+ LocalObjectReference contains enough information to let you locate the
+ referenced object inside the same namespace.
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ type: array
+ initContainers:
+ description: |-
+ List of initialization containers belonging to the pod.
+ Init containers are executed in order prior to containers being started. If any
+ init container fails, the pod is considered to have failed and is handled according
+ to its restartPolicy. The name for an init container or normal container must be
+ unique among all containers.
+ Init containers may not have Lifecycle actions, Readiness probes, Liveness probes, or Startup probes.
+ The resourceRequirements of an init container are taken into account during scheduling
+ by finding the highest request/limit for each resource type, and then using the max of
+ of that value or the sum of the normal containers. Limits are applied to init containers
+ in a similar fashion.
+ Init containers cannot currently be added or removed.
+ Cannot be updated.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
+ items:
+ description: A single application container that you want to run within a pod.
+ properties:
+ args:
+ description: |-
+ Arguments to the entrypoint.
+ The container image's CMD is used if this is not provided.
+ Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
+ cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will
+ produce the string literal "$(VAR_NAME)". Escaped references will never be expanded, regardless
+ of whether the variable exists or not. Cannot be updated.
+ More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
+ items:
+ type: string
+ type: array
+ command:
+ description: |-
+ Entrypoint array. Not executed within a shell.
+ The container image's ENTRYPOINT is used if this is not provided.
+ Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
+ cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will
+ produce the string literal "$(VAR_NAME)". Escaped references will never be expanded, regardless
+ of whether the variable exists or not. Cannot be updated.
+ More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
+ items:
+ type: string
+ type: array
+ env:
+ description: |-
+ List of environment variables to set in the container.
+ Cannot be updated.
+ items:
+ description: EnvVar represents an environment variable present in a Container.
+ properties:
+ name:
+ description: Name of the environment variable. Must be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $$ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment variable's value. Cannot be used if value is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: Specify whether the ConfigMap or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ properties:
+ apiVersion:
+ description: Version of the schema the FieldPath is written in terms of, defaults to "v1".
+ type: string
+ fieldPath:
+ description: Path of the field to select in the specified API version.
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
+ properties:
+ containerName:
+ description: 'Container name: required for volumes, optional for env vars'
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ description: Specifies the output format of the exposed resources, defaults to "1"
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ description: 'Required: resource to select'
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ secretKeyRef:
+ description: Selects a key of a secret in the pod's namespace
+ properties:
+ key:
+ description: The key of the secret to select from. Must be a valid secret key.
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: Specify whether the Secret or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ envFrom:
+ description: |-
+ List of sources to populate environment variables in the container.
+ The keys defined within a source must be a C_IDENTIFIER. All invalid keys
+ will be reported as an event when the container is starting. When a key exists in multiple
+ sources, the value associated with the last source will take precedence.
+ Values defined by an Env with a duplicate key will take precedence.
+ Cannot be updated.
+ items:
+ description: EnvFromSource represents the source of a set of ConfigMaps
+ properties:
+ configMapRef:
+ description: The ConfigMap to select from
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: Specify whether the ConfigMap must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ prefix:
+ description: An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.
+ type: string
+ secretRef:
+ description: The Secret to select from
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: Specify whether the Secret must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ type: object
+ type: array
+ image:
+ description: |-
+ Container image name.
+ More info: https://kubernetes.io/docs/concepts/containers/images
+ This field is optional to allow higher level config management to default or override
+ container images in workload controllers like Deployments and StatefulSets.
+ type: string
+ imagePullPolicy:
+ description: |-
+ Image pull policy.
+ One of Always, Never, IfNotPresent.
+ Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.
+ Cannot be updated.
+ More info: https://kubernetes.io/docs/concepts/containers/images#updating-images
+ type: string
+ lifecycle:
+ description: |-
+ Actions that the management system should take in response to container lifecycle events.
+ Cannot be updated.
+ properties:
+ postStart:
+ description: |-
+ PostStart is called immediately after a container is created. If the handler fails,
+ the container is terminated and restarted according to its restart policy.
+ Other management of the container blocks until the hook completes.
+ More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
+ properties:
+ exec:
+ description: Exec specifies the action to take.
+ properties:
+ command:
+ description: |-
+ Command is the command line to execute inside the container, the working directory for the
+ command is root ('/') in the container's filesystem. The command is simply exec'd, it is
+ not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
+ a shell, you need to explicitly call out to that shell.
+ Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ description: HTTPGet specifies the http request to perform.
+ properties:
+ host:
+ description: |-
+ Host name to connect to, defaults to the pod IP. You probably want to set
+ "Host" in httpHeaders instead.
+ type: string
+ httpHeaders:
+ description: Custom headers to set in the request. HTTP allows repeated headers.
+ items:
+ description: HTTPHeader describes a custom header to be used in HTTP probes
+ properties:
+ name:
+ description: |-
+ The header field name.
+ This will be canonicalized upon output, so case-variant names will be understood as the same header.
+ type: string
+ value:
+ description: The header field value
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ path:
+ description: Path to access on the HTTP server.
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Name or number of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ scheme:
+ description: |-
+ Scheme to use for connecting to the host.
+ Defaults to HTTP.
+ type: string
+ required:
+ - port
+ type: object
+ sleep:
+ description: Sleep represents the duration that the container should sleep before being terminated.
+ properties:
+ seconds:
+ description: Seconds is the number of seconds to sleep.
+ format: int64
+ type: integer
+ required:
+ - seconds
+ type: object
+ tcpSocket:
+ description: |-
+ Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
+ for the backward compatibility. There are no validation of this field and
+ lifecycle hooks will fail in runtime when tcp handler is specified.
+ properties:
+ host:
+ description: 'Optional: Host name to connect to, defaults to the pod IP.'
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Number or name of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ required:
+ - port
+ type: object
+ type: object
+ preStop:
+ description: |-
+ PreStop is called immediately before a container is terminated due to an
+ API request or management event such as liveness/startup probe failure,
+ preemption, resource contention, etc. The handler is not called if the
+ container crashes or exits. The Pod's termination grace period countdown begins before the
+ PreStop hook is executed. Regardless of the outcome of the handler, the
+ container will eventually terminate within the Pod's termination grace
+ period (unless delayed by finalizers). Other management of the container blocks until the hook completes
+ or until the termination grace period is reached.
+ More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
+ properties:
+ exec:
+ description: Exec specifies the action to take.
+ properties:
+ command:
+ description: |-
+ Command is the command line to execute inside the container, the working directory for the
+ command is root ('/') in the container's filesystem. The command is simply exec'd, it is
+ not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
+ a shell, you need to explicitly call out to that shell.
+ Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ description: HTTPGet specifies the http request to perform.
+ properties:
+ host:
+ description: |-
+ Host name to connect to, defaults to the pod IP. You probably want to set
+ "Host" in httpHeaders instead.
+ type: string
+ httpHeaders:
+ description: Custom headers to set in the request. HTTP allows repeated headers.
+ items:
+ description: HTTPHeader describes a custom header to be used in HTTP probes
+ properties:
+ name:
+ description: |-
+ The header field name.
+ This will be canonicalized upon output, so case-variant names will be understood as the same header.
+ type: string
+ value:
+ description: The header field value
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ path:
+ description: Path to access on the HTTP server.
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Name or number of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ scheme:
+ description: |-
+ Scheme to use for connecting to the host.
+ Defaults to HTTP.
+ type: string
+ required:
+ - port
+ type: object
+ sleep:
+ description: Sleep represents the duration that the container should sleep before being terminated.
+ properties:
+ seconds:
+ description: Seconds is the number of seconds to sleep.
+ format: int64
+ type: integer
+ required:
+ - seconds
+ type: object
+ tcpSocket:
+ description: |-
+ Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
+ for the backward compatibility. There are no validation of this field and
+ lifecycle hooks will fail in runtime when tcp handler is specified.
+ properties:
+ host:
+ description: 'Optional: Host name to connect to, defaults to the pod IP.'
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Number or name of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ required:
+ - port
+ type: object
+ type: object
+ type: object
+ livenessProbe:
+ description: |-
+ Periodic probe of container liveness.
+ Container will be restarted if the probe fails.
+ Cannot be updated.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ properties:
+ exec:
+ description: Exec specifies the action to take.
+ properties:
+ command:
+ description: |-
+ Command is the command line to execute inside the container, the working directory for the
+ command is root ('/') in the container's filesystem. The command is simply exec'd, it is
+ not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
+ a shell, you need to explicitly call out to that shell.
+ Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ description: |-
+ Minimum consecutive failures for the probe to be considered failed after having succeeded.
+ Defaults to 3. Minimum value is 1.
+ format: int32
+ type: integer
+ grpc:
+ description: GRPC specifies an action involving a GRPC port.
+ properties:
+ port:
+ description: Port number of the gRPC service. Number must be in the range 1 to 65535.
+ format: int32
+ type: integer
+ service:
+ description: |-
+ Service is the name of the service to place in the gRPC HealthCheckRequest
+ (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
+
+
+ If this is not specified, the default behavior is defined by gRPC.
+ type: string
+ required:
+ - port
+ type: object
+ httpGet:
+ description: HTTPGet specifies the http request to perform.
+ properties:
+ host:
+ description: |-
+ Host name to connect to, defaults to the pod IP. You probably want to set
+ "Host" in httpHeaders instead.
+ type: string
+ httpHeaders:
+ description: Custom headers to set in the request. HTTP allows repeated headers.
+ items:
+ description: HTTPHeader describes a custom header to be used in HTTP probes
+ properties:
+ name:
+ description: |-
+ The header field name.
+ This will be canonicalized upon output, so case-variant names will be understood as the same header.
+ type: string
+ value:
+ description: The header field value
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ path:
+ description: Path to access on the HTTP server.
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Name or number of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ scheme:
+ description: |-
+ Scheme to use for connecting to the host.
+ Defaults to HTTP.
+ type: string
+ required:
+ - port
+ type: object
+ initialDelaySeconds:
+ description: |-
+ Number of seconds after the container has started before liveness probes are initiated.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ periodSeconds:
+ description: |-
+ How often (in seconds) to perform the probe.
+ Default to 10 seconds. Minimum value is 1.
+ format: int32
+ type: integer
+ successThreshold:
+ description: |-
+ Minimum consecutive successes for the probe to be considered successful after having failed.
+ Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.
+ format: int32
+ type: integer
+ tcpSocket:
+ description: TCPSocket specifies an action involving a TCP port.
+ properties:
+ host:
+ description: 'Optional: Host name to connect to, defaults to the pod IP.'
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Number or name of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ required:
+ - port
+ type: object
+ terminationGracePeriodSeconds:
+ description: |-
+ Optional duration in seconds the pod needs to terminate gracefully upon probe failure.
+ The grace period is the duration in seconds after the processes running in the pod are sent
+ a termination signal and the time when the processes are forcibly halted with a kill signal.
+ Set this value longer than the expected cleanup time for your process.
+ If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this
+ value overrides the value provided by the pod spec.
+ Value must be non-negative integer. The value zero indicates stop immediately via
+ the kill signal (no opportunity to shut down).
+ This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate.
+ Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.
+ format: int64
+ type: integer
+ timeoutSeconds:
+ description: |-
+ Number of seconds after which the probe times out.
+ Defaults to 1 second. Minimum value is 1.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ type: object
+ name:
+ description: |-
+ Name of the container specified as a DNS_LABEL.
+ Each container in a pod must have a unique name (DNS_LABEL).
+ Cannot be updated.
+ type: string
+ ports:
+ description: |-
+ List of ports to expose from the container. Not specifying a port here
+ DOES NOT prevent that port from being exposed. Any port which is
+ listening on the default "0.0.0.0" address inside a container will be
+ accessible from the network.
+ Modifying this array with strategic merge patch may corrupt the data.
+ For more information See https://github.com/kubernetes/kubernetes/issues/108255.
+ Cannot be updated.
+ items:
+ description: ContainerPort represents a network port in a single container.
+ properties:
+ containerPort:
+ description: |-
+ Number of port to expose on the pod's IP address.
+ This must be a valid port number, 0 < x < 65536.
+ format: int32
+ type: integer
+ hostIP:
+ description: What host IP to bind the external port to.
+ type: string
+ hostPort:
+ description: |-
+ Number of port to expose on the host.
+ If specified, this must be a valid port number, 0 < x < 65536.
+ If HostNetwork is specified, this must match ContainerPort.
+ Most containers do not need this.
+ format: int32
+ type: integer
+ name:
+ description: |-
+ If specified, this must be an IANA_SVC_NAME and unique within the pod. Each
+ named port in a pod must have a unique name. Name for the port that can be
+ referred to by services.
+ type: string
+ protocol:
+ default: TCP
+ description: |-
+ Protocol for port. Must be UDP, TCP, or SCTP.
+ Defaults to "TCP".
+ type: string
+ required:
+ - containerPort
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - containerPort
+ - protocol
+ x-kubernetes-list-type: map
+ readinessProbe:
+ description: |-
+ Periodic probe of container service readiness.
+ Container will be removed from service endpoints if the probe fails.
+ Cannot be updated.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ properties:
+ exec:
+ description: Exec specifies the action to take.
+ properties:
+ command:
+ description: |-
+ Command is the command line to execute inside the container, the working directory for the
+ command is root ('/') in the container's filesystem. The command is simply exec'd, it is
+ not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
+ a shell, you need to explicitly call out to that shell.
+ Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ description: |-
+ Minimum consecutive failures for the probe to be considered failed after having succeeded.
+ Defaults to 3. Minimum value is 1.
+ format: int32
+ type: integer
+ grpc:
+ description: GRPC specifies an action involving a GRPC port.
+ properties:
+ port:
+ description: Port number of the gRPC service. Number must be in the range 1 to 65535.
+ format: int32
+ type: integer
+ service:
+ description: |-
+ Service is the name of the service to place in the gRPC HealthCheckRequest
+ (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
+
+
+ If this is not specified, the default behavior is defined by gRPC.
+ type: string
+ required:
+ - port
+ type: object
+ httpGet:
+ description: HTTPGet specifies the http request to perform.
+ properties:
+ host:
+ description: |-
+ Host name to connect to, defaults to the pod IP. You probably want to set
+ "Host" in httpHeaders instead.
+ type: string
+ httpHeaders:
+ description: Custom headers to set in the request. HTTP allows repeated headers.
+ items:
+ description: HTTPHeader describes a custom header to be used in HTTP probes
+ properties:
+ name:
+ description: |-
+ The header field name.
+ This will be canonicalized upon output, so case-variant names will be understood as the same header.
+ type: string
+ value:
+ description: The header field value
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ path:
+ description: Path to access on the HTTP server.
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Name or number of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ scheme:
+ description: |-
+ Scheme to use for connecting to the host.
+ Defaults to HTTP.
+ type: string
+ required:
+ - port
+ type: object
+ initialDelaySeconds:
+ description: |-
+ Number of seconds after the container has started before liveness probes are initiated.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ periodSeconds:
+ description: |-
+ How often (in seconds) to perform the probe.
+ Default to 10 seconds. Minimum value is 1.
+ format: int32
+ type: integer
+ successThreshold:
+ description: |-
+ Minimum consecutive successes for the probe to be considered successful after having failed.
+ Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.
+ format: int32
+ type: integer
+ tcpSocket:
+ description: TCPSocket specifies an action involving a TCP port.
+ properties:
+ host:
+ description: 'Optional: Host name to connect to, defaults to the pod IP.'
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Number or name of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ required:
+ - port
+ type: object
+ terminationGracePeriodSeconds:
+ description: |-
+ Optional duration in seconds the pod needs to terminate gracefully upon probe failure.
+ The grace period is the duration in seconds after the processes running in the pod are sent
+ a termination signal and the time when the processes are forcibly halted with a kill signal.
+ Set this value longer than the expected cleanup time for your process.
+ If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this
+ value overrides the value provided by the pod spec.
+ Value must be non-negative integer. The value zero indicates stop immediately via
+ the kill signal (no opportunity to shut down).
+ This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate.
+ Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.
+ format: int64
+ type: integer
+ timeoutSeconds:
+ description: |-
+ Number of seconds after which the probe times out.
+ Defaults to 1 second. Minimum value is 1.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ type: object
+ resizePolicy:
+ description: Resources resize policy for the container.
+ items:
+ description: ContainerResizePolicy represents resource resize policy for the container.
+ properties:
+ resourceName:
+ description: |-
+ Name of the resource to which this resource resize policy applies.
+ Supported values: cpu, memory.
+ type: string
+ restartPolicy:
+ description: |-
+ Restart policy to apply when specified resource is resized.
+ If not specified, it defaults to NotRequired.
+ type: string
+ required:
+ - resourceName
+ - restartPolicy
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ resources:
+ description: |-
+ Compute Resources required by this container.
+ Cannot be updated.
+ More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ properties:
+ claims:
+ description: |-
+ Claims lists the names of resources, defined in spec.resourceClaims,
+ that are used by this container.
+
+
+ This is an alpha field and requires enabling the
+ DynamicResourceAllocation feature gate.
+
+
+ This field is immutable. It can only be set for containers.
+ items:
+ description: ResourceClaim references one entry in PodSpec.ResourceClaims.
+ properties:
+ name:
+ description: |-
+ Name must match the name of one entry in pod.spec.resourceClaims of
+ the Pod where this field is used. It makes that resource available
+ inside a container.
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: |-
+ Limits describes the maximum amount of compute resources allowed.
+ More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: |-
+ Requests describes the minimum amount of compute resources required.
+ If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
+ otherwise to an implementation-defined value. Requests cannot exceed Limits.
+ More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ type: object
+ type: object
+ restartPolicy:
+ description: |-
+ RestartPolicy defines the restart behavior of individual containers in a pod.
+ This field may only be set for init containers, and the only allowed value is "Always".
+ For non-init containers or when this field is not specified,
+ the restart behavior is defined by the Pod's restart policy and the container type.
+ Setting the RestartPolicy as "Always" for the init container will have the following effect:
+ this init container will be continually restarted on
+ exit until all regular containers have terminated. Once all regular
+ containers have completed, all init containers with restartPolicy "Always"
+ will be shut down. This lifecycle differs from normal init containers and
+ is often referred to as a "sidecar" container. Although this init
+ container still starts in the init container sequence, it does not wait
+ for the container to complete before proceeding to the next init
+ container. Instead, the next init container starts immediately after this
+ init container is started, or after any startupProbe has successfully
+ completed.
+ type: string
+ securityContext:
+ description: |-
+ SecurityContext defines the security options the container should be run with.
+ If set, the fields of SecurityContext override the equivalent fields of PodSecurityContext.
+ More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
+ properties:
+ allowPrivilegeEscalation:
+ description: |-
+ AllowPrivilegeEscalation controls whether a process can gain more
+ privileges than its parent process. This bool directly controls if
+ the no_new_privs flag will be set on the container process.
+ AllowPrivilegeEscalation is true always when the container is:
+ 1) run as Privileged
+ 2) has CAP_SYS_ADMIN
+ Note that this field cannot be set when spec.os.name is windows.
+ type: boolean
+ capabilities:
+ description: |-
+ The capabilities to add/drop when running containers.
+ Defaults to the default set of capabilities granted by the container runtime.
+ Note that this field cannot be set when spec.os.name is windows.
+ properties:
+ add:
+ description: Added capabilities
+ items:
+ description: Capability represent POSIX capabilities type
+ type: string
+ type: array
+ drop:
+ description: Removed capabilities
+ items:
+ description: Capability represent POSIX capabilities type
+ type: string
+ type: array
+ type: object
+ privileged:
+ description: |-
+ Run container in privileged mode.
+ Processes in privileged containers are essentially equivalent to root on the host.
+ Defaults to false.
+ Note that this field cannot be set when spec.os.name is windows.
+ type: boolean
+ procMount:
+ description: |-
+ procMount denotes the type of proc mount to use for the containers.
+ The default is DefaultProcMount which uses the container runtime defaults for
+ readonly paths and masked paths.
+ This requires the ProcMountType feature flag to be enabled.
+ Note that this field cannot be set when spec.os.name is windows.
+ type: string
+ readOnlyRootFilesystem:
+ description: |-
+ Whether this container has a read-only root filesystem.
+ Default is false.
+ Note that this field cannot be set when spec.os.name is windows.
+ type: boolean
+ runAsGroup:
+ description: |-
+ The GID to run the entrypoint of the container process.
+ Uses runtime default if unset.
+ May also be set in PodSecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence.
+ Note that this field cannot be set when spec.os.name is windows.
+ format: int64
+ type: integer
+ runAsNonRoot:
+ description: |-
+ Indicates that the container must run as a non-root user.
+ If true, the Kubelet will validate the image at runtime to ensure that it
+ does not run as UID 0 (root) and fail to start the container if it does.
+ If unset or false, no such validation will be performed.
+ May also be set in PodSecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence.
+ type: boolean
+ runAsUser:
+ description: |-
+ The UID to run the entrypoint of the container process.
+ Defaults to user specified in image metadata if unspecified.
+ May also be set in PodSecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence.
+ Note that this field cannot be set when spec.os.name is windows.
+ format: int64
+ type: integer
+ seLinuxOptions:
+ description: |-
+ The SELinux context to be applied to the container.
+ If unspecified, the container runtime will allocate a random SELinux context for each
+ container. May also be set in PodSecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence.
+ Note that this field cannot be set when spec.os.name is windows.
+ properties:
+ level:
+ description: Level is SELinux level label that applies to the container.
+ type: string
+ role:
+ description: Role is a SELinux role label that applies to the container.
+ type: string
+ type:
+ description: Type is a SELinux type label that applies to the container.
+ type: string
+ user:
+ description: User is a SELinux user label that applies to the container.
+ type: string
+ type: object
+ seccompProfile:
+ description: |-
+ The seccomp options to use by this container. If seccomp options are
+ provided at both the pod & container level, the container options
+ override the pod options.
+ Note that this field cannot be set when spec.os.name is windows.
+ properties:
+ localhostProfile:
+ description: |-
+ localhostProfile indicates a profile defined in a file on the node should be used.
+ The profile must be preconfigured on the node to work.
+ Must be a descending path, relative to the kubelet's configured seccomp profile location.
+ Must be set if type is "Localhost". Must NOT be set for any other type.
+ type: string
+ type:
+ description: |-
+ type indicates which kind of seccomp profile will be applied.
+ Valid options are:
+
+
+ Localhost - a profile defined in a file on the node should be used.
+ RuntimeDefault - the container runtime default profile should be used.
+ Unconfined - no profile should be applied.
+ type: string
+ required:
+ - type
+ type: object
+ windowsOptions:
+ description: |-
+ The Windows specific settings applied to all containers.
+ If unspecified, the options from the PodSecurityContext will be used.
+ If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
+ Note that this field cannot be set when spec.os.name is linux.
+ properties:
+ gmsaCredentialSpec:
+ description: |-
+ GMSACredentialSpec is where the GMSA admission webhook
+ (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the
+ GMSA credential spec named by the GMSACredentialSpecName field.
+ type: string
+ gmsaCredentialSpecName:
+ description: GMSACredentialSpecName is the name of the GMSA credential spec to use.
+ type: string
+ hostProcess:
+ description: |-
+ HostProcess determines if a container should be run as a 'Host Process' container.
+ All of a Pod's containers must have the same effective HostProcess value
+ (it is not allowed to have a mix of HostProcess containers and non-HostProcess containers).
+ In addition, if HostProcess is true then HostNetwork must also be set to true.
+ type: boolean
+ runAsUserName:
+ description: |-
+ The UserName in Windows to run the entrypoint of the container process.
+ Defaults to the user specified in image metadata if unspecified.
+ May also be set in PodSecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence.
+ type: string
+ type: object
+ type: object
+ startupProbe:
+ description: |-
+ StartupProbe indicates that the Pod has successfully initialized.
+ If specified, no other probes are executed until this completes successfully.
+ If this probe fails, the Pod will be restarted, just as if the livenessProbe failed.
+ This can be used to provide different probe parameters at the beginning of a Pod's lifecycle,
+ when it might take a long time to load data or warm a cache, than during steady-state operation.
+ This cannot be updated.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ properties:
+ exec:
+ description: Exec specifies the action to take.
+ properties:
+ command:
+ description: |-
+ Command is the command line to execute inside the container, the working directory for the
+ command is root ('/') in the container's filesystem. The command is simply exec'd, it is
+ not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
+ a shell, you need to explicitly call out to that shell.
+ Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ description: |-
+ Minimum consecutive failures for the probe to be considered failed after having succeeded.
+ Defaults to 3. Minimum value is 1.
+ format: int32
+ type: integer
+ grpc:
+ description: GRPC specifies an action involving a GRPC port.
+ properties:
+ port:
+ description: Port number of the gRPC service. Number must be in the range 1 to 65535.
+ format: int32
+ type: integer
+ service:
+ description: |-
+ Service is the name of the service to place in the gRPC HealthCheckRequest
+ (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
+
+
+ If this is not specified, the default behavior is defined by gRPC.
+ type: string
+ required:
+ - port
+ type: object
+ httpGet:
+ description: HTTPGet specifies the http request to perform.
+ properties:
+ host:
+ description: |-
+ Host name to connect to, defaults to the pod IP. You probably want to set
+ "Host" in httpHeaders instead.
+ type: string
+ httpHeaders:
+ description: Custom headers to set in the request. HTTP allows repeated headers.
+ items:
+ description: HTTPHeader describes a custom header to be used in HTTP probes
+ properties:
+ name:
+ description: |-
+ The header field name.
+ This will be canonicalized upon output, so case-variant names will be understood as the same header.
+ type: string
+ value:
+ description: The header field value
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ path:
+ description: Path to access on the HTTP server.
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Name or number of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ scheme:
+ description: |-
+ Scheme to use for connecting to the host.
+ Defaults to HTTP.
+ type: string
+ required:
+ - port
+ type: object
+ initialDelaySeconds:
+ description: |-
+ Number of seconds after the container has started before liveness probes are initiated.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ periodSeconds:
+ description: |-
+ How often (in seconds) to perform the probe.
+ Default to 10 seconds. Minimum value is 1.
+ format: int32
+ type: integer
+ successThreshold:
+ description: |-
+ Minimum consecutive successes for the probe to be considered successful after having failed.
+ Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.
+ format: int32
+ type: integer
+ tcpSocket:
+ description: TCPSocket specifies an action involving a TCP port.
+ properties:
+ host:
+ description: 'Optional: Host name to connect to, defaults to the pod IP.'
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Number or name of the port to access on the container.
+ Number must be in the range 1 to 65535.
+ Name must be an IANA_SVC_NAME.
+ x-kubernetes-int-or-string: true
+ required:
+ - port
+ type: object
+ terminationGracePeriodSeconds:
+ description: |-
+ Optional duration in seconds the pod needs to terminate gracefully upon probe failure.
+ The grace period is the duration in seconds after the processes running in the pod are sent
+ a termination signal and the time when the processes are forcibly halted with a kill signal.
+ Set this value longer than the expected cleanup time for your process.
+ If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this
+ value overrides the value provided by the pod spec.
+ Value must be non-negative integer. The value zero indicates stop immediately via
+ the kill signal (no opportunity to shut down).
+ This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate.
+ Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.
+ format: int64
+ type: integer
+ timeoutSeconds:
+ description: |-
+ Number of seconds after which the probe times out.
+ Defaults to 1 second. Minimum value is 1.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ format: int32
+ type: integer
+ type: object
+ stdin:
+ description: |-
+ Whether this container should allocate a buffer for stdin in the container runtime. If this
+ is not set, reads from stdin in the container will always result in EOF.
+ Default is false.
+ type: boolean
+ stdinOnce:
+ description: |-
+ Whether the container runtime should close the stdin channel after it has been opened by
+ a single attach. When stdin is true the stdin stream will remain open across multiple attach
+ sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the
+ first client attaches to stdin, and then remains open and accepts data until the client disconnects,
+ at which time stdin is closed and remains closed until the container is restarted. If this
+ flag is false, a container processes that reads from stdin will never receive an EOF.
+ Default is false
+ type: boolean
+ terminationMessagePath:
+ description: |-
+ Optional: Path at which the file to which the container's termination message
+ will be written is mounted into the container's filesystem.
+ Message written is intended to be brief final status, such as an assertion failure message.
+ Will be truncated by the node if greater than 4096 bytes. The total message length across
+ all containers will be limited to 12kb.
+ Defaults to /dev/termination-log.
+ Cannot be updated.
+ type: string
+ terminationMessagePolicy:
+ description: |-
+ Indicate how the termination message should be populated. File will use the contents of
+ terminationMessagePath to populate the container status message on both success and failure.
+ FallbackToLogsOnError will use the last chunk of container log output if the termination
+ message file is empty and the container exited with an error.
+ The log output is limited to 2048 bytes or 80 lines, whichever is smaller.
+ Defaults to File.
+ Cannot be updated.
+ type: string
+ tty:
+ description: |-
+ Whether this container should allocate a TTY for itself, also requires 'stdin' to be true.
+ Default is false.
+ type: boolean
+ volumeDevices:
+ description: volumeDevices is the list of block devices to be used by the container.
+ items:
+ description: volumeDevice describes a mapping of a raw block device within a container.
+ properties:
+ devicePath:
+ description: devicePath is the path inside of the container that the device will be mapped to.
+ type: string
+ name:
+ description: name must match the name of a persistentVolumeClaim in the pod
+ type: string
+ required:
+ - devicePath
+ - name
+ type: object
+ type: array
+ volumeMounts:
+ description: |-
+ Pod volumes to mount into the container's filesystem.
+ Cannot be updated.
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
+ workingDir:
+ description: |-
+ Container's working directory.
+ If not specified, the container runtime's default will be used, which
+ might be configured in the container image.
+ Cannot be updated.
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ nodeName:
+ description: |-
+ NodeName is a request to schedule this pod onto a specific node. If it is non-empty,
+ the scheduler simply schedules this pod onto that node, assuming that it fits resource
+ requirements.
+ type: string
+ nodeSelector:
+ additionalProperties:
+ type: string
+ description: |-
+ NodeSelector is a selector which must be true for the pod to fit on a node.
+ Selector which must match a node's labels for the pod to be scheduled on that node.
+ More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
+ type: object
+ x-kubernetes-map-type: atomic
+ os:
+ description: |-
+ Specifies the OS of the containers in the pod.
+ Some pod and container fields are restricted if this is set.
+
+
+ If the OS field is set to linux, the following fields must be unset:
+ -securityContext.windowsOptions
+
+
+ If the OS field is set to windows, following fields must be unset:
+ - spec.hostPID
+ - spec.hostIPC
+ - spec.hostUsers
+ - spec.securityContext.seLinuxOptions
+ - spec.securityContext.seccompProfile
+ - spec.securityContext.fsGroup
+ - spec.securityContext.fsGroupChangePolicy
+ - spec.securityContext.sysctls
+ - spec.shareProcessNamespace
+ - spec.securityContext.runAsUser
+ - spec.securityContext.runAsGroup
+ - spec.securityContext.supplementalGroups
+ - spec.containers[*].securityContext.seLinuxOptions
+ - spec.containers[*].securityContext.seccompProfile
+ - spec.containers[*].securityContext.capabilities
+ - spec.containers[*].securityContext.readOnlyRootFilesystem
+ - spec.containers[*].securityContext.privileged
+ - spec.containers[*].securityContext.allowPrivilegeEscalation
+ - spec.containers[*].securityContext.procMount
+ - spec.containers[*].securityContext.runAsUser
+ - spec.containers[*].securityContext.runAsGroup
+ properties:
+ name:
+ description: |-
+ Name is the name of the operating system. The currently supported values are linux and windows.
+ Additional value may be defined in future and can be one of:
+ https://github.com/opencontainers/runtime-spec/blob/master/config.md#platform-specific-configuration
+ Clients should expect to handle additional values and treat unrecognized values in this field as os: null
+ type: string
+ required:
+ - name
+ type: object
+ overhead:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: |-
+ Overhead represents the resource overhead associated with running a pod for a given RuntimeClass.
+ This field will be autopopulated at admission time by the RuntimeClass admission controller. If
+ the RuntimeClass admission controller is enabled, overhead must not be set in Pod create requests.
+ The RuntimeClass admission controller will reject Pod create requests which have the overhead already
+ set. If RuntimeClass is configured and selected in the PodSpec, Overhead will be set to the value
+ defined in the corresponding RuntimeClass, otherwise it will remain unset and treated as zero.
+ More info: https://git.k8s.io/enhancements/keps/sig-node/688-pod-overhead/README.md
+ type: object
+ preemptionPolicy:
+ description: |-
+ PreemptionPolicy is the Policy for preempting pods with lower priority.
+ One of Never, PreemptLowerPriority.
+ Defaults to PreemptLowerPriority if unset.
+ type: string
+ priority:
+ description: |-
+ The priority value. Various system components use this field to find the
+ priority of the pod. When Priority Admission Controller is enabled, it
+ prevents users from setting this field. The admission controller populates
+ this field from PriorityClassName.
+ The higher the value, the higher the priority.
+ format: int32
+ type: integer
+ priorityClassName:
+ description: |-
+ If specified, indicates the pod's priority. "system-node-critical" and
+ "system-cluster-critical" are two special keywords which indicate the
+ highest priorities with the former being the highest priority. Any other
+ name must be defined by creating a PriorityClass object with that name.
+ If not specified, the pod priority will be default or zero if there is no
+ default.
+ type: string
+ readinessGates:
+ description: |-
+ If specified, all readiness gates will be evaluated for pod readiness.
+ A pod is ready when all its containers are ready AND
+ all conditions specified in the readiness gates have status equal to "True"
+ More info: https://git.k8s.io/enhancements/keps/sig-network/580-pod-readiness-gates
+ items:
+ description: PodReadinessGate contains the reference to a pod condition
+ properties:
+ conditionType:
+ description: ConditionType refers to a condition in the pod's condition list with matching type.
+ type: string
+ required:
+ - conditionType
+ type: object
+ type: array
+ resourceClaims:
+ description: |-
+ ResourceClaims defines which ResourceClaims must be allocated
+ and reserved before the Pod is allowed to start. The resources
+ will be made available to those containers which consume them
+ by name.
+
+
+ This is an alpha field and requires enabling the
+ DynamicResourceAllocation feature gate.
+
+
+ This field is immutable.
+ items:
+ description: |-
+ PodResourceClaim references exactly one ResourceClaim through a ClaimSource.
+ It adds a name to it that uniquely identifies the ResourceClaim inside the Pod.
+ Containers that need access to the ResourceClaim reference it with this name.
+ properties:
+ name:
+ description: |-
+ Name uniquely identifies this resource claim inside the pod.
+ This must be a DNS_LABEL.
+ type: string
+ source:
+ description: Source describes where to find the ResourceClaim.
+ properties:
+ resourceClaimName:
+ description: |-
+ ResourceClaimName is the name of a ResourceClaim object in the same
+ namespace as this pod.
+ type: string
+ resourceClaimTemplateName:
+ description: |-
+ ResourceClaimTemplateName is the name of a ResourceClaimTemplate
+ object in the same namespace as this pod.
+
+
+ The template will be used to create a new ResourceClaim, which will
+ be bound to this pod. When this pod is deleted, the ResourceClaim
+ will also be deleted. The pod name and resource name, along with a
+ generated component, will be used to form a unique name for the
+ ResourceClaim, which will be recorded in pod.status.resourceClaimStatuses.
+
+
+ This field is immutable and no changes will be made to the
+ corresponding ResourceClaim by the control plane after creating the
+ ResourceClaim.
+ type: string
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ restartPolicy:
+ description: |-
+ Restart policy for all containers within the pod.
+ One of Always, OnFailure, Never. In some contexts, only a subset of those values may be permitted.
+ Default to Always.
+ More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy
+ type: string
+ runtimeClassName:
+ description: |-
+ RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used
+ to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run.
+ If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an
+ empty definition that uses the default runtime handler.
+ More info: https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class
+ type: string
+ schedulerName:
+ description: |-
+ If specified, the pod will be dispatched by specified scheduler.
+ If not specified, the pod will be dispatched by default scheduler.
+ type: string
+ schedulingGates:
+ description: |-
+ SchedulingGates is an opaque list of values that if specified will block scheduling the pod.
+ If schedulingGates is not empty, the pod will stay in the SchedulingGated state and the
+ scheduler will not attempt to schedule the pod.
+
+
+ SchedulingGates can only be set at pod creation time, and be removed only afterwards.
+
+
+ This is a beta feature enabled by the PodSchedulingReadiness feature gate.
+ items:
+ description: PodSchedulingGate is associated to a Pod to guard its scheduling.
+ properties:
+ name:
+ description: |-
+ Name of the scheduling gate.
+ Each scheduling gate must have a unique name field.
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ securityContext:
+ description: |-
+ SecurityContext holds pod-level security attributes and common container settings.
+ Optional: Defaults to empty. See type description for default values of each field.
+ properties:
+ fsGroup:
+ description: |-
+ A special supplemental group that applies to all containers in a pod.
+ Some volume types allow the Kubelet to change the ownership of that volume
+ to be owned by the pod:
+
+
+ 1. The owning GID will be the FSGroup
+ 2. The setgid bit is set (new files created in the volume will be owned by FSGroup)
+ 3. The permission bits are OR'd with rw-rw----
+
+
+ If unset, the Kubelet will not modify the ownership and permissions of any volume.
+ Note that this field cannot be set when spec.os.name is windows.
+ format: int64
+ type: integer
+ fsGroupChangePolicy:
+ description: |-
+ fsGroupChangePolicy defines behavior of changing ownership and permission of the volume
+ before being exposed inside Pod. This field will only apply to
+ volume types which support fsGroup based ownership(and permissions).
+ It will have no effect on ephemeral volume types such as: secret, configmaps
+ and emptydir.
+ Valid values are "OnRootMismatch" and "Always". If not specified, "Always" is used.
+ Note that this field cannot be set when spec.os.name is windows.
+ type: string
+ runAsGroup:
+ description: |-
+ The GID to run the entrypoint of the container process.
+ Uses runtime default if unset.
+ May also be set in SecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence
+ for that container.
+ Note that this field cannot be set when spec.os.name is windows.
+ format: int64
+ type: integer
+ runAsNonRoot:
+ description: |-
+ Indicates that the container must run as a non-root user.
+ If true, the Kubelet will validate the image at runtime to ensure that it
+ does not run as UID 0 (root) and fail to start the container if it does.
+ If unset or false, no such validation will be performed.
+ May also be set in SecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence.
+ type: boolean
+ runAsUser:
+ description: |-
+ The UID to run the entrypoint of the container process.
+ Defaults to user specified in image metadata if unspecified.
+ May also be set in SecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence
+ for that container.
+ Note that this field cannot be set when spec.os.name is windows.
+ format: int64
+ type: integer
+ seLinuxOptions:
+ description: |-
+ The SELinux context to be applied to all containers.
+ If unspecified, the container runtime will allocate a random SELinux context for each
+ container. May also be set in SecurityContext. If set in
+ both SecurityContext and PodSecurityContext, the value specified in SecurityContext
+ takes precedence for that container.
+ Note that this field cannot be set when spec.os.name is windows.
+ properties:
+ level:
+ description: Level is SELinux level label that applies to the container.
+ type: string
+ role:
+ description: Role is a SELinux role label that applies to the container.
+ type: string
+ type:
+ description: Type is a SELinux type label that applies to the container.
+ type: string
+ user:
+ description: User is a SELinux user label that applies to the container.
+ type: string
+ type: object
+ seccompProfile:
+ description: |-
+ The seccomp options to use by the containers in this pod.
+ Note that this field cannot be set when spec.os.name is windows.
+ properties:
+ localhostProfile:
+ description: |-
+ localhostProfile indicates a profile defined in a file on the node should be used.
+ The profile must be preconfigured on the node to work.
+ Must be a descending path, relative to the kubelet's configured seccomp profile location.
+ Must be set if type is "Localhost". Must NOT be set for any other type.
+ type: string
+ type:
+ description: |-
+ type indicates which kind of seccomp profile will be applied.
+ Valid options are:
+
+
+ Localhost - a profile defined in a file on the node should be used.
+ RuntimeDefault - the container runtime default profile should be used.
+ Unconfined - no profile should be applied.
+ type: string
+ required:
+ - type
+ type: object
+ supplementalGroups:
+ description: |-
+ A list of groups applied to the first process run in each container, in addition
+ to the container's primary GID, the fsGroup (if specified), and group memberships
+ defined in the container image for the uid of the container process. If unspecified,
+ no additional groups are added to any container. Note that group memberships
+ defined in the container image for the uid of the container process are still effective,
+ even if they are not included in this list.
+ Note that this field cannot be set when spec.os.name is windows.
+ items:
+ format: int64
+ type: integer
+ type: array
+ sysctls:
+ description: |-
+ Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported
+ sysctls (by the container runtime) might fail to launch.
+ Note that this field cannot be set when spec.os.name is windows.
+ items:
+ description: Sysctl defines a kernel parameter to be set
+ properties:
+ name:
+ description: Name of a property to set
+ type: string
+ value:
+ description: Value of a property to set
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ windowsOptions:
+ description: |-
+ The Windows specific settings applied to all containers.
+ If unspecified, the options within a container's SecurityContext will be used.
+ If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
+ Note that this field cannot be set when spec.os.name is linux.
+ properties:
+ gmsaCredentialSpec:
+ description: |-
+ GMSACredentialSpec is where the GMSA admission webhook
+ (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the
+ GMSA credential spec named by the GMSACredentialSpecName field.
+ type: string
+ gmsaCredentialSpecName:
+ description: GMSACredentialSpecName is the name of the GMSA credential spec to use.
+ type: string
+ hostProcess:
+ description: |-
+ HostProcess determines if a container should be run as a 'Host Process' container.
+ All of a Pod's containers must have the same effective HostProcess value
+ (it is not allowed to have a mix of HostProcess containers and non-HostProcess containers).
+ In addition, if HostProcess is true then HostNetwork must also be set to true.
+ type: boolean
+ runAsUserName:
+ description: |-
+ The UserName in Windows to run the entrypoint of the container process.
+ Defaults to the user specified in image metadata if unspecified.
+ May also be set in PodSecurityContext. If set in both SecurityContext and
+ PodSecurityContext, the value specified in SecurityContext takes precedence.
+ type: string
+ type: object
+ type: object
+ serviceAccount:
+ description: |-
+ DeprecatedServiceAccount is a depreciated alias for ServiceAccountName.
+ Deprecated: Use serviceAccountName instead.
+ type: string
+ serviceAccountName:
+ description: |-
+ ServiceAccountName is the name of the ServiceAccount to use to run this pod.
+ More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
+ type: string
+ setHostnameAsFQDN:
+ description: |-
+ If true the pod's hostname will be configured as the pod's FQDN, rather than the leaf name (the default).
+ In Linux containers, this means setting the FQDN in the hostname field of the kernel (the nodename field of struct utsname).
+ In Windows containers, this means setting the registry value of hostname for the registry key HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters to FQDN.
+ If a pod does not have FQDN, this has no effect.
+ Default to false.
+ type: boolean
+ shareProcessNamespace:
+ description: |-
+ Share a single process namespace between all of the containers in a pod.
+ When this is set containers will be able to view and signal processes from other containers
+ in the same pod, and the first process in each container will not be assigned PID 1.
+ HostPID and ShareProcessNamespace cannot both be set.
+ Optional: Default to false.
+ type: boolean
+ subdomain:
+ description: |-
+ If specified, the fully qualified Pod hostname will be "...svc.".
+ If not specified, the pod will not have a domainname at all.
+ type: string
+ terminationGracePeriodSeconds:
+ description: |-
+ Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request.
+ Value must be non-negative integer. The value zero indicates stop immediately via
+ the kill signal (no opportunity to shut down).
+ If this value is nil, the default grace period will be used instead.
+ The grace period is the duration in seconds after the processes running in the pod are sent
+ a termination signal and the time when the processes are forcibly halted with a kill signal.
+ Set this value longer than the expected cleanup time for your process.
+ Defaults to 30 seconds.
+ format: int64
+ type: integer
+ tolerations:
+ description: If specified, the pod's tolerations.
+ items:
+ description: |-
+ The pod this Toleration is attached to tolerates any taint that matches
+ the triple using the matching operator .
+ properties:
+ effect:
+ description: |-
+ Effect indicates the taint effect to match. Empty means match all taint effects.
+ When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: |-
+ Key is the taint key that the toleration applies to. Empty means match all taint keys.
+ If the key is empty, operator must be Exists; this combination means to match all values and all keys.
+ type: string
+ operator:
+ description: |-
+ Operator represents a key's relationship to the value.
+ Valid operators are Exists and Equal. Defaults to Equal.
+ Exists is equivalent to wildcard for value, so that a pod can
+ tolerate all taints of a particular category.
+ type: string
+ tolerationSeconds:
+ description: |-
+ TolerationSeconds represents the period of time the toleration (which must be
+ of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default,
+ it is not set, which means tolerate the taint forever (do not evict). Zero and
+ negative values will be treated as 0 (evict immediately) by the system.
+ format: int64
+ type: integer
+ value:
+ description: |-
+ Value is the taint value the toleration matches to.
+ If the operator is Exists, the value should be empty, otherwise just a regular string.
+ type: string
+ type: object
+ type: array
+ topologySpreadConstraints:
+ description: |-
+ TopologySpreadConstraints describes how a group of pods ought to spread across topology
+ domains. Scheduler will schedule pods in a way which abides by the constraints.
+ All topologySpreadConstraints are ANDed.
+ items:
+ description: TopologySpreadConstraint specifies how to spread matching pods among the given topology.
+ properties:
+ labelSelector:
+ description: |-
+ LabelSelector is used to find matching pods.
+ Pods that match this label selector are counted to determine the number of pods
+ in their corresponding topology domain.
+ properties:
+ matchExpressions:
+ description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ items:
+ description: |-
+ A label selector requirement is a selector that contains values, a key, and an operator that
+ relates the key and values.
+ properties:
+ key:
+ description: key is the label key that the selector applies to.
+ type: string
+ operator:
+ description: |-
+ operator represents a key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists and DoesNotExist.
+ type: string
+ values:
+ description: |-
+ values is an array of string values. If the operator is In or NotIn,
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ the values array must be empty. This array is replaced during a strategic
+ merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: |-
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ map is equivalent to an element of matchExpressions, whose key field is "key", the
+ operator is "In", and the values array contains only "value". The requirements are ANDed.
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ matchLabelKeys:
+ description: |-
+ MatchLabelKeys is a set of pod label keys to select the pods over which
+ spreading will be calculated. The keys are used to lookup values from the
+ incoming pod labels, those key-value labels are ANDed with labelSelector
+ to select the group of existing pods over which spreading will be calculated
+ for the incoming pod. The same key is forbidden to exist in both MatchLabelKeys and LabelSelector.
+ MatchLabelKeys cannot be set when LabelSelector isn't set.
+ Keys that don't exist in the incoming pod labels will
+ be ignored. A null or empty list means only match against labelSelector.
+
+
+ This is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default).
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ maxSkew:
+ description: |-
+ MaxSkew describes the degree to which pods may be unevenly distributed.
+ When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference
+ between the number of matching pods in the target topology and the global minimum.
+ The global minimum is the minimum number of matching pods in an eligible domain
+ or zero if the number of eligible domains is less than MinDomains.
+ For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
+ labelSelector spread as 2/2/1:
+ In this case, the global minimum is 1.
+ | zone1 | zone2 | zone3 |
+ | P P | P P | P |
+ - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 2/2/2;
+ scheduling it onto zone1(zone2) would make the ActualSkew(3-1) on zone1(zone2)
+ violate MaxSkew(1).
+ - if MaxSkew is 2, incoming pod can be scheduled onto any zone.
+ When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence
+ to topologies that satisfy it.
+ It's a required field. Default value is 1 and 0 is not allowed.
+ format: int32
+ type: integer
+ minDomains:
+ description: |-
+ MinDomains indicates a minimum number of eligible domains.
+ When the number of eligible domains with matching topology keys is less than minDomains,
+ Pod Topology Spread treats "global minimum" as 0, and then the calculation of Skew is performed.
+ And when the number of eligible domains with matching topology keys equals or greater than minDomains,
+ this value has no effect on scheduling.
+ As a result, when the number of eligible domains is less than minDomains,
+ scheduler won't schedule more than maxSkew Pods to those domains.
+ If value is nil, the constraint behaves as if MinDomains is equal to 1.
+ Valid values are integers greater than 0.
+ When value is not nil, WhenUnsatisfiable must be DoNotSchedule.
+
+
+ For example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same
+ labelSelector spread as 2/2/2:
+ | zone1 | zone2 | zone3 |
+ | P P | P P | P P |
+ The number of domains is less than 5(MinDomains), so "global minimum" is treated as 0.
+ In this situation, new pod with the same labelSelector cannot be scheduled,
+ because computed skew will be 3(3 - 0) if new Pod is scheduled to any of the three zones,
+ it will violate MaxSkew.
+
+
+ This is a beta field and requires the MinDomainsInPodTopologySpread feature gate to be enabled (enabled by default).
+ format: int32
+ type: integer
+ nodeAffinityPolicy:
+ description: |-
+ NodeAffinityPolicy indicates how we will treat Pod's nodeAffinity/nodeSelector
+ when calculating pod topology spread skew. Options are:
+ - Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations.
+ - Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.
+
+
+ If this value is nil, the behavior is equivalent to the Honor policy.
+ This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
+ type: string
+ nodeTaintsPolicy:
+ description: |-
+ NodeTaintsPolicy indicates how we will treat node taints when calculating
+ pod topology spread skew. Options are:
+ - Honor: nodes without taints, along with tainted nodes for which the incoming pod
+ has a toleration, are included.
+ - Ignore: node taints are ignored. All nodes are included.
+
+
+ If this value is nil, the behavior is equivalent to the Ignore policy.
+ This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
+ type: string
+ topologyKey:
+ description: |-
+ TopologyKey is the key of node labels. Nodes that have a label with this key
+ and identical values are considered to be in the same topology.
+ We consider each as a "bucket", and try to put balanced number
+ of pods into each bucket.
+ We define a domain as a particular instance of a topology.
+ Also, we define an eligible domain as a domain whose nodes meet the requirements of
+ nodeAffinityPolicy and nodeTaintsPolicy.
+ e.g. If TopologyKey is "kubernetes.io/hostname", each Node is a domain of that topology.
+ And, if TopologyKey is "topology.kubernetes.io/zone", each zone is a domain of that topology.
+ It's a required field.
+ type: string
+ whenUnsatisfiable:
+ description: |-
+ WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy
+ the spread constraint.
+ - DoNotSchedule (default) tells the scheduler not to schedule it.
+ - ScheduleAnyway tells the scheduler to schedule the pod in any location,
+ but giving higher precedence to topologies that would help reduce the
+ skew.
+ A constraint is considered "Unsatisfiable" for an incoming pod
+ if and only if every possible node assignment for that pod would violate
+ "MaxSkew" on some topology.
+ For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
+ labelSelector spread as 3/1/1:
+ | zone1 | zone2 | zone3 |
+ | P P P | P | P |
+ If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled
+ to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies
+ MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler
+ won't make it *more* imbalanced.
+ It's a required field.
+ type: string
+ required:
+ - maxSkew
+ - topologyKey
+ - whenUnsatisfiable
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - topologyKey
+ - whenUnsatisfiable
+ x-kubernetes-list-type: map
+ volumes:
+ description: |-
+ List of volumes that can be mounted by containers belonging to the pod.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes
+ items:
+ description: Volume represents a named volume in a pod that may be accessed by any container in the pod.
+ properties:
+ awsElasticBlockStore:
+ description: |-
+ awsElasticBlockStore represents an AWS Disk resource that is attached to a
+ kubelet's host machine and then exposed to the pod.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
+ properties:
+ fsType:
+ description: |-
+ fsType is the filesystem type of the volume that you want to mount.
+ Tip: Ensure that the filesystem type is supported by the host operating system.
+ Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
+ TODO: how do we prevent errors in the filesystem from compromising the machine
+ type: string
+ partition:
+ description: |-
+ partition is the partition in the volume that you want to mount.
+ If omitted, the default is to mount by volume name.
+ Examples: For volume /dev/sda1, you specify the partition as "1".
+ Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).
+ format: int32
+ type: integer
+ readOnly:
+ description: |-
+ readOnly value true will force the readOnly setting in VolumeMounts.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
+ type: boolean
+ volumeID:
+ description: |-
+ volumeID is unique ID of the persistent disk resource in AWS (Amazon EBS volume).
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
+ type: string
+ required:
+ - volumeID
+ type: object
+ azureDisk:
+ description: azureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
+ properties:
+ cachingMode:
+ description: 'cachingMode is the Host Caching mode: None, Read Only, Read Write.'
+ type: string
+ diskName:
+ description: diskName is the Name of the data disk in the blob storage
+ type: string
+ diskURI:
+ description: diskURI is the URI of data disk in the blob storage
+ type: string
+ fsType:
+ description: |-
+ fsType is Filesystem type to mount.
+ Must be a filesystem type supported by the host operating system.
+ Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ type: string
+ kind:
+ description: 'kind expected values are Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared'
+ type: string
+ readOnly:
+ description: |-
+ readOnly Defaults to false (read/write). ReadOnly here will force
+ the ReadOnly setting in VolumeMounts.
+ type: boolean
+ required:
+ - diskName
+ - diskURI
+ type: object
+ azureFile:
+ description: azureFile represents an Azure File Service mount on the host and bind mount to the pod.
+ properties:
+ readOnly:
+ description: |-
+ readOnly defaults to false (read/write). ReadOnly here will force
+ the ReadOnly setting in VolumeMounts.
+ type: boolean
+ secretName:
+ description: secretName is the name of secret that contains Azure Storage Account Name and Key
+ type: string
+ shareName:
+ description: shareName is the azure share Name
+ type: string
+ required:
+ - secretName
+ - shareName
+ type: object
+ cephfs:
+ description: cephFS represents a Ceph FS mount on the host that shares a pod's lifetime
+ properties:
+ monitors:
+ description: |-
+ monitors is Required: Monitors is a collection of Ceph monitors
+ More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+ items:
+ type: string
+ type: array
+ path:
+ description: 'path is Optional: Used as the mounted root, rather than the full Ceph tree, default is /'
+ type: string
+ readOnly:
+ description: |-
+ readOnly is Optional: Defaults to false (read/write). ReadOnly here will force
+ the ReadOnly setting in VolumeMounts.
+ More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+ type: boolean
+ secretFile:
+ description: |-
+ secretFile is Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret
+ More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+ type: string
+ secretRef:
+ description: |-
+ secretRef is Optional: SecretRef is reference to the authentication secret for User, default is empty.
+ More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ user:
+ description: |-
+ user is optional: User is the rados user name, default is admin
+ More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+ type: string
+ required:
+ - monitors
+ type: object
+ cinder:
+ description: |-
+ cinder represents a cinder volume attached and mounted on kubelets host machine.
+ More info: https://examples.k8s.io/mysql-cinder-pd/README.md
+ properties:
+ fsType:
+ description: |-
+ fsType is the filesystem type to mount.
+ Must be a filesystem type supported by the host operating system.
+ Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ More info: https://examples.k8s.io/mysql-cinder-pd/README.md
+ type: string
+ readOnly:
+ description: |-
+ readOnly defaults to false (read/write). ReadOnly here will force
+ the ReadOnly setting in VolumeMounts.
+ More info: https://examples.k8s.io/mysql-cinder-pd/README.md
+ type: boolean
+ secretRef:
+ description: |-
+ secretRef is optional: points to a secret object containing parameters used to connect
+ to OpenStack.
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ volumeID:
+ description: |-
+ volumeID used to identify the volume in cinder.
+ More info: https://examples.k8s.io/mysql-cinder-pd/README.md
+ type: string
+ required:
+ - volumeID
+ type: object
+ configMap:
+ description: configMap represents a configMap that should populate this volume
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items if unspecified, each key-value pair in the Data field of the referenced
+ ConfigMap will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the ConfigMap,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: optional specify whether the ConfigMap or its keys must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ csi:
+ description: csi (Container Storage Interface) represents ephemeral storage that is handled by certain external CSI drivers (Beta feature).
+ properties:
+ driver:
+ description: |-
+ driver is the name of the CSI driver that handles this volume.
+ Consult with your admin for the correct name as registered in the cluster.
+ type: string
+ fsType:
+ description: |-
+ fsType to mount. Ex. "ext4", "xfs", "ntfs".
+ If not provided, the empty value is passed to the associated CSI driver
+ which will determine the default filesystem to apply.
+ type: string
+ nodePublishSecretRef:
+ description: |-
+ nodePublishSecretRef is a reference to the secret object containing
+ sensitive information to pass to the CSI driver to complete the CSI
+ NodePublishVolume and NodeUnpublishVolume calls.
+ This field is optional, and may be empty if no secret is required. If the
+ secret object contains more than one secret, all secret references are passed.
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ readOnly:
+ description: |-
+ readOnly specifies a read-only configuration for the volume.
+ Defaults to false (read/write).
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
+ type: string
+ description: |-
+ volumeAttributes stores driver-specific properties that are passed to the CSI
+ driver. Consult your driver's documentation for supported values.
+ type: object
+ required:
+ - driver
+ type: object
+ downwardAPI:
+ description: downwardAPI represents downward API about the pod that should populate this volume
+ properties:
+ defaultMode:
+ description: |-
+ Optional: mode bits to use on created files by default. Must be a
+ Optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: Items is a list of downward API volume file
+ items:
+ description: DownwardAPIVolumeFile represents information to create the file containing the pod field
+ properties:
+ fieldRef:
+ description: 'Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.'
+ properties:
+ apiVersion:
+ description: Version of the schema the FieldPath is written in terms of, defaults to "v1".
+ type: string
+ fieldPath:
+ description: Path of the field to select in the specified API version.
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ mode:
+ description: |-
+ Optional: mode bits used to set permissions on this file, must be an octal value
+ between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: 'Required: Path is the relative path name of the file to be created. Must not be absolute or contain the ''..'' path. Must be utf-8 encoded. The first item of the relative path must not start with ''..'''
+ type: string
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.
+ properties:
+ containerName:
+ description: 'Container name: required for volumes, optional for env vars'
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ description: Specifies the output format of the exposed resources, defaults to "1"
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ description: 'Required: resource to select'
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
+ type: object
+ emptyDir:
+ description: |-
+ emptyDir represents a temporary directory that shares a pod's lifetime.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
+ properties:
+ medium:
+ description: |-
+ medium represents what type of storage medium should back this directory.
+ The default is "" which means to use the node's default medium.
+ Must be an empty string (default) or Memory.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
+ type: string
+ sizeLimit:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ sizeLimit is the total amount of local storage required for this EmptyDir volume.
+ The size limit is also applicable for memory medium.
+ The maximum usage on memory medium EmptyDir would be the minimum value between
+ the SizeLimit specified here and the sum of memory limits of all containers in a pod.
+ The default is nil which means that the limit is undefined.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ ephemeral:
+ description: |-
+ ephemeral represents a volume that is handled by a cluster storage driver.
+ The volume's lifecycle is tied to the pod that defines it - it will be created before the pod starts,
+ and deleted when the pod is removed.
+
+
+ Use this if:
+ a) the volume is only needed while the pod runs,
+ b) features of normal volumes like restoring from snapshot or capacity
+ tracking are needed,
+ c) the storage driver is specified through a storage class, and
+ d) the storage driver supports dynamic volume provisioning through
+ a PersistentVolumeClaim (see EphemeralVolumeSource for more
+ information on the connection between this volume type
+ and PersistentVolumeClaim).
+
+
+ Use PersistentVolumeClaim or one of the vendor-specific
+ APIs for volumes that persist for longer than the lifecycle
+ of an individual pod.
+
+
+ Use CSI for light-weight local ephemeral volumes if the CSI driver is meant to
+ be used that way - see the documentation of the driver for
+ more information.
+
+
+ A pod can use both types of ephemeral volumes and
+ persistent volumes at the same time.
+ properties:
+ volumeClaimTemplate:
+ description: |-
+ Will be used to create a stand-alone PVC to provision the volume.
+ The pod in which this EphemeralVolumeSource is embedded will be the
+ owner of the PVC, i.e. the PVC will be deleted together with the
+ pod. The name of the PVC will be `-` where
+ `` is the name from the `PodSpec.Volumes` array
+ entry. Pod validation will reject the pod if the concatenated name
+ is not valid for a PVC (for example, too long).
+
+
+ An existing PVC with that name that is not owned by the pod
+ will *not* be used for the pod to avoid using an unrelated
+ volume by mistake. Starting the pod is then blocked until
+ the unrelated PVC is removed. If such a pre-created PVC is
+ meant to be used by the pod, the PVC has to updated with an
+ owner reference to the pod once the pod exists. Normally
+ this should not be necessary, but it may be useful when
+ manually reconstructing a broken cluster.
+
+
+ This field is read-only and no changes will be made by Kubernetes
+ to the PVC after it has been created.
+
+
+ Required, must not be nil.
+ properties:
+ metadata:
+ description: |-
+ May contain labels and annotations that will be copied into the PVC
+ when creating it. No other fields are allowed and will be rejected during
+ validation.
+ type: object
+ spec:
+ description: |-
+ The specification for the PersistentVolumeClaim. The entire content is
+ copied unchanged into the PVC that gets created from this
+ template. The same fields as in a PersistentVolumeClaim
+ are also valid here.
+ properties:
+ accessModes:
+ description: |-
+ accessModes contains the desired access modes the volume should have.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
+ items:
+ type: string
+ type: array
+ dataSource:
+ description: |-
+ dataSource field can be used to specify either:
+ * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
+ * An existing PVC (PersistentVolumeClaim)
+ If the provisioner or an external controller can support the specified data source,
+ it will create a new volume based on the contents of the specified data source.
+ When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef,
+ and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified.
+ If the namespace is specified, then dataSourceRef will not be copied to dataSource.
+ properties:
+ apiGroup:
+ description: |-
+ APIGroup is the group for the resource being referenced.
+ If APIGroup is not specified, the specified Kind must be in the core API group.
+ For any other third-party types, APIGroup is required.
+ type: string
+ kind:
+ description: Kind is the type of resource being referenced
+ type: string
+ name:
+ description: Name is the name of resource being referenced
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ x-kubernetes-map-type: atomic
+ dataSourceRef:
+ description: |-
+ dataSourceRef specifies the object from which to populate the volume with data, if a non-empty
+ volume is desired. This may be any object from a non-empty API group (non
+ core object) or a PersistentVolumeClaim object.
+ When this field is specified, volume binding will only succeed if the type of
+ the specified object matches some installed volume populator or dynamic
+ provisioner.
+ This field will replace the functionality of the dataSource field and as such
+ if both fields are non-empty, they must have the same value. For backwards
+ compatibility, when namespace isn't specified in dataSourceRef,
+ both fields (dataSource and dataSourceRef) will be set to the same
+ value automatically if one of them is empty and the other is non-empty.
+ When namespace is specified in dataSourceRef,
+ dataSource isn't set to the same value and must be empty.
+ There are three important differences between dataSource and dataSourceRef:
+ * While dataSource only allows two specific types of objects, dataSourceRef
+ allows any non-core object, as well as PersistentVolumeClaim objects.
+ * While dataSource ignores disallowed values (dropping them), dataSourceRef
+ preserves all values, and generates an error if a disallowed value is
+ specified.
+ * While dataSource only allows local objects, dataSourceRef allows objects
+ in any namespaces.
+ (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
+ (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+ properties:
+ apiGroup:
+ description: |-
+ APIGroup is the group for the resource being referenced.
+ If APIGroup is not specified, the specified Kind must be in the core API group.
+ For any other third-party types, APIGroup is required.
+ type: string
+ kind:
+ description: Kind is the type of resource being referenced
+ type: string
+ name:
+ description: Name is the name of resource being referenced
+ type: string
+ namespace:
+ description: |-
+ Namespace is the namespace of resource being referenced
+ Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details.
+ (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ resources:
+ description: |-
+ resources represents the minimum resources the volume should have.
+ If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements
+ that are lower than previous value but must still be higher than capacity recorded in the
+ status field of the claim.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
+ properties:
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: |-
+ Limits describes the maximum amount of compute resources allowed.
+ More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: |-
+ Requests describes the minimum amount of compute resources required.
+ If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
+ otherwise to an implementation-defined value. Requests cannot exceed Limits.
+ More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ type: object
+ type: object
+ selector:
+ description: selector is a label query over volumes to consider for binding.
+ properties:
+ matchExpressions:
+ description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ items:
+ description: |-
+ A label selector requirement is a selector that contains values, a key, and an operator that
+ relates the key and values.
+ properties:
+ key:
+ description: key is the label key that the selector applies to.
+ type: string
+ operator:
+ description: |-
+ operator represents a key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists and DoesNotExist.
+ type: string
+ values:
+ description: |-
+ values is an array of string values. If the operator is In or NotIn,
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ the values array must be empty. This array is replaced during a strategic
+ merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: |-
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ map is equivalent to an element of matchExpressions, whose key field is "key", the
+ operator is "In", and the values array contains only "value". The requirements are ANDed.
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ storageClassName:
+ description: |-
+ storageClassName is the name of the StorageClass required by the claim.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
+ type: string
+ volumeAttributesClassName:
+ description: |-
+ volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
+ If specified, the CSI driver will create or update the volume with the attributes defined
+ in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
+ it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass
+ will be applied to the claim but it's not allowed to reset this field to empty string once it is set.
+ If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass
+ will be set by the persistentvolume controller if it exists.
+ If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be
+ set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
+ exists.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#volumeattributesclass
+ (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.
+ type: string
+ volumeMode:
+ description: |-
+ volumeMode defines what type of volume is required by the claim.
+ Value of Filesystem is implied when not included in claim spec.
+ type: string
+ volumeName:
+ description: volumeName is the binding reference to the PersistentVolume backing this claim.
+ type: string
+ type: object
+ required:
+ - spec
+ type: object
+ type: object
+ fc:
+ description: fc represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
+ properties:
+ fsType:
+ description: |-
+ fsType is the filesystem type to mount.
+ Must be a filesystem type supported by the host operating system.
+ Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ TODO: how do we prevent errors in the filesystem from compromising the machine
+ type: string
+ lun:
+ description: 'lun is Optional: FC target lun number'
+ format: int32
+ type: integer
+ readOnly:
+ description: |-
+ readOnly is Optional: Defaults to false (read/write). ReadOnly here will force
+ the ReadOnly setting in VolumeMounts.
+ type: boolean
+ targetWWNs:
+ description: 'targetWWNs is Optional: FC target worldwide names (WWNs)'
+ items:
+ type: string
+ type: array
+ wwids:
+ description: |-
+ wwids Optional: FC volume world wide identifiers (wwids)
+ Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.
+ items:
+ type: string
+ type: array
+ type: object
+ flexVolume:
+ description: |-
+ flexVolume represents a generic volume resource that is
+ provisioned/attached using an exec based plugin.
+ properties:
+ driver:
+ description: driver is the name of the driver to use for this volume.
+ type: string
+ fsType:
+ description: |-
+ fsType is the filesystem type to mount.
+ Must be a filesystem type supported by the host operating system.
+ Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.
+ type: string
+ options:
+ additionalProperties:
+ type: string
+ description: 'options is Optional: this field holds extra command options if any.'
+ type: object
+ readOnly:
+ description: |-
+ readOnly is Optional: defaults to false (read/write). ReadOnly here will force
+ the ReadOnly setting in VolumeMounts.
+ type: boolean
+ secretRef:
+ description: |-
+ secretRef is Optional: secretRef is reference to the secret object containing
+ sensitive information to pass to the plugin scripts. This may be
+ empty if no secret object is specified. If the secret object
+ contains more than one secret, all secrets are passed to the plugin
+ scripts.
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - driver
+ type: object
+ flocker:
+ description: flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running
+ properties:
+ datasetName:
+ description: |-
+ datasetName is Name of the dataset stored as metadata -> name on the dataset for Flocker
+ should be considered as deprecated
+ type: string
+ datasetUUID:
+ description: datasetUUID is the UUID of the dataset. This is unique identifier of a Flocker dataset
+ type: string
+ type: object
+ gcePersistentDisk:
+ description: |-
+ gcePersistentDisk represents a GCE Disk resource that is attached to a
+ kubelet's host machine and then exposed to the pod.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+ properties:
+ fsType:
+ description: |-
+ fsType is filesystem type of the volume that you want to mount.
+ Tip: Ensure that the filesystem type is supported by the host operating system.
+ Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+ TODO: how do we prevent errors in the filesystem from compromising the machine
+ type: string
+ partition:
+ description: |-
+ partition is the partition in the volume that you want to mount.
+ If omitted, the default is to mount by volume name.
+ Examples: For volume /dev/sda1, you specify the partition as "1".
+ Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+ format: int32
+ type: integer
+ pdName:
+ description: |-
+ pdName is unique name of the PD resource in GCE. Used to identify the disk in GCE.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+ type: string
+ readOnly:
+ description: |-
+ readOnly here will force the ReadOnly setting in VolumeMounts.
+ Defaults to false.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+ type: boolean
+ required:
+ - pdName
+ type: object
+ gitRepo:
+ description: |-
+ gitRepo represents a git repository at a particular revision.
+ DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an
+ EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir
+ into the Pod's container.
+ properties:
+ directory:
+ description: |-
+ directory is the target directory name.
+ Must not contain or start with '..'. If '.' is supplied, the volume directory will be the
+ git repository. Otherwise, if specified, the volume will contain the git repository in
+ the subdirectory with the given name.
+ type: string
+ repository:
+ description: repository is the URL
+ type: string
+ revision:
+ description: revision is the commit hash for the specified revision.
+ type: string
+ required:
+ - repository
+ type: object
+ glusterfs:
+ description: |-
+ glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime.
+ More info: https://examples.k8s.io/volumes/glusterfs/README.md
+ properties:
+ endpoints:
+ description: |-
+ endpoints is the endpoint name that details Glusterfs topology.
+ More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
+ type: string
+ path:
+ description: |-
+ path is the Glusterfs volume path.
+ More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
+ type: string
+ readOnly:
+ description: |-
+ readOnly here will force the Glusterfs volume to be mounted with read-only permissions.
+ Defaults to false.
+ More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
+ type: boolean
+ required:
+ - endpoints
+ - path
+ type: object
+ hostPath:
+ description: |-
+ hostPath represents a pre-existing file or directory on the host
+ machine that is directly exposed to the container. This is generally
+ used for system agents or other privileged things that are allowed
+ to see the host machine. Most containers will NOT need this.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
+ ---
+ TODO(jonesdl) We need to restrict who can use host directory mounts and who can/can not
+ mount host directories as read/write.
+ properties:
+ path:
+ description: |-
+ path of the directory on the host.
+ If the path is a symlink, it will follow the link to the real path.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
+ type: string
+ type:
+ description: |-
+ type for HostPath Volume
+ Defaults to ""
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
+ type: string
+ required:
+ - path
+ type: object
+ iscsi:
+ description: |-
+ iscsi represents an ISCSI Disk resource that is attached to a
+ kubelet's host machine and then exposed to the pod.
+ More info: https://examples.k8s.io/volumes/iscsi/README.md
+ properties:
+ chapAuthDiscovery:
+ description: chapAuthDiscovery defines whether support iSCSI Discovery CHAP authentication
+ type: boolean
+ chapAuthSession:
+ description: chapAuthSession defines whether support iSCSI Session CHAP authentication
+ type: boolean
+ fsType:
+ description: |-
+ fsType is the filesystem type of the volume that you want to mount.
+ Tip: Ensure that the filesystem type is supported by the host operating system.
+ Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi
+ TODO: how do we prevent errors in the filesystem from compromising the machine
+ type: string
+ initiatorName:
+ description: |-
+ initiatorName is the custom iSCSI Initiator Name.
+ If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface
+ : will be created for the connection.
+ type: string
+ iqn:
+ description: iqn is the target iSCSI Qualified Name.
+ type: string
+ iscsiInterface:
+ description: |-
+ iscsiInterface is the interface Name that uses an iSCSI transport.
+ Defaults to 'default' (tcp).
+ type: string
+ lun:
+ description: lun represents iSCSI Target Lun number.
+ format: int32
+ type: integer
+ portals:
+ description: |-
+ portals is the iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port
+ is other than default (typically TCP ports 860 and 3260).
+ items:
+ type: string
+ type: array
+ readOnly:
+ description: |-
+ readOnly here will force the ReadOnly setting in VolumeMounts.
+ Defaults to false.
+ type: boolean
+ secretRef:
+ description: secretRef is the CHAP Secret for iSCSI target and initiator authentication
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ targetPortal:
+ description: |-
+ targetPortal is iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port
+ is other than default (typically TCP ports 860 and 3260).
+ type: string
+ required:
+ - iqn
+ - lun
+ - targetPortal
+ type: object
+ name:
+ description: |-
+ name of the volume.
+ Must be a DNS_LABEL and unique within the pod.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ nfs:
+ description: |-
+ nfs represents an NFS mount on the host that shares a pod's lifetime
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
+ properties:
+ path:
+ description: |-
+ path that is exported by the NFS server.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
+ type: string
+ readOnly:
+ description: |-
+ readOnly here will force the NFS export to be mounted with read-only permissions.
+ Defaults to false.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
+ type: boolean
+ server:
+ description: |-
+ server is the hostname or IP address of the NFS server.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
+ type: string
+ required:
+ - path
+ - server
+ type: object
+ persistentVolumeClaim:
+ description: |-
+ persistentVolumeClaimVolumeSource represents a reference to a
+ PersistentVolumeClaim in the same namespace.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ properties:
+ claimName:
+ description: |-
+ claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ type: string
+ readOnly:
+ description: |-
+ readOnly Will force the ReadOnly setting in VolumeMounts.
+ Default false.
+ type: boolean
+ required:
+ - claimName
+ type: object
+ photonPersistentDisk:
+ description: photonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine
+ properties:
+ fsType:
+ description: |-
+ fsType is the filesystem type to mount.
+ Must be a filesystem type supported by the host operating system.
+ Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ type: string
+ pdID:
+ description: pdID is the ID that identifies Photon Controller persistent disk
+ type: string
+ required:
+ - pdID
+ type: object
+ portworxVolume:
+ description: portworxVolume represents a portworx volume attached and mounted on kubelets host machine
+ properties:
+ fsType:
+ description: |-
+ fSType represents the filesystem type to mount
+ Must be a filesystem type supported by the host operating system.
+ Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified.
+ type: string
+ readOnly:
+ description: |-
+ readOnly defaults to false (read/write). ReadOnly here will force
+ the ReadOnly setting in VolumeMounts.
+ type: boolean
+ volumeID:
+ description: volumeID uniquely identifies a Portworx volume
+ type: string
+ required:
+ - volumeID
+ type: object
+ projected:
+ description: projected items for all in one resources secrets, configmaps, and downward API
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode are the mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ sources:
+ description: sources is the list of volume projections
+ items:
+ description: Projection that may be projected along with other supported volume types
+ properties:
+ clusterTrustBundle:
+ description: |-
+ ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
+ of ClusterTrustBundle objects in an auto-updating file.
+
+
+ Alpha, gated by the ClusterTrustBundleProjection feature gate.
+
+
+ ClusterTrustBundle objects can either be selected by name, or by the
+ combination of signer name and a label selector.
+
+
+ Kubelet performs aggressive normalization of the PEM contents written
+ into the pod filesystem. Esoteric PEM features such as inter-block
+ comments and block headers are stripped. Certificates are deduplicated.
+ The ordering of certificates within the file is arbitrary, and Kubelet
+ may change the order over time.
+ properties:
+ labelSelector:
+ description: |-
+ Select all ClusterTrustBundles that match this label selector. Only has
+ effect if signerName is set. Mutually-exclusive with name. If unset,
+ interpreted as "match nothing". If set but empty, interpreted as "match
+ everything".
+ properties:
+ matchExpressions:
+ description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ items:
+ description: |-
+ A label selector requirement is a selector that contains values, a key, and an operator that
+ relates the key and values.
+ properties:
+ key:
+ description: key is the label key that the selector applies to.
+ type: string
+ operator:
+ description: |-
+ operator represents a key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists and DoesNotExist.
+ type: string
+ values:
+ description: |-
+ values is an array of string values. If the operator is In or NotIn,
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ the values array must be empty. This array is replaced during a strategic
+ merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: |-
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ map is equivalent to an element of matchExpressions, whose key field is "key", the
+ operator is "In", and the values array contains only "value". The requirements are ANDed.
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ name:
+ description: |-
+ Select a single ClusterTrustBundle by object name. Mutually-exclusive
+ with signerName and labelSelector.
+ type: string
+ optional:
+ description: |-
+ If true, don't block pod startup if the referenced ClusterTrustBundle(s)
+ aren't available. If using name, then the named ClusterTrustBundle is
+ allowed not to exist. If using signerName, then the combination of
+ signerName and labelSelector is allowed to match zero
+ ClusterTrustBundles.
+ type: boolean
+ path:
+ description: Relative path from the volume root to write the bundle.
+ type: string
+ signerName:
+ description: |-
+ Select all ClusterTrustBundles that match this signer name.
+ Mutually-exclusive with name. The contents of all selected
+ ClusterTrustBundles will be unified and deduplicated.
+ type: string
+ required:
+ - path
+ type: object
+ configMap:
+ description: configMap information about the configMap data to project
+ properties:
+ items:
+ description: |-
+ items if unspecified, each key-value pair in the Data field of the referenced
+ ConfigMap will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the ConfigMap,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: optional specify whether the ConfigMap or its keys must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ downwardAPI:
+ description: downwardAPI information about the downwardAPI data to project
+ properties:
+ items:
+ description: Items is a list of DownwardAPIVolume file
+ items:
+ description: DownwardAPIVolumeFile represents information to create the file containing the pod field
+ properties:
+ fieldRef:
+ description: 'Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.'
+ properties:
+ apiVersion:
+ description: Version of the schema the FieldPath is written in terms of, defaults to "v1".
+ type: string
+ fieldPath:
+ description: Path of the field to select in the specified API version.
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ mode:
+ description: |-
+ Optional: mode bits used to set permissions on this file, must be an octal value
+ between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: 'Required: Path is the relative path name of the file to be created. Must not be absolute or contain the ''..'' path. Must be utf-8 encoded. The first item of the relative path must not start with ''..'''
+ type: string
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.
+ properties:
+ containerName:
+ description: 'Container name: required for volumes, optional for env vars'
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ description: Specifies the output format of the exposed resources, defaults to "1"
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ description: 'Required: resource to select'
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
+ type: object
+ secret:
+ description: secret information about the secret data to project
+ properties:
+ items:
+ description: |-
+ items if unspecified, each key-value pair in the Data field of the referenced
+ Secret will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the Secret,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: optional field specify whether the Secret or its key must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ serviceAccountToken:
+ description: serviceAccountToken is information about the serviceAccountToken data to project
+ properties:
+ audience:
+ description: |-
+ audience is the intended audience of the token. A recipient of a token
+ must identify itself with an identifier specified in the audience of the
+ token, and otherwise should reject the token. The audience defaults to the
+ identifier of the apiserver.
+ type: string
+ expirationSeconds:
+ description: |-
+ expirationSeconds is the requested duration of validity of the service
+ account token. As the token approaches expiration, the kubelet volume
+ plugin will proactively rotate the service account token. The kubelet will
+ start trying to rotate the token if the token is older than 80 percent of
+ its time to live or if the token is older than 24 hours.Defaults to 1 hour
+ and must be at least 10 minutes.
+ format: int64
+ type: integer
+ path:
+ description: |-
+ path is the path relative to the mount point of the file to project the
+ token into.
+ type: string
+ required:
+ - path
+ type: object
+ type: object
+ type: array
+ type: object
+ quobyte:
+ description: quobyte represents a Quobyte mount on the host that shares a pod's lifetime
+ properties:
+ group:
+ description: |-
+ group to map volume access to
+ Default is no group
+ type: string
+ readOnly:
+ description: |-
+ readOnly here will force the Quobyte volume to be mounted with read-only permissions.
+ Defaults to false.
+ type: boolean
+ registry:
+ description: |-
+ registry represents a single or multiple Quobyte Registry services
+ specified as a string as host:port pair (multiple entries are separated with commas)
+ which acts as the central registry for volumes
+ type: string
+ tenant:
+ description: |-
+ tenant owning the given Quobyte volume in the Backend
+ Used with dynamically provisioned Quobyte volumes, value is set by the plugin
+ type: string
+ user:
+ description: |-
+ user to map volume access to
+ Defaults to serivceaccount user
+ type: string
+ volume:
+ description: volume is a string that references an already created Quobyte volume by name.
+ type: string
+ required:
+ - registry
+ - volume
+ type: object
+ rbd:
+ description: |-
+ rbd represents a Rados Block Device mount on the host that shares a pod's lifetime.
+ More info: https://examples.k8s.io/volumes/rbd/README.md
+ properties:
+ fsType:
+ description: |-
+ fsType is the filesystem type of the volume that you want to mount.
+ Tip: Ensure that the filesystem type is supported by the host operating system.
+ Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd
+ TODO: how do we prevent errors in the filesystem from compromising the machine
+ type: string
+ image:
+ description: |-
+ image is the rados image name.
+ More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ type: string
+ keyring:
+ description: |-
+ keyring is the path to key ring for RBDUser.
+ Default is /etc/ceph/keyring.
+ More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ type: string
+ monitors:
+ description: |-
+ monitors is a collection of Ceph monitors.
+ More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ items:
+ type: string
+ type: array
+ pool:
+ description: |-
+ pool is the rados pool name.
+ Default is rbd.
+ More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ type: string
+ readOnly:
+ description: |-
+ readOnly here will force the ReadOnly setting in VolumeMounts.
+ Defaults to false.
+ More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ type: boolean
+ secretRef:
+ description: |-
+ secretRef is name of the authentication secret for RBDUser. If provided
+ overrides keyring.
+ Default is nil.
+ More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ user:
+ description: |-
+ user is the rados user name.
+ Default is admin.
+ More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ type: string
+ required:
+ - image
+ - monitors
+ type: object
+ scaleIO:
+ description: scaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.
+ properties:
+ fsType:
+ description: |-
+ fsType is the filesystem type to mount.
+ Must be a filesystem type supported by the host operating system.
+ Ex. "ext4", "xfs", "ntfs".
+ Default is "xfs".
+ type: string
+ gateway:
+ description: gateway is the host address of the ScaleIO API Gateway.
+ type: string
+ protectionDomain:
+ description: protectionDomain is the name of the ScaleIO Protection Domain for the configured storage.
+ type: string
+ readOnly:
+ description: |-
+ readOnly Defaults to false (read/write). ReadOnly here will force
+ the ReadOnly setting in VolumeMounts.
+ type: boolean
+ secretRef:
+ description: |-
+ secretRef references to the secret for ScaleIO user and other
+ sensitive information. If this is not provided, Login operation will fail.
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ sslEnabled:
+ description: sslEnabled Flag enable/disable SSL communication with Gateway, default false
+ type: boolean
+ storageMode:
+ description: |-
+ storageMode indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.
+ Default is ThinProvisioned.
+ type: string
+ storagePool:
+ description: storagePool is the ScaleIO Storage Pool associated with the protection domain.
+ type: string
+ system:
+ description: system is the name of the storage system as configured in ScaleIO.
+ type: string
+ volumeName:
+ description: |-
+ volumeName is the name of a volume already created in the ScaleIO system
+ that is associated with this volume source.
+ type: string
+ required:
+ - gateway
+ - secretRef
+ - system
+ type: object
+ secret:
+ description: |-
+ secret represents a secret that should populate this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is Optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values
+ for mode bits. Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items If unspecified, each key-value pair in the Data field of the referenced
+ Secret will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the Secret,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ optional:
+ description: optional field specify whether the Secret or its keys must be defined
+ type: boolean
+ secretName:
+ description: |-
+ secretName is the name of the secret in the pod's namespace to use.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ type: string
+ type: object
+ storageos:
+ description: storageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.
+ properties:
+ fsType:
+ description: |-
+ fsType is the filesystem type to mount.
+ Must be a filesystem type supported by the host operating system.
+ Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ type: string
+ readOnly:
+ description: |-
+ readOnly defaults to false (read/write). ReadOnly here will force
+ the ReadOnly setting in VolumeMounts.
+ type: boolean
+ secretRef:
+ description: |-
+ secretRef specifies the secret to use for obtaining the StorageOS API
+ credentials. If not specified, default values will be attempted.
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ volumeName:
+ description: |-
+ volumeName is the human-readable name of the StorageOS volume. Volume
+ names are only unique within a namespace.
+ type: string
+ volumeNamespace:
+ description: |-
+ volumeNamespace specifies the scope of the volume within StorageOS. If no
+ namespace is specified then the Pod's namespace will be used. This allows the
+ Kubernetes name scoping to be mirrored within StorageOS for tighter integration.
+ Set VolumeName to any name to override the default behaviour.
+ Set to "default" if you are not using namespaces within StorageOS.
+ Namespaces that do not pre-exist within StorageOS will be created.
+ type: string
+ type: object
+ vsphereVolume:
+ description: vsphereVolume represents a vSphere volume attached and mounted on kubelets host machine
+ properties:
+ fsType:
+ description: |-
+ fsType is filesystem type to mount.
+ Must be a filesystem type supported by the host operating system.
+ Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ type: string
+ storagePolicyID:
+ description: storagePolicyID is the storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.
+ type: string
+ storagePolicyName:
+ description: storagePolicyName is the storage Policy Based Management (SPBM) profile name.
+ type: string
+ volumePath:
+ description: volumePath is the path that identifies vSphere volume vmdk
+ type: string
+ required:
+ - volumePath
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ required:
+ - containers
+ type: object
+ type: object
+ type: object
+ status:
+ description: PodConfigStatus defines the observed state of Snapshot
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
@@ -9623,6 +17478,56 @@ spec:
path:
type: string
type: object
+ tlsOptions:
+ properties:
+ caCert:
+ type: string
+ clientCert:
+ type: string
+ clientKey:
+ type: string
+ type: object
+ volumeMounts:
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
type: object
failedJobsHistoryLimit:
description: |-
@@ -9636,6 +17541,21 @@ spec:
Deprecated: Use FailedJobsHistoryLimit and SuccessfulJobsHistoryLimit respectively.
type: integer
+ podConfigRef:
+ description: |-
+ PodConfigRef describes the pod spec with wich this action shall be executed.
+ It takes precedence over the Resources or PodSecurityContext field.
+ It does not allow changing the image or the command of the resulting pod.
+ This is for advanced use-cases only. Please only set this if you know what you're doing.
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
podSecurityContext:
description: PodSecurityContext describes the security context with which this action shall be executed.
properties:
@@ -9897,6 +17817,163 @@ spec:
SuccessfulJobsHistoryLimit amount of successful jobs to keep for later analysis.
KeepJobs is used property is not specified.
type: integer
+ volumes:
+ description: Volumes List of volumes that can be mounted by containers belonging to the pod.
+ items:
+ properties:
+ configMap:
+ description: configMap represents a configMap that should populate this volume
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items if unspecified, each key-value pair in the Data field of the referenced
+ ConfigMap will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the ConfigMap,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: optional specify whether the ConfigMap or its keys must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ name:
+ description: |-
+ name of the volume.
+ Must be a DNS_LABEL and unique within the pod.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ persistentVolumeClaim:
+ description: |-
+ persistentVolumeClaimVolumeSource represents a reference to a
+ PersistentVolumeClaim in the same namespace.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ properties:
+ claimName:
+ description: |-
+ claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ type: string
+ readOnly:
+ description: |-
+ readOnly Will force the ReadOnly setting in VolumeMounts.
+ Default false.
+ type: boolean
+ required:
+ - claimName
+ type: object
+ secret:
+ description: |-
+ secret represents a secret that should populate this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is Optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values
+ for mode bits. Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items If unspecified, each key-value pair in the Data field of the referenced
+ Secret will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the Secret,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ optional:
+ description: optional field specify whether the Secret or its keys must be defined
+ type: boolean
+ secretName:
+ description: |-
+ secretName is the name of the secret in the pod's namespace to use.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ type: string
+ type: object
+ required:
+ - name
+ type: object
+ type: array
type: object
status:
description: |-
@@ -10333,6 +18410,56 @@ spec:
path:
type: string
type: object
+ tlsOptions:
+ properties:
+ caCert:
+ type: string
+ clientCert:
+ type: string
+ clientKey:
+ type: string
+ type: object
+ volumeMounts:
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
type: object
failedJobsHistoryLimit:
description: |-
@@ -10346,6 +18473,21 @@ spec:
Deprecated: Use FailedJobsHistoryLimit and SuccessfulJobsHistoryLimit respectively.
type: integer
+ podConfigRef:
+ description: |-
+ PodConfigRef describes the pod spec with wich this action shall be executed.
+ It takes precedence over the Resources or PodSecurityContext field.
+ It does not allow changing the image or the command of the resulting pod.
+ This is for advanced use-cases only. Please only set this if you know what you're doing.
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
podSecurityContext:
description: PodSecurityContext describes the security context with which this action shall be executed.
properties:
@@ -10637,6 +18779,56 @@ spec:
type: object
x-kubernetes-map-type: atomic
type: object
+ tlsOptions:
+ properties:
+ caCert:
+ type: string
+ clientCert:
+ type: string
+ clientKey:
+ type: string
+ type: object
+ volumeMounts:
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
type: object
snapshot:
type: string
@@ -10650,6 +18842,163 @@ spec:
items:
type: string
type: array
+ volumes:
+ description: Volumes List of volumes that can be mounted by containers belonging to the pod.
+ items:
+ properties:
+ configMap:
+ description: configMap represents a configMap that should populate this volume
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items if unspecified, each key-value pair in the Data field of the referenced
+ ConfigMap will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the ConfigMap,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: optional specify whether the ConfigMap or its keys must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ name:
+ description: |-
+ name of the volume.
+ Must be a DNS_LABEL and unique within the pod.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ persistentVolumeClaim:
+ description: |-
+ persistentVolumeClaimVolumeSource represents a reference to a
+ PersistentVolumeClaim in the same namespace.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ properties:
+ claimName:
+ description: |-
+ claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ type: string
+ readOnly:
+ description: |-
+ readOnly Will force the ReadOnly setting in VolumeMounts.
+ Default false.
+ type: boolean
+ required:
+ - claimName
+ type: object
+ secret:
+ description: |-
+ secret represents a secret that should populate this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is Optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values
+ for mode bits. Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items If unspecified, each key-value pair in the Data field of the referenced
+ Secret will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the Secret,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ optional:
+ description: optional field specify whether the Secret or its keys must be defined
+ type: boolean
+ secretName:
+ description: |-
+ secretName is the name of the secret in the pod's namespace to use.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ type: string
+ type: object
+ required:
+ - name
+ type: object
+ type: array
type: object
status:
description: |-
@@ -11075,6 +19424,56 @@ spec:
path:
type: string
type: object
+ tlsOptions:
+ properties:
+ caCert:
+ type: string
+ clientCert:
+ type: string
+ clientKey:
+ type: string
+ type: object
+ volumeMounts:
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
type: object
concurrentRunsAllowed:
type: boolean
@@ -11090,6 +19489,21 @@ spec:
Deprecated: Use FailedJobsHistoryLimit and SuccessfulJobsHistoryLimit respectively.
type: integer
+ podConfigRef:
+ description: |-
+ PodConfigRef describes the pod spec with wich this action shall be executed.
+ It takes precedence over the Resources or PodSecurityContext field.
+ It does not allow changing the image or the command of the resulting pod.
+ This is for advanced use-cases only. Please only set this if you know what you're doing.
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
podSecurityContext:
description: PodSecurityContext describes the security context with which this action shall be executed.
properties:
@@ -11381,6 +19795,56 @@ spec:
type: object
x-kubernetes-map-type: atomic
type: object
+ tlsOptions:
+ properties:
+ caCert:
+ type: string
+ clientCert:
+ type: string
+ clientKey:
+ type: string
+ type: object
+ volumeMounts:
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
type: object
schedule:
description: ScheduleDefinition is the actual cron-type expression that defines the interval of the actions.
@@ -11397,6 +19861,163 @@ spec:
items:
type: string
type: array
+ volumes:
+ description: Volumes List of volumes that can be mounted by containers belonging to the pod.
+ items:
+ properties:
+ configMap:
+ description: configMap represents a configMap that should populate this volume
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items if unspecified, each key-value pair in the Data field of the referenced
+ ConfigMap will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the ConfigMap,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: optional specify whether the ConfigMap or its keys must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ name:
+ description: |-
+ name of the volume.
+ Must be a DNS_LABEL and unique within the pod.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ persistentVolumeClaim:
+ description: |-
+ persistentVolumeClaimVolumeSource represents a reference to a
+ PersistentVolumeClaim in the same namespace.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ properties:
+ claimName:
+ description: |-
+ claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ type: string
+ readOnly:
+ description: |-
+ readOnly Will force the ReadOnly setting in VolumeMounts.
+ Default false.
+ type: boolean
+ required:
+ - claimName
+ type: object
+ secret:
+ description: |-
+ secret represents a secret that should populate this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is Optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values
+ for mode bits. Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items If unspecified, each key-value pair in the Data field of the referenced
+ Secret will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the Secret,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ optional:
+ description: optional field specify whether the Secret or its keys must be defined
+ type: boolean
+ secretName:
+ description: |-
+ secretName is the name of the secret in the pod's namespace to use.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ type: string
+ type: object
+ required:
+ - name
+ type: object
+ type: array
type: object
backend:
description: |-
@@ -11693,6 +20314,56 @@ spec:
path:
type: string
type: object
+ tlsOptions:
+ properties:
+ caCert:
+ type: string
+ clientCert:
+ type: string
+ clientKey:
+ type: string
+ type: object
+ volumeMounts:
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
type: object
backup:
description: BackupSchedule manages schedules for the backup service
@@ -11996,6 +20667,56 @@ spec:
path:
type: string
type: object
+ tlsOptions:
+ properties:
+ caCert:
+ type: string
+ clientCert:
+ type: string
+ clientKey:
+ type: string
+ type: object
+ volumeMounts:
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
type: object
concurrentRunsAllowed:
type: boolean
@@ -12011,6 +20732,21 @@ spec:
Deprecated: Use FailedJobsHistoryLimit and SuccessfulJobsHistoryLimit respectively.
type: integer
+ podConfigRef:
+ description: |-
+ PodConfigRef describes the pod spec with wich this action shall be executed.
+ It takes precedence over the Resources or PodSecurityContext field.
+ It does not allow changing the image or the command of the resulting pod.
+ This is for advanced use-cases only. Please only set this if you know what you're doing.
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
podSecurityContext:
description: PodSecurityContext describes the security context with which this action shall be executed.
properties:
@@ -12257,6 +20993,163 @@ spec:
items:
type: string
type: array
+ volumes:
+ description: Volumes List of volumes that can be mounted by containers belonging to the pod.
+ items:
+ properties:
+ configMap:
+ description: configMap represents a configMap that should populate this volume
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items if unspecified, each key-value pair in the Data field of the referenced
+ ConfigMap will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the ConfigMap,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: optional specify whether the ConfigMap or its keys must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ name:
+ description: |-
+ name of the volume.
+ Must be a DNS_LABEL and unique within the pod.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ persistentVolumeClaim:
+ description: |-
+ persistentVolumeClaimVolumeSource represents a reference to a
+ PersistentVolumeClaim in the same namespace.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ properties:
+ claimName:
+ description: |-
+ claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ type: string
+ readOnly:
+ description: |-
+ readOnly Will force the ReadOnly setting in VolumeMounts.
+ Default false.
+ type: boolean
+ required:
+ - claimName
+ type: object
+ secret:
+ description: |-
+ secret represents a secret that should populate this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is Optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values
+ for mode bits. Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items If unspecified, each key-value pair in the Data field of the referenced
+ Secret will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the Secret,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ optional:
+ description: optional field specify whether the Secret or its keys must be defined
+ type: boolean
+ secretName:
+ description: |-
+ secretName is the name of the secret in the pod's namespace to use.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ type: string
+ type: object
+ required:
+ - name
+ type: object
+ type: array
type: object
check:
description: CheckSchedule manages the schedules for the checks
@@ -12560,6 +21453,56 @@ spec:
path:
type: string
type: object
+ tlsOptions:
+ properties:
+ caCert:
+ type: string
+ clientCert:
+ type: string
+ clientKey:
+ type: string
+ type: object
+ volumeMounts:
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
type: object
concurrentRunsAllowed:
type: boolean
@@ -12575,6 +21518,21 @@ spec:
Deprecated: Use FailedJobsHistoryLimit and SuccessfulJobsHistoryLimit respectively.
type: integer
+ podConfigRef:
+ description: |-
+ PodConfigRef describes the pod spec with wich this action shall be executed.
+ It takes precedence over the Resources or PodSecurityContext field.
+ It does not allow changing the image or the command of the resulting pod.
+ This is for advanced use-cases only. Please only set this if you know what you're doing.
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
podSecurityContext:
description: PodSecurityContext describes the security context with which this action shall be executed.
properties:
@@ -12810,6 +21768,163 @@ spec:
SuccessfulJobsHistoryLimit amount of successful jobs to keep for later analysis.
KeepJobs is used property is not specified.
type: integer
+ volumes:
+ description: Volumes List of volumes that can be mounted by containers belonging to the pod.
+ items:
+ properties:
+ configMap:
+ description: configMap represents a configMap that should populate this volume
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items if unspecified, each key-value pair in the Data field of the referenced
+ ConfigMap will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the ConfigMap,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: optional specify whether the ConfigMap or its keys must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ name:
+ description: |-
+ name of the volume.
+ Must be a DNS_LABEL and unique within the pod.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ persistentVolumeClaim:
+ description: |-
+ persistentVolumeClaimVolumeSource represents a reference to a
+ PersistentVolumeClaim in the same namespace.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ properties:
+ claimName:
+ description: |-
+ claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ type: string
+ readOnly:
+ description: |-
+ readOnly Will force the ReadOnly setting in VolumeMounts.
+ Default false.
+ type: boolean
+ required:
+ - claimName
+ type: object
+ secret:
+ description: |-
+ secret represents a secret that should populate this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is Optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values
+ for mode bits. Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items If unspecified, each key-value pair in the Data field of the referenced
+ Secret will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the Secret,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ optional:
+ description: optional field specify whether the Secret or its keys must be defined
+ type: boolean
+ secretName:
+ description: |-
+ secretName is the name of the secret in the pod's namespace to use.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ type: string
+ type: object
+ required:
+ - name
+ type: object
+ type: array
type: object
failedJobsHistoryLimit:
description: |-
@@ -12823,6 +21938,19 @@ spec:
Deprecated: Use FailedJobsHistoryLimit and SuccessfulJobsHistoryLimit respectively.
type: integer
+ podConfigRef:
+ description: |-
+ PodConfigRef will apply the given template to all job definitions in this Schedule.
+ It can be overriden for specific jobs if necessary.
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
podSecurityContext:
description: PodSecurityContext describes the security context with which actions (such as backups) shall be executed.
properties:
@@ -13294,6 +22422,56 @@ spec:
path:
type: string
type: object
+ tlsOptions:
+ properties:
+ caCert:
+ type: string
+ clientCert:
+ type: string
+ clientKey:
+ type: string
+ type: object
+ volumeMounts:
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
type: object
concurrentRunsAllowed:
type: boolean
@@ -13309,6 +22487,21 @@ spec:
Deprecated: Use FailedJobsHistoryLimit and SuccessfulJobsHistoryLimit respectively.
type: integer
+ podConfigRef:
+ description: |-
+ PodConfigRef describes the pod spec with wich this action shall be executed.
+ It takes precedence over the Resources or PodSecurityContext field.
+ It does not allow changing the image or the command of the resulting pod.
+ This is for advanced use-cases only. Please only set this if you know what you're doing.
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
podSecurityContext:
description: PodSecurityContext describes the security context with which this action shall be executed.
properties:
@@ -13573,6 +22766,163 @@ spec:
SuccessfulJobsHistoryLimit amount of successful jobs to keep for later analysis.
KeepJobs is used property is not specified.
type: integer
+ volumes:
+ description: Volumes List of volumes that can be mounted by containers belonging to the pod.
+ items:
+ properties:
+ configMap:
+ description: configMap represents a configMap that should populate this volume
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items if unspecified, each key-value pair in the Data field of the referenced
+ ConfigMap will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the ConfigMap,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: optional specify whether the ConfigMap or its keys must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ name:
+ description: |-
+ name of the volume.
+ Must be a DNS_LABEL and unique within the pod.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ persistentVolumeClaim:
+ description: |-
+ persistentVolumeClaimVolumeSource represents a reference to a
+ PersistentVolumeClaim in the same namespace.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ properties:
+ claimName:
+ description: |-
+ claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ type: string
+ readOnly:
+ description: |-
+ readOnly Will force the ReadOnly setting in VolumeMounts.
+ Default false.
+ type: boolean
+ required:
+ - claimName
+ type: object
+ secret:
+ description: |-
+ secret represents a secret that should populate this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is Optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values
+ for mode bits. Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items If unspecified, each key-value pair in the Data field of the referenced
+ Secret will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the Secret,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ optional:
+ description: optional field specify whether the Secret or its keys must be defined
+ type: boolean
+ secretName:
+ description: |-
+ secretName is the name of the secret in the pod's namespace to use.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ type: string
+ type: object
+ required:
+ - name
+ type: object
+ type: array
type: object
resourceRequirementsTemplate:
description: ResourceRequirementsTemplate describes the compute resource requirements (cpu, memory, etc.)
@@ -13931,6 +23281,56 @@ spec:
path:
type: string
type: object
+ tlsOptions:
+ properties:
+ caCert:
+ type: string
+ clientCert:
+ type: string
+ clientKey:
+ type: string
+ type: object
+ volumeMounts:
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
type: object
concurrentRunsAllowed:
type: boolean
@@ -13946,6 +23346,21 @@ spec:
Deprecated: Use FailedJobsHistoryLimit and SuccessfulJobsHistoryLimit respectively.
type: integer
+ podConfigRef:
+ description: |-
+ PodConfigRef describes the pod spec with wich this action shall be executed.
+ It takes precedence over the Resources or PodSecurityContext field.
+ It does not allow changing the image or the command of the resulting pod.
+ This is for advanced use-cases only. Please only set this if you know what you're doing.
+ properties:
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
podSecurityContext:
description: PodSecurityContext describes the security context with which this action shall be executed.
properties:
@@ -14237,6 +23652,56 @@ spec:
type: object
x-kubernetes-map-type: atomic
type: object
+ tlsOptions:
+ properties:
+ caCert:
+ type: string
+ clientCert:
+ type: string
+ clientKey:
+ type: string
+ type: object
+ volumeMounts:
+ items:
+ description: VolumeMount describes a mounting of a Volume within a container.
+ properties:
+ mountPath:
+ description: |-
+ Path within the container at which the volume should be mounted. Must
+ not contain ':'.
+ type: string
+ mountPropagation:
+ description: |-
+ mountPropagation determines how mounts are propagated from the host
+ to container and the other way around.
+ When not set, MountPropagationNone is used.
+ This field is beta in 1.10.
+ type: string
+ name:
+ description: This must match the Name of a Volume.
+ type: string
+ readOnly:
+ description: |-
+ Mounted read-only if true, read-write otherwise (false or unspecified).
+ Defaults to false.
+ type: boolean
+ subPath:
+ description: |-
+ Path within the volume from which the container's volume should be mounted.
+ Defaults to "" (volume's root).
+ type: string
+ subPathExpr:
+ description: |-
+ Expanded path within the volume from which the container's volume should be mounted.
+ Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
+ Defaults to "" (volume's root).
+ SubPathExpr and SubPath are mutually exclusive.
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
type: object
schedule:
description: ScheduleDefinition is the actual cron-type expression that defines the interval of the actions.
@@ -14253,6 +23718,163 @@ spec:
items:
type: string
type: array
+ volumes:
+ description: Volumes List of volumes that can be mounted by containers belonging to the pod.
+ items:
+ properties:
+ configMap:
+ description: configMap represents a configMap that should populate this volume
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items if unspecified, each key-value pair in the Data field of the referenced
+ ConfigMap will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the ConfigMap,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ TODO: Add other useful fields. apiVersion, kind, uid?
+ type: string
+ optional:
+ description: optional specify whether the ConfigMap or its keys must be defined
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ name:
+ description: |-
+ name of the volume.
+ Must be a DNS_LABEL and unique within the pod.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ persistentVolumeClaim:
+ description: |-
+ persistentVolumeClaimVolumeSource represents a reference to a
+ PersistentVolumeClaim in the same namespace.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ properties:
+ claimName:
+ description: |-
+ claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ type: string
+ readOnly:
+ description: |-
+ readOnly Will force the ReadOnly setting in VolumeMounts.
+ Default false.
+ type: boolean
+ required:
+ - claimName
+ type: object
+ secret:
+ description: |-
+ secret represents a secret that should populate this volume.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ properties:
+ defaultMode:
+ description: |-
+ defaultMode is Optional: mode bits used to set permissions on created files by default.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values
+ for mode bits. Defaults to 0644.
+ Directories within the path are not affected by this setting.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ items:
+ description: |-
+ items If unspecified, each key-value pair in the Data field of the referenced
+ Secret will be projected into the volume as a file whose name is the
+ key and content is the value. If specified, the listed keys will be
+ projected into the specified paths, and unlisted keys will not be
+ present. If a key is specified which is not present in the Secret,
+ the volume setup will error unless it is marked optional. Paths must be
+ relative and may not contain the '..' path or start with '..'.
+ items:
+ description: Maps a string key to a path within a volume.
+ properties:
+ key:
+ description: key is the key to project.
+ type: string
+ mode:
+ description: |-
+ mode is Optional: mode bits used to set permissions on this file.
+ Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ If not specified, the volume defaultMode will be used.
+ This might be in conflict with other options that affect the file
+ mode, like fsGroup, and the result can be other mode bits set.
+ format: int32
+ type: integer
+ path:
+ description: |-
+ path is the relative path of the file to map the key to.
+ May not be an absolute path.
+ May not contain the path element '..'.
+ May not start with the string '..'.
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ optional:
+ description: optional field specify whether the Secret or its keys must be defined
+ type: boolean
+ secretName:
+ description: |-
+ secretName is the name of the secret in the pod's namespace to use.
+ More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ type: string
+ type: object
+ required:
+ - name
+ type: object
+ type: array
type: object
successfulJobsHistoryLimit:
description: |-
diff --git a/charts/kubezero-storage/templates/snapshot-controller/volumesnapshotclasses-crd.yaml b/charts/kubezero-storage/templates/snapshot-controller/volumesnapshotclasses-crd.yaml
index b57c50b0..219a2f67 100644
--- a/charts/kubezero-storage/templates/snapshot-controller/volumesnapshotclasses-crd.yaml
+++ b/charts/kubezero-storage/templates/snapshot-controller/volumesnapshotclasses-crd.yaml
@@ -5,8 +5,7 @@ kind: CustomResourceDefinition
metadata:
annotations:
api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/814"
- controller-gen.kubebuilder.io/version: v0.12.0
- creationTimestamp: null
+ controller-gen.kubebuilder.io/version: v0.15.0
name: volumesnapshotclasses.snapshot.storage.k8s.io
spec:
group: snapshot.storage.k8s.io
@@ -35,44 +34,52 @@ spec:
name: v1
schema:
openAPIV3Schema:
- description: VolumeSnapshotClass specifies parameters that a underlying storage
- system uses when creating a volume snapshot. A specific VolumeSnapshotClass
- is used by specifying its name in a VolumeSnapshot object. VolumeSnapshotClasses
- are non-namespaced
+ description: |-
+ VolumeSnapshotClass specifies parameters that a underlying storage system uses when
+ creating a volume snapshot. A specific VolumeSnapshotClass is used by specifying its
+ name in a VolumeSnapshot object.
+ VolumeSnapshotClasses are non-namespaced
properties:
apiVersion:
- description: 'APIVersion defines the versioned schema of this representation
- of an object. Servers should convert recognized schemas to the latest
- internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+ description: |-
+ APIVersion defines the versioned schema of this representation of an object.
+ Servers should convert recognized schemas to the latest internal value, and
+ may reject unrecognized values.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string
deletionPolicy:
- description: deletionPolicy determines whether a VolumeSnapshotContent
- created through the VolumeSnapshotClass should be deleted when its bound
- VolumeSnapshot is deleted. Supported values are "Retain" and "Delete".
- "Retain" means that the VolumeSnapshotContent and its physical snapshot
- on underlying storage system are kept. "Delete" means that the VolumeSnapshotContent
- and its physical snapshot on underlying storage system are deleted.
+ description: |-
+ deletionPolicy determines whether a VolumeSnapshotContent created through
+ the VolumeSnapshotClass should be deleted when its bound VolumeSnapshot is deleted.
+ Supported values are "Retain" and "Delete".
+ "Retain" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are kept.
+ "Delete" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are deleted.
Required.
enum:
- Delete
- Retain
type: string
driver:
- description: driver is the name of the storage driver that handles this
- VolumeSnapshotClass. Required.
+ description: |-
+ driver is the name of the storage driver that handles this VolumeSnapshotClass.
+ Required.
type: string
kind:
- description: 'Kind is a string value representing the REST resource this
- object represents. Servers may infer this from the endpoint the client
- submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ description: |-
+ Kind is a string value representing the REST resource this object represents.
+ Servers may infer this from the endpoint the client submits requests to.
+ Cannot be updated.
+ In CamelCase.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
metadata:
type: object
parameters:
additionalProperties:
type: string
- description: parameters is a key-value map with storage driver specific
- parameters for creating snapshots. These values are opaque to Kubernetes.
+ description: |-
+ parameters is a key-value map with storage driver specific parameters for creating snapshots.
+ These values are opaque to Kubernetes.
type: object
required:
- deletionPolicy
diff --git a/charts/kubezero-storage/templates/snapshot-controller/volumesnapshotcontents-crd.yaml b/charts/kubezero-storage/templates/snapshot-controller/volumesnapshotcontents-crd.yaml
index 55010228..dab6b92d 100644
--- a/charts/kubezero-storage/templates/snapshot-controller/volumesnapshotcontents-crd.yaml
+++ b/charts/kubezero-storage/templates/snapshot-controller/volumesnapshotcontents-crd.yaml
@@ -4,9 +4,8 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
+ controller-gen.kubebuilder.io/version: v0.15.0
api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/955"
- controller-gen.kubebuilder.io/version: v0.12.0
- creationTimestamp: null
name: volumesnapshotcontents.snapshot.storage.k8s.io
spec:
group: snapshot.storage.k8s.io
@@ -49,7 +48,8 @@ spec:
jsonPath: .spec.volumeSnapshotRef.name
name: VolumeSnapshot
type: string
- - description: Namespace of the VolumeSnapshot object to which this VolumeSnapshotContent object is bound.
+ - description: Namespace of the VolumeSnapshot object to which this VolumeSnapshotContent
+ object is bound.
jsonPath: .spec.volumeSnapshotRef.namespace
name: VolumeSnapshotNamespace
type: string
@@ -59,154 +59,206 @@ spec:
name: v1
schema:
openAPIV3Schema:
- description: VolumeSnapshotContent represents the actual "on-disk" snapshot
- object in the underlying storage system
+ description: |-
+ VolumeSnapshotContent represents the actual "on-disk" snapshot object in the
+ underlying storage system
properties:
apiVersion:
- description: 'APIVersion defines the versioned schema of this representation
- of an object. Servers should convert recognized schemas to the latest
- internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+ description: |-
+ APIVersion defines the versioned schema of this representation of an object.
+ Servers should convert recognized schemas to the latest internal value, and
+ may reject unrecognized values.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string
kind:
- description: 'Kind is a string value representing the REST resource this
- object represents. Servers may infer this from the endpoint the client
- submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ description: |-
+ Kind is a string value representing the REST resource this object represents.
+ Servers may infer this from the endpoint the client submits requests to.
+ Cannot be updated.
+ In CamelCase.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
metadata:
type: object
spec:
- description: spec defines properties of a VolumeSnapshotContent created
- by the underlying storage system. Required.
+ description: |-
+ spec defines properties of a VolumeSnapshotContent created by the underlying storage system.
+ Required.
properties:
deletionPolicy:
- description: deletionPolicy determines whether this VolumeSnapshotContent
- and its physical snapshot on the underlying storage system should
- be deleted when its bound VolumeSnapshot is deleted. Supported values
- are "Retain" and "Delete". "Retain" means that the VolumeSnapshotContent
- and its physical snapshot on underlying storage system are kept.
- "Delete" means that the VolumeSnapshotContent and its physical snapshot
- on underlying storage system are deleted. For dynamically provisioned
- snapshots, this field will automatically be filled in by the CSI
- snapshotter sidecar with the "DeletionPolicy" field defined in the
- corresponding VolumeSnapshotClass. For pre-existing snapshots, users
- MUST specify this field when creating the VolumeSnapshotContent
- object. Required.
+ description: |-
+ deletionPolicy determines whether this VolumeSnapshotContent and its physical snapshot on
+ the underlying storage system should be deleted when its bound VolumeSnapshot is deleted.
+ Supported values are "Retain" and "Delete".
+ "Retain" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are kept.
+ "Delete" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are deleted.
+ For dynamically provisioned snapshots, this field will automatically be filled in by the
+ CSI snapshotter sidecar with the "DeletionPolicy" field defined in the corresponding
+ VolumeSnapshotClass.
+ For pre-existing snapshots, users MUST specify this field when creating the
+ VolumeSnapshotContent object.
+ Required.
enum:
- Delete
- Retain
type: string
driver:
- description: driver is the name of the CSI driver used to create the
- physical snapshot on the underlying storage system. This MUST be
- the same as the name returned by the CSI GetPluginName() call for
- that driver. Required.
+ description: |-
+ driver is the name of the CSI driver used to create the physical snapshot on
+ the underlying storage system.
+ This MUST be the same as the name returned by the CSI GetPluginName() call for
+ that driver.
+ Required.
type: string
source:
- description: source specifies whether the snapshot is (or should be)
- dynamically provisioned or already exists, and just requires a Kubernetes
- object representation. This field is immutable after creation. Required.
+ description: |-
+ source specifies whether the snapshot is (or should be) dynamically provisioned
+ or already exists, and just requires a Kubernetes object representation.
+ This field is immutable after creation.
+ Required.
properties:
snapshotHandle:
- description: snapshotHandle specifies the CSI "snapshot_id" of
- a pre-existing snapshot on the underlying storage system for
- which a Kubernetes object representation was (or should be)
- created. This field is immutable.
- type: string
- volumeHandle:
- description: volumeHandle specifies the CSI "volume_id" of the
- volume from which a snapshot should be dynamically taken from.
+ description: |-
+ snapshotHandle specifies the CSI "snapshot_id" of a pre-existing snapshot on
+ the underlying storage system for which a Kubernetes object representation
+ was (or should be) created.
This field is immutable.
type: string
+ x-kubernetes-validations:
+ - message: snapshotHandle is immutable
+ rule: self == oldSelf
+ volumeHandle:
+ description: |-
+ volumeHandle specifies the CSI "volume_id" of the volume from which a snapshot
+ should be dynamically taken from.
+ This field is immutable.
+ type: string
+ x-kubernetes-validations:
+ - message: volumeHandle is immutable
+ rule: self == oldSelf
type: object
- oneOf:
- - required: ["snapshotHandle"]
- - required: ["volumeHandle"]
+ x-kubernetes-validations:
+ - message: volumeHandle is required once set
+ rule: '!has(oldSelf.volumeHandle) || has(self.volumeHandle)'
+ - message: snapshotHandle is required once set
+ rule: '!has(oldSelf.snapshotHandle) || has(self.snapshotHandle)'
+ - message: exactly one of volumeHandle and snapshotHandle must be
+ set
+ rule: (has(self.volumeHandle) && !has(self.snapshotHandle)) || (!has(self.volumeHandle)
+ && has(self.snapshotHandle))
sourceVolumeMode:
- description: SourceVolumeMode is the mode of the volume whose snapshot
- is taken. Can be either “Filesystem” or “Block”. If not specified,
- it indicates the source volume's mode is unknown. This field is
- immutable. This field is an alpha field.
+ description: |-
+ SourceVolumeMode is the mode of the volume whose snapshot is taken.
+ Can be either “Filesystem” or “Block”.
+ If not specified, it indicates the source volume's mode is unknown.
+ This field is immutable.
+ This field is an alpha field.
type: string
+ x-kubernetes-validations:
+ - message: sourceVolumeMode is immutable
+ rule: self == oldSelf
volumeSnapshotClassName:
- description: name of the VolumeSnapshotClass from which this snapshot
- was (or will be) created. Note that after provisioning, the VolumeSnapshotClass
- may be deleted or recreated with different set of values, and as
- such, should not be referenced post-snapshot creation.
+ description: |-
+ name of the VolumeSnapshotClass from which this snapshot was (or will be)
+ created.
+ Note that after provisioning, the VolumeSnapshotClass may be deleted or
+ recreated with different set of values, and as such, should not be referenced
+ post-snapshot creation.
type: string
volumeSnapshotRef:
- description: volumeSnapshotRef specifies the VolumeSnapshot object
- to which this VolumeSnapshotContent object is bound. VolumeSnapshot.Spec.VolumeSnapshotContentName
- field must reference to this VolumeSnapshotContent's name for the
- bidirectional binding to be valid. For a pre-existing VolumeSnapshotContent
- object, name and namespace of the VolumeSnapshot object MUST be
- provided for binding to happen. This field is immutable after creation.
+ description: |-
+ volumeSnapshotRef specifies the VolumeSnapshot object to which this
+ VolumeSnapshotContent object is bound.
+ VolumeSnapshot.Spec.VolumeSnapshotContentName field must reference to
+ this VolumeSnapshotContent's name for the bidirectional binding to be valid.
+ For a pre-existing VolumeSnapshotContent object, name and namespace of the
+ VolumeSnapshot object MUST be provided for binding to happen.
+ This field is immutable after creation.
Required.
properties:
apiVersion:
description: API version of the referent.
type: string
fieldPath:
- description: 'If referring to a piece of an object instead of
- an entire object, this string should contain a valid JSON/Go
- field access statement, such as desiredState.manifest.containers[2].
- For example, if the object reference is to a container within
- a pod, this would take on a value like: "spec.containers{name}"
- (where "name" refers to the name of the container that triggered
- the event) or if no container name is specified "spec.containers[2]"
- (container with index 2 in this pod). This syntax is chosen
- only to have some well-defined way of referencing a part of
- an object. TODO: this design is not final and this field is
- subject to change in the future.'
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ TODO: this design is not final and this field is subject to change in the future.
type: string
kind:
- description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
name:
- description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
type: string
namespace:
- description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
type: string
resourceVersion:
- description: 'Specific resourceVersion to which this reference
- is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
type: string
uid:
- description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
type: string
type: object
x-kubernetes-map-type: atomic
+ x-kubernetes-validations:
+ - message: both spec.volumeSnapshotRef.name and spec.volumeSnapshotRef.namespace
+ must be set
+ rule: has(self.name) && has(self.__namespace__)
required:
- deletionPolicy
- driver
- source
- volumeSnapshotRef
type: object
+ x-kubernetes-validations:
+ - message: sourceVolumeMode is required once set
+ rule: '!has(oldSelf.sourceVolumeMode) || has(self.sourceVolumeMode)'
status:
description: status represents the current information of a snapshot.
properties:
creationTime:
- description: creationTime is the timestamp when the point-in-time
- snapshot is taken by the underlying storage system. In dynamic snapshot
- creation case, this field will be filled in by the CSI snapshotter
- sidecar with the "creation_time" value returned from CSI "CreateSnapshot"
- gRPC call. For a pre-existing snapshot, this field will be filled
- with the "creation_time" value returned from the CSI "ListSnapshots"
- gRPC call if the driver supports it. If not specified, it indicates
- the creation time is unknown. The format of this field is a Unix
- nanoseconds time encoded as an int64. On Unix, the command `date
- +%s%N` returns the current time in nanoseconds since 1970-01-01
- 00:00:00 UTC.
+ description: |-
+ creationTime is the timestamp when the point-in-time snapshot is taken
+ by the underlying storage system.
+ In dynamic snapshot creation case, this field will be filled in by the
+ CSI snapshotter sidecar with the "creation_time" value returned from CSI
+ "CreateSnapshot" gRPC call.
+ For a pre-existing snapshot, this field will be filled with the "creation_time"
+ value returned from the CSI "ListSnapshots" gRPC call if the driver supports it.
+ If not specified, it indicates the creation time is unknown.
+ The format of this field is a Unix nanoseconds time encoded as an int64.
+ On Unix, the command `date +%s%N` returns the current time in nanoseconds
+ since 1970-01-01 00:00:00 UTC.
format: int64
type: integer
error:
- description: error is the last observed error during snapshot creation,
- if any. Upon success after retry, this error field will be cleared.
+ description: |-
+ error is the last observed error during snapshot creation, if any.
+ Upon success after retry, this error field will be cleared.
properties:
message:
- description: 'message is a string detailing the encountered error
- during snapshot creation if specified. NOTE: message may be
- logged, and it should not contain sensitive information.'
+ description: |-
+ message is a string detailing the encountered error during snapshot
+ creation if specified.
+ NOTE: message may be logged, and it should not contain sensitive
+ information.
type: string
time:
description: time is the timestamp when the error was encountered.
@@ -214,38 +266,40 @@ spec:
type: string
type: object
readyToUse:
- description: readyToUse indicates if a snapshot is ready to be used
- to restore a volume. In dynamic snapshot creation case, this field
- will be filled in by the CSI snapshotter sidecar with the "ready_to_use"
- value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing
- snapshot, this field will be filled with the "ready_to_use" value
- returned from the CSI "ListSnapshots" gRPC call if the driver supports
- it, otherwise, this field will be set to "True". If not specified,
- it means the readiness of a snapshot is unknown.
+ description: |-
+ readyToUse indicates if a snapshot is ready to be used to restore a volume.
+ In dynamic snapshot creation case, this field will be filled in by the
+ CSI snapshotter sidecar with the "ready_to_use" value returned from CSI
+ "CreateSnapshot" gRPC call.
+ For a pre-existing snapshot, this field will be filled with the "ready_to_use"
+ value returned from the CSI "ListSnapshots" gRPC call if the driver supports it,
+ otherwise, this field will be set to "True".
+ If not specified, it means the readiness of a snapshot is unknown.
type: boolean
restoreSize:
- description: restoreSize represents the complete size of the snapshot
- in bytes. In dynamic snapshot creation case, this field will be
- filled in by the CSI snapshotter sidecar with the "size_bytes" value
- returned from CSI "CreateSnapshot" gRPC call. For a pre-existing
- snapshot, this field will be filled with the "size_bytes" value
- returned from the CSI "ListSnapshots" gRPC call if the driver supports
- it. When restoring a volume from this snapshot, the size of the
- volume MUST NOT be smaller than the restoreSize if it is specified,
- otherwise the restoration will fail. If not specified, it indicates
- that the size is unknown.
+ description: |-
+ restoreSize represents the complete size of the snapshot in bytes.
+ In dynamic snapshot creation case, this field will be filled in by the
+ CSI snapshotter sidecar with the "size_bytes" value returned from CSI
+ "CreateSnapshot" gRPC call.
+ For a pre-existing snapshot, this field will be filled with the "size_bytes"
+ value returned from the CSI "ListSnapshots" gRPC call if the driver supports it.
+ When restoring a volume from this snapshot, the size of the volume MUST NOT
+ be smaller than the restoreSize if it is specified, otherwise the restoration will fail.
+ If not specified, it indicates that the size is unknown.
format: int64
minimum: 0
type: integer
snapshotHandle:
- description: snapshotHandle is the CSI "snapshot_id" of a snapshot
- on the underlying storage system. If not specified, it indicates
- that dynamic snapshot creation has either failed or it is still
- in progress.
+ description: |-
+ snapshotHandle is the CSI "snapshot_id" of a snapshot on the underlying storage system.
+ If not specified, it indicates that dynamic snapshot creation has either failed
+ or it is still in progress.
type: string
volumeGroupSnapshotHandle:
- description: VolumeGroupSnapshotHandle is the CSI "group_snapshot_id"
- of a group snapshot on the underlying storage system.
+ description: |-
+ VolumeGroupSnapshotHandle is the CSI "group_snapshot_id" of a group snapshot
+ on the underlying storage system.
type: string
type: object
required:
diff --git a/charts/kubezero-storage/templates/snapshot-controller/volumesnapshots-crd.yaml b/charts/kubezero-storage/templates/snapshot-controller/volumesnapshots-crd.yaml
index 45a041d3..71ce0826 100644
--- a/charts/kubezero-storage/templates/snapshot-controller/volumesnapshots-crd.yaml
+++ b/charts/kubezero-storage/templates/snapshot-controller/volumesnapshots-crd.yaml
@@ -4,9 +4,8 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
+ controller-gen.kubebuilder.io/version: v0.15.0
api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/814"
- controller-gen.kubebuilder.io/version: v0.12.0
- creationTimestamp: null
name: volumesnapshots.snapshot.storage.k8s.io
spec:
group: snapshot.storage.k8s.io
@@ -62,105 +61,140 @@ spec:
name: v1
schema:
openAPIV3Schema:
- description: VolumeSnapshot is a user's request for either creating a point-in-time
+ description: |-
+ VolumeSnapshot is a user's request for either creating a point-in-time
snapshot of a persistent volume, or binding to a pre-existing snapshot.
properties:
apiVersion:
- description: 'APIVersion defines the versioned schema of this representation
- of an object. Servers should convert recognized schemas to the latest
- internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+ description: |-
+ APIVersion defines the versioned schema of this representation of an object.
+ Servers should convert recognized schemas to the latest internal value, and
+ may reject unrecognized values.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string
kind:
- description: 'Kind is a string value representing the REST resource this
- object represents. Servers may infer this from the endpoint the client
- submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ description: |-
+ Kind is a string value representing the REST resource this object represents.
+ Servers may infer this from the endpoint the client submits requests to.
+ Cannot be updated.
+ In CamelCase.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
metadata:
type: object
spec:
- description: 'spec defines the desired characteristics of a snapshot requested
- by a user. More info: https://kubernetes.io/docs/concepts/storage/volume-snapshots#volumesnapshots
- Required.'
+ description: |-
+ spec defines the desired characteristics of a snapshot requested by a user.
+ More info: https://kubernetes.io/docs/concepts/storage/volume-snapshots#volumesnapshots
+ Required.
properties:
source:
- description: source specifies where a snapshot will be created from.
- This field is immutable after creation. Required.
+ description: |-
+ source specifies where a snapshot will be created from.
+ This field is immutable after creation.
+ Required.
properties:
persistentVolumeClaimName:
- description: persistentVolumeClaimName specifies the name of the
- PersistentVolumeClaim object representing the volume from which
- a snapshot should be created. This PVC is assumed to be in the
- same namespace as the VolumeSnapshot object. This field should
- be set if the snapshot does not exists, and needs to be created.
+ description: |-
+ persistentVolumeClaimName specifies the name of the PersistentVolumeClaim
+ object representing the volume from which a snapshot should be created.
+ This PVC is assumed to be in the same namespace as the VolumeSnapshot
+ object.
+ This field should be set if the snapshot does not exists, and needs to be
+ created.
This field is immutable.
type: string
+ x-kubernetes-validations:
+ - message: persistentVolumeClaimName is immutable
+ rule: self == oldSelf
volumeSnapshotContentName:
- description: volumeSnapshotContentName specifies the name of a
- pre-existing VolumeSnapshotContent object representing an existing
- volume snapshot. This field should be set if the snapshot already
- exists and only needs a representation in Kubernetes. This field
- is immutable.
+ description: |-
+ volumeSnapshotContentName specifies the name of a pre-existing VolumeSnapshotContent
+ object representing an existing volume snapshot.
+ This field should be set if the snapshot already exists and only needs a representation in Kubernetes.
+ This field is immutable.
type: string
+ x-kubernetes-validations:
+ - message: volumeSnapshotContentName is immutable
+ rule: self == oldSelf
type: object
- oneOf:
- - required: ["persistentVolumeClaimName"]
- - required: ["volumeSnapshotContentName"]
+ x-kubernetes-validations:
+ - message: persistentVolumeClaimName is required once set
+ rule: '!has(oldSelf.persistentVolumeClaimName) || has(self.persistentVolumeClaimName)'
+ - message: volumeSnapshotContentName is required once set
+ rule: '!has(oldSelf.volumeSnapshotContentName) || has(self.volumeSnapshotContentName)'
+ - message: exactly one of volumeSnapshotContentName and persistentVolumeClaimName
+ must be set
+ rule: (has(self.volumeSnapshotContentName) && !has(self.persistentVolumeClaimName))
+ || (!has(self.volumeSnapshotContentName) && has(self.persistentVolumeClaimName))
volumeSnapshotClassName:
- description: 'VolumeSnapshotClassName is the name of the VolumeSnapshotClass
- requested by the VolumeSnapshot. VolumeSnapshotClassName may be
- left nil to indicate that the default SnapshotClass should be used.
- A given cluster may have multiple default Volume SnapshotClasses:
- one default per CSI Driver. If a VolumeSnapshot does not specify
- a SnapshotClass, VolumeSnapshotSource will be checked to figure
- out what the associated CSI Driver is, and the default VolumeSnapshotClass
- associated with that CSI Driver will be used. If more than one VolumeSnapshotClass
- exist for a given CSI Driver and more than one have been marked
- as default, CreateSnapshot will fail and generate an event. Empty
- string is not allowed for this field.'
+ description: |-
+ VolumeSnapshotClassName is the name of the VolumeSnapshotClass
+ requested by the VolumeSnapshot.
+ VolumeSnapshotClassName may be left nil to indicate that the default
+ SnapshotClass should be used.
+ A given cluster may have multiple default Volume SnapshotClasses: one
+ default per CSI Driver. If a VolumeSnapshot does not specify a SnapshotClass,
+ VolumeSnapshotSource will be checked to figure out what the associated
+ CSI Driver is, and the default VolumeSnapshotClass associated with that
+ CSI Driver will be used. If more than one VolumeSnapshotClass exist for
+ a given CSI Driver and more than one have been marked as default,
+ CreateSnapshot will fail and generate an event.
+ Empty string is not allowed for this field.
type: string
+ x-kubernetes-validations:
+ - message: volumeSnapshotClassName must not be the empty string when
+ set
+ rule: size(self) > 0
required:
- source
type: object
status:
- description: status represents the current information of a snapshot.
- Consumers must verify binding between VolumeSnapshot and VolumeSnapshotContent
- objects is successful (by validating that both VolumeSnapshot and VolumeSnapshotContent
- point at each other) before using this object.
+ description: |-
+ status represents the current information of a snapshot.
+ Consumers must verify binding between VolumeSnapshot and
+ VolumeSnapshotContent objects is successful (by validating that both
+ VolumeSnapshot and VolumeSnapshotContent point at each other) before
+ using this object.
properties:
boundVolumeSnapshotContentName:
- description: 'boundVolumeSnapshotContentName is the name of the VolumeSnapshotContent
- object to which this VolumeSnapshot object intends to bind to. If
- not specified, it indicates that the VolumeSnapshot object has not
- been successfully bound to a VolumeSnapshotContent object yet. NOTE:
- To avoid possible security issues, consumers must verify binding
- between VolumeSnapshot and VolumeSnapshotContent objects is successful
- (by validating that both VolumeSnapshot and VolumeSnapshotContent
- point at each other) before using this object.'
+ description: |-
+ boundVolumeSnapshotContentName is the name of the VolumeSnapshotContent
+ object to which this VolumeSnapshot object intends to bind to.
+ If not specified, it indicates that the VolumeSnapshot object has not been
+ successfully bound to a VolumeSnapshotContent object yet.
+ NOTE: To avoid possible security issues, consumers must verify binding between
+ VolumeSnapshot and VolumeSnapshotContent objects is successful (by validating that
+ both VolumeSnapshot and VolumeSnapshotContent point at each other) before using
+ this object.
type: string
creationTime:
- description: creationTime is the timestamp when the point-in-time
- snapshot is taken by the underlying storage system. In dynamic snapshot
- creation case, this field will be filled in by the snapshot controller
- with the "creation_time" value returned from CSI "CreateSnapshot"
- gRPC call. For a pre-existing snapshot, this field will be filled
- with the "creation_time" value returned from the CSI "ListSnapshots"
- gRPC call if the driver supports it. If not specified, it may indicate
- that the creation time of the snapshot is unknown.
+ description: |-
+ creationTime is the timestamp when the point-in-time snapshot is taken
+ by the underlying storage system.
+ In dynamic snapshot creation case, this field will be filled in by the
+ snapshot controller with the "creation_time" value returned from CSI
+ "CreateSnapshot" gRPC call.
+ For a pre-existing snapshot, this field will be filled with the "creation_time"
+ value returned from the CSI "ListSnapshots" gRPC call if the driver supports it.
+ If not specified, it may indicate that the creation time of the snapshot is unknown.
format: date-time
type: string
error:
- description: error is the last observed error during snapshot creation,
- if any. This field could be helpful to upper level controllers(i.e.,
- application controller) to decide whether they should continue on
- waiting for the snapshot to be created based on the type of error
- reported. The snapshot controller will keep retrying when an error
- occurs during the snapshot creation. Upon success, this error field
- will be cleared.
+ description: |-
+ error is the last observed error during snapshot creation, if any.
+ This field could be helpful to upper level controllers(i.e., application controller)
+ to decide whether they should continue on waiting for the snapshot to be created
+ based on the type of error reported.
+ The snapshot controller will keep retrying when an error occurs during the
+ snapshot creation. Upon success, this error field will be cleared.
properties:
message:
- description: 'message is a string detailing the encountered error
- during snapshot creation if specified. NOTE: message may be
- logged, and it should not contain sensitive information.'
+ description: |-
+ message is a string detailing the encountered error during snapshot
+ creation if specified.
+ NOTE: message may be logged, and it should not contain sensitive
+ information.
type: string
time:
description: time is the timestamp when the error was encountered.
@@ -168,32 +202,35 @@ spec:
type: string
type: object
readyToUse:
- description: readyToUse indicates if the snapshot is ready to be used
- to restore a volume. In dynamic snapshot creation case, this field
- will be filled in by the snapshot controller with the "ready_to_use"
- value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing
- snapshot, this field will be filled with the "ready_to_use" value
- returned from the CSI "ListSnapshots" gRPC call if the driver supports
- it, otherwise, this field will be set to "True". If not specified,
- it means the readiness of a snapshot is unknown.
+ description: |-
+ readyToUse indicates if the snapshot is ready to be used to restore a volume.
+ In dynamic snapshot creation case, this field will be filled in by the
+ snapshot controller with the "ready_to_use" value returned from CSI
+ "CreateSnapshot" gRPC call.
+ For a pre-existing snapshot, this field will be filled with the "ready_to_use"
+ value returned from the CSI "ListSnapshots" gRPC call if the driver supports it,
+ otherwise, this field will be set to "True".
+ If not specified, it means the readiness of a snapshot is unknown.
type: boolean
restoreSize:
type: string
- description: restoreSize represents the minimum size of volume required
- to create a volume from this snapshot. In dynamic snapshot creation
- case, this field will be filled in by the snapshot controller with
- the "size_bytes" value returned from CSI "CreateSnapshot" gRPC call.
- For a pre-existing snapshot, this field will be filled with the
- "size_bytes" value returned from the CSI "ListSnapshots" gRPC call
- if the driver supports it. When restoring a volume from this snapshot,
- the size of the volume MUST NOT be smaller than the restoreSize
- if it is specified, otherwise the restoration will fail. If not
- specified, it indicates that the size is unknown.
+ description: |-
+ restoreSize represents the minimum size of volume required to create a volume
+ from this snapshot.
+ In dynamic snapshot creation case, this field will be filled in by the
+ snapshot controller with the "size_bytes" value returned from CSI
+ "CreateSnapshot" gRPC call.
+ For a pre-existing snapshot, this field will be filled with the "size_bytes"
+ value returned from the CSI "ListSnapshots" gRPC call if the driver supports it.
+ When restoring a volume from this snapshot, the size of the volume MUST NOT
+ be smaller than the restoreSize if it is specified, otherwise the restoration will fail.
+ If not specified, it indicates that the size is unknown.
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
volumeGroupSnapshotName:
- description: VolumeGroupSnapshotName is the name of the VolumeGroupSnapshot
- of which this VolumeSnapshot is a part of.
+ description: |-
+ VolumeGroupSnapshotName is the name of the VolumeGroupSnapshot of which this
+ VolumeSnapshot is a part of.
type: string
type: object
required:
diff --git a/charts/kubezero-storage/values.yaml b/charts/kubezero-storage/values.yaml
index c1a8c296..0b3969f7 100644
--- a/charts/kubezero-storage/values.yaml
+++ b/charts/kubezero-storage/values.yaml
@@ -212,7 +212,19 @@ aws-efs-csi-driver:
regionalStsEndpoints: true
- #extraEnv:
+ volumeMounts:
+ - name: aws-token
+ mountPath: /var/run/secrets/sts.amazonaws.com/serviceaccount/
+ volumes:
+ - name: aws-token
+ projected:
+ sources:
+ - serviceAccountToken:
+ path: token
+ expirationSeconds: 86400
+ audience: "sts.amazonaws.com"
+
+ #env:
#- name: AWS_ROLE_ARN
# value: ""
#- name: AWS_WEB_IDENTITY_TOKEN_FILE
diff --git a/charts/kubezero/values.yaml b/charts/kubezero/values.yaml
index dc5284f3..1b66c828 100644
--- a/charts/kubezero/values.yaml
+++ b/charts/kubezero/values.yaml
@@ -37,11 +37,11 @@ network:
cert-manager:
enabled: false
namespace: cert-manager
- targetRevision: 0.9.7
+ targetRevision: 0.9.8
storage:
enabled: false
- targetRevision: 0.8.7
+ targetRevision: 0.8.8
lvm-localpv:
enabled: false
aws-ebs-csi-driver:
@@ -113,7 +113,7 @@ logging:
argo:
enabled: false
namespace: argocd
- targetRevision: 0.2.1
+ targetRevision: 0.2.2
argo-cd:
enabled: false
istio: