From 9de782e719d6a616bcccd8e73ea4d8ba71bffa89 Mon Sep 17 00:00:00 2001 From: Floppy Disk Date: Thu, 16 Jan 2025 13:23:56 +0300 Subject: [PATCH 1/5] fix --- packages/system/kubevirt-operator/alerts/PrometheusRule.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/system/kubevirt-operator/alerts/PrometheusRule.yaml b/packages/system/kubevirt-operator/alerts/PrometheusRule.yaml index bf8604d0..f20762df 100644 --- a/packages/system/kubevirt-operator/alerts/PrometheusRule.yaml +++ b/packages/system/kubevirt-operator/alerts/PrometheusRule.yaml @@ -2,7 +2,6 @@ apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: vm-not-running-alert - namespace: monitoring spec: groups: - name: kubevirt-alerts From b75aaf177b0e02dd92bc588ad08df70c1fc29be9 Mon Sep 17 00:00:00 2001 From: Floppy Disk Date: Mon, 10 Feb 2025 13:29:17 +0300 Subject: [PATCH 2/5] add kafka monitoring --- dashboards/kafka/strimzi-kafka.json | 2940 +++++++++++++++++ hack/download-dashboards.sh | 1 + packages/apps/kafka/Chart.yaml | 2 +- packages/apps/kafka/templates/kafka.yaml | 12 + .../kafka/templates/metrics-configmap.yaml | 198 ++ packages/apps/kafka/templates/podscrape.yaml | 40 + packages/apps/versions_map | 3 +- packages/extra/monitoring/dashboards.list | 1 + .../templates/prometheus-rules.yaml | 275 ++ 9 files changed, 3470 insertions(+), 2 deletions(-) create mode 100644 dashboards/kafka/strimzi-kafka.json create mode 100644 packages/apps/kafka/templates/metrics-configmap.yaml create mode 100644 packages/apps/kafka/templates/podscrape.yaml create mode 100644 packages/system/kafka-operator/templates/prometheus-rules.yaml diff --git a/dashboards/kafka/strimzi-kafka.json b/dashboards/kafka/strimzi-kafka.json new file mode 100644 index 00000000..e7d5a5ed --- /dev/null +++ b/dashboards/kafka/strimzi-kafka.json @@ -0,0 +1,2940 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 133, + "links": [], + "panels": [ + { + "datasource": "${DS_PROMETHEUS}", + "description": "Number of brokers online", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#d44a3a", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 0 + }, + { + "color": "#299c46", + "value": 2 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 0, + "y": 0 + }, + "id": 46, + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "count(kafka_server_replicamanager_leadercount{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Brokers Online", + "type": "stat" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Number of active controllers in the cluster", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#299c46", + "value": null + }, + { + "color": "#e5ac0e", + "value": 2 + }, + { + "color": "#bf1b00" + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 3, + "y": 0 + }, + "id": 36, + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(kafka_controller_kafkacontroller_activecontrollercount{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Active Controllers", + "type": "stat" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Unclean leader election rate", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#299c46", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 2 + }, + { + "color": "#d44a3a" + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 6, + "y": 0 + }, + "id": 38, + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(irate(kafka_controller_controllerstats_uncleanleaderelections_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"}[5m]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Unclean Leader Election Rate", + "type": "stat" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Replicas that are online", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#d44a3a", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 0 + }, + { + "color": "#299c46", + "value": 0 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 9, + "y": 0 + }, + "id": 40, + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(kafka_server_replicamanager_partitioncount{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Online Replicas", + "type": "stat" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Number of under-replicated partitions (| ISR | < | all replicas |).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#508642", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 1 + }, + { + "color": "#bf1b00", + "value": 5 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 12, + "y": 0 + }, + "id": 30, + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(kafka_server_replicamanager_underreplicatedpartitions{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "refId": "A" + } + ], + "title": "Under Replicated Partitions", + "type": "stat" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Number of partitions which are at their minimum in sync replica count (| ISR | == | min.insync.replicas |)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "color": "#508642", + "text": "0" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#508642", + "value": null + }, + { + "color": "#ef843c", + "value": 1 + }, + { + "color": "#bf1b00", + "value": 5 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 15, + "y": 0 + }, + "id": 102, + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(kafka_cluster_partition_atminisr{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "refId": "A" + } + ], + "title": "Partitions at minimum ISR", + "type": "stat" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Number of partitions which are under their minimum in sync replica count (| ISR | < | min.insync.replicas |)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "color": "#508642", + "text": "0" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#508642", + "value": null + }, + { + "color": "#ef843c", + "value": 1 + }, + { + "color": "#bf1b00", + "value": 1 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 18, + "y": 0 + }, + "id": 103, + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(kafka_cluster_partition_underminisr{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "refId": "A" + } + ], + "title": "Partitions under minimum ISR", + "type": "stat" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Number of partitions that don’t have an active leader and are hence not writable or readable", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#508642", + "value": null + }, + { + "color": "#ef843c", + "value": 1 + }, + { + "color": "#bf1b00", + "value": 1 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 21, + "y": 0 + }, + "id": 32, + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(kafka_controller_kafkacontroller_offlinepartitionscount{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Offline Partitions Count", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 4 + }, + "id": 28, + "panels": [], + "title": "Kafka", + "type": "row" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Kafka broker pods memory usage", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 5 + }, + "id": 82, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(container_memory_usage_bytes{namespace=\"$kubernetes_namespace\",pod=~\"$strimzi_cluster_name-$kafka_broker\",container=\"kafka\"}) by (pod)", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A" + } + ], + "title": "Memory Usage", + "type": "timeseries" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Aggregated Kafka broker pods CPU usage", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 5 + }, + "id": 81, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(rate(container_cpu_usage_seconds_total{namespace=\"$kubernetes_namespace\",pod=~\"$strimzi_cluster_name-$kafka_broker\",container=\"kafka\"}[5m])) by (pod)", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A" + } + ], + "title": "CPU Usage", + "type": "timeseries" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Kafka broker pods disk usage", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 5 + }, + "id": 83, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(kubelet_volume_stats_available_bytes{namespace=\"$kubernetes_namespace\",persistentvolumeclaim=~\"data(-[0-9]+)?-$strimzi_cluster_name-$kafka_broker\", persistentvolumeclaim!~\".*zookeeper(-[0-9]+)?$\"}) by (persistentvolumeclaim)", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{persistentvolumeclaim}}", + "refId": "A" + } + ], + "title": "Available Disk Space", + "type": "timeseries" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Open File Descriptors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 5 + }, + "id": 107, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(process_open_fds{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",container=\"kafka\"}) by (kubernetes_pod_name)", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{kubernetes_pod_name}}", + "refId": "A" + } + ], + "title": "Open File Descriptors", + "type": "timeseries" + }, + { + "datasource": "${DS_PROMETHEUS}", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 12 + }, + "id": 93, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(jvm_memory_used_bytes{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}) by (kubernetes_pod_name)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{kubernetes_pod_name}}", + "refId": "A" + } + ], + "title": "JVM Memory Used", + "type": "timeseries" + }, + { + "datasource": "${DS_PROMETHEUS}", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 12 + }, + "id": 95, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(rate(jvm_gc_collection_seconds_sum{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}[5m])) by (kubernetes_pod_name)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{kubernetes_pod_name}}", + "refId": "A" + } + ], + "title": "JVM GC Time", + "type": "timeseries" + }, + { + "datasource": "${DS_PROMETHEUS}", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 12 + }, + "id": 97, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(rate(jvm_gc_collection_seconds_count{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}[5m])) by (kubernetes_pod_name)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{kubernetes_pod_name}}", + "refId": "A" + } + ], + "title": "JVM GC Count", + "type": "timeseries" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "JVM thread count", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 12 + }, + "id": 108, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(jvm_threads_current{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}) by (kubernetes_pod_name)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{kubernetes_pod_name}}", + "refId": "A" + } + ], + "title": "JVM Thread Count", + "type": "timeseries" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Total incoming byte rate", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "color": "rgba(237, 129, 40, 0.89)", + "text": "0" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#d44a3a", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 0 + }, + { + "color": "#299c46", + "value": 2 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 0, + "y": 19 + }, + "id": 98, + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(irate(kafka_server_brokertopicmetrics_bytesin_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Incoming Byte Rate", + "type": "stat" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Total outgoing byte rate", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "color": "rgba(237, 129, 40, 0.89)", + "text": "0" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#d44a3a", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 0 + }, + { + "color": "#299c46", + "value": 2 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 6, + "y": 19 + }, + "id": 99, + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(irate(kafka_server_brokertopicmetrics_bytesout_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Outgoing Byte Rate", + "type": "stat" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Incoming messages rate", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "color": "rgba(237, 129, 40, 0.89)", + "text": "0" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#d44a3a", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 0 + }, + { + "color": "#299c46", + "value": 2 + } + ] + }, + "unit": "wps" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 12, + "y": 19 + }, + "id": 100, + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(irate(kafka_server_brokertopicmetrics_messagesin_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Incoming Messages Rate", + "type": "stat" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Total produce request rate", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "color": "rgba(237, 129, 40, 0.89)", + "text": "0" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#d44a3a", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 0 + }, + { + "color": "#299c46", + "value": 2 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 18, + "y": 19 + }, + "id": 101, + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(irate(kafka_server_brokertopicmetrics_totalproducerequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Produce Request Rate", + "type": "stat" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Byte rate", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 23 + }, + "id": 44, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(irate(kafka_server_brokertopicmetrics_bytesin_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Total Incoming Byte Rate", + "refId": "A" + }, + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(irate(kafka_server_brokertopicmetrics_bytesout_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Total Outgoing Byte Rate", + "refId": "B" + } + ], + "title": "Byte Rate", + "type": "timeseries" + }, + { + "datasource": "${DS_PROMETHEUS}", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 23 + }, + "id": 58, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(irate(kafka_server_brokertopicmetrics_messagesin_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Total Incoming Messages Rate", + "refId": "D" + } + ], + "title": "Messages In Per Second", + "type": "timeseries" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Produce request rate", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 31 + }, + "id": 50, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(irate(kafka_server_brokertopicmetrics_totalproducerequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Total Produce Request Rate", + "refId": "A" + }, + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(irate(kafka_server_brokertopicmetrics_failedproducerequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Failed Produce Request Rate", + "refId": "B" + } + ], + "title": "Produce Request Rate", + "type": "timeseries" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Fetch request rate", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 31 + }, + "id": 56, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(irate(kafka_server_brokertopicmetrics_totalfetchrequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Fetch Request Rate", + "refId": "A" + }, + { + "datasource": "${DS_PROMETHEUS}", + "expr": " sum(irate(kafka_server_brokertopicmetrics_failedfetchrequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Failed Fetch Request Rate", + "refId": "B" + } + ], + "title": "Fetch Request Rate", + "type": "timeseries" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Average percentage of time network processor is idle", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 39 + }, + "id": 60, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(kafka_network_socketserver_networkprocessoravgidle_percent{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}*100) by (kubernetes_pod_name)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{kubernetes_pod_name}}", + "refId": "A" + } + ], + "title": "Network Processor Avg Idle Percent", + "type": "timeseries" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Average percentage of time request handler threads are idle", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 39 + }, + "id": 62, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(kafka_server_kafkarequesthandlerpool_requesthandleravgidle_percent{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}*100) by (kubernetes_pod_name)", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{kubernetes_pod_name}}", + "refId": "A" + } + ], + "title": "Request Handler Avg Idle Percent", + "type": "timeseries" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Disk writes", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 47 + }, + "id": 104, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(irate(kafka_server_kafkaserver_linux_disk_write_bytes{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m])) by (kubernetes_pod_name)", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{kubernetes_pod_name}}", + "refId": "A" + } + ], + "title": "Disk Writes", + "type": "timeseries" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Disk reads", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 47 + }, + "id": 105, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(irate(kafka_server_kafkaserver_linux_disk_read_bytes{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m])) by (kubernetes_pod_name)", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{kubernetes_pod_name}}", + "refId": "A" + } + ], + "title": "Disk Reads", + "type": "timeseries" + }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "Disk reads", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 47 + }, + "id": 106, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(kafka_server_socket_server_metrics_connection_count{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}) by (kubernetes_pod_name, listener)", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{listener}}-{{kubernetes_pod_name}}", + "refId": "A" + } + ], + "title": "Connection Count per Listener", + "type": "timeseries" + }, + { + "datasource": "${DS_PROMETHEUS}", + "fieldConfig": { + "defaults": { + "custom": { + "cellOptions": { + "type": "auto" + }, + "filterable": true, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Log Size" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 55 + }, + "id": 91, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "expr": "kafka_log_log_size{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",topic=~\"$kafka_topic\",partition=~\"$kafka_partition\"}", + "format": "table", + "instant": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{topic}}:{{partition}}", + "refId": "A" + } + ], + "title": "Log Size", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "__name__": true, + "container": true, + "endpoint": true, + "instance": true, + "job": true, + "kubernetes_pod_name": true, + "namespace": true, + "node_ip": true, + "node_name": true, + "pod": true, + "strimzi_io_broker_role": true, + "strimzi_io_cluster": true, + "strimzi_io_component_type": true, + "strimzi_io_controller": true, + "strimzi_io_controller_name": true, + "strimzi_io_controller_role": true, + "strimzi_io_kind": true, + "strimzi_io_name": true, + "strimzi_io_pod_name": true, + "strimzi_io_pool_name": true + }, + "indexByName": { + "Time": 0, + "Value": 23, + "__name__": 1, + "container": 3, + "endpoint": 4, + "instance": 5, + "job": 6, + "kubernetes_pod_name": 7, + "namespace": 8, + "node_ip": 9, + "node_name": 10, + "partition": 11, + "pod": 12, + "strimzi_io_broker_role": 13, + "strimzi_io_cluster": 14, + "strimzi_io_component_type": 15, + "strimzi_io_controller": 16, + "strimzi_io_controller_name": 17, + "strimzi_io_controller_role": 18, + "strimzi_io_kind": 19, + "strimzi_io_name": 20, + "strimzi_io_pod_name": 21, + "strimzi_io_pool_name": 22, + "topic": 2 + }, + "renameByName": { + "Value": "Log Size", + "partition": "Partition", + "strimzi_io_name": "", + "topic": "Topic" + } + } + } + ], + "type": "table" + }, + { + "datasource": "${DS_PROMETHEUS}", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "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": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 55 + }, + "id": 110, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": "${DS_PROMETHEUS}", + "expr": "sum(kafka_server_zookeeperclientmetrics_zookeeperrequestlatencyms{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}) by (kubernetes_pod_name)", + "format": "time_series", + "instant": false, + "intervalFactor": 1, + "legendFormat": "{{kubernetes_pod_name}}", + "refId": "A" + } + ], + "title": "ZK request latecy", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "5s", + "schemaVersion": 40, + "tags": [ + "Strimzi", + "Kafka" + ], + "templating": { + "list": [ + { + "current": { + "text": "vm-shortterm", + "value": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "includeAll": false, + "label": "datasource", + "name": "DS_PROMETHEUS", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "current": { + "text": "tenant-kafkamonitors", + "value": "tenant-kafkamonitors" + }, + "datasource": "${DS_PROMETHEUS}", + "definition": "", + "includeAll": false, + "label": "Namespace", + "name": "kubernetes_namespace", + "options": [], + "query": "query_result(kafka_server_replicamanager_leadercount)", + "refresh": 1, + "regex": "/.*namespace=\"([^\"]*).*/", + "type": "query" + }, + { + "current": { + "text": "kafka-asdf", + "value": "kafka-asdf" + }, + "datasource": "${DS_PROMETHEUS}", + "definition": "", + "includeAll": false, + "label": "Cluster Name", + "name": "strimzi_cluster_name", + "options": [], + "query": "query_result(kafka_server_replicamanager_leadercount{namespace=\"$kubernetes_namespace\"})", + "refresh": 1, + "regex": "/.*strimzi_io_cluster=\"([^\"]*).*/", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": "${DS_PROMETHEUS}", + "definition": "", + "includeAll": true, + "label": "Broker", + "name": "kafka_broker", + "options": [], + "query": "query_result(kafka_server_replicamanager_leadercount{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})", + "refresh": 1, + "regex": "/.*pod_name=\"$strimzi_cluster_name-([^\"]*).*/", + "type": "query" + }, + { + "allValue": ".+", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": "${DS_PROMETHEUS}", + "definition": "", + "includeAll": true, + "label": "Topic", + "name": "kafka_topic", + "options": [], + "query": "query_result(kafka_cluster_partition_replicascount{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"})", + "refresh": 1, + "regex": "/.*topic=\"([^\"]*).*/", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": "${DS_PROMETHEUS}", + "definition": "", + "includeAll": true, + "label": "Partition", + "multi": true, + "name": "kafka_partition", + "options": [], + "query": "query_result(kafka_log_log_size{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",topic=~\"$kafka_topic\"})", + "refresh": 1, + "regex": "/.*partition=\"([^\"]*).*/", + "sort": 3, + "type": "query" + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Strimzi Kafka", + "uid": "66bebec5-5861-4e4a-b4ad-b0634928e946", + "version": 5, + "weekStart": "" +} diff --git a/hack/download-dashboards.sh b/hack/download-dashboards.sh index e3a2ed53..61d2ad5d 100755 --- a/hack/download-dashboards.sh +++ b/hack/download-dashboards.sh @@ -80,6 +80,7 @@ modules/340-monitoring-kubernetes/monitoring/grafana-dashboards//main/namespace/ modules/340-monitoring-kubernetes/monitoring/grafana-dashboards//main/capacity-planning/capacity-planning.json modules/340-monitoring-kubernetes/monitoring/grafana-dashboards//flux/flux-control-plane.json modules/340-monitoring-kubernetes/monitoring/grafana-dashboards//flux/flux-stats.json +modules/340-monitoring-kubernetes/monitoring/grafana-dashboards//kafka/strimzi-kafka.json EOT diff --git a/packages/apps/kafka/Chart.yaml b/packages/apps/kafka/Chart.yaml index ef5ef5fa..ec425b02 100644 --- a/packages/apps/kafka/Chart.yaml +++ b/packages/apps/kafka/Chart.yaml @@ -16,7 +16,7 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.3.1 +version: 0.3.2 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to diff --git a/packages/apps/kafka/templates/kafka.yaml b/packages/apps/kafka/templates/kafka.yaml index eed36f63..0134ca5a 100644 --- a/packages/apps/kafka/templates/kafka.yaml +++ b/packages/apps/kafka/templates/kafka.yaml @@ -57,6 +57,12 @@ spec: class: {{ . }} {{- end }} deleteClaim: true + metricsConfig: + type: jmxPrometheusExporter + valueFrom: + configMapKeyRef: + name: {{ .Release.Name }}-metrics + key: kafka-metrics-config.yml zookeeper: replicas: {{ .Values.zookeeper.replicas }} storage: @@ -68,6 +74,12 @@ spec: class: {{ . }} {{- end }} deleteClaim: false + metricsConfig: + type: jmxPrometheusExporter + valueFrom: + configMapKeyRef: + name: {{ .Release.Name }}-metrics + key: kafka-metrics-config.yml entityOperator: topicOperator: {} userOperator: {} diff --git a/packages/apps/kafka/templates/metrics-configmap.yaml b/packages/apps/kafka/templates/metrics-configmap.yaml new file mode 100644 index 00000000..da2a15da --- /dev/null +++ b/packages/apps/kafka/templates/metrics-configmap.yaml @@ -0,0 +1,198 @@ +kind: ConfigMap +apiVersion: v1 +metadata: + name: {{ .Release.Name }}-metrics +data: + kafka-metrics-config.yml: | + # See https://github.com/prometheus/jmx_exporter for more info about JMX Prometheus Exporter metrics + lowercaseOutputName: true + rules: + # Special cases and very specific rules + - pattern: kafka.server<>Value + name: kafka_server_$1_$2 + type: GAUGE + labels: + clientId: "$3" + topic: "$4" + partition: "$5" + - pattern: kafka.server<>Value + name: kafka_server_$1_$2 + type: GAUGE + labels: + clientId: "$3" + broker: "$4:$5" + - pattern: kafka.server<>connections + name: kafka_server_$1_connections_tls_info + type: GAUGE + labels: + cipher: "$2" + protocol: "$3" + listener: "$4" + networkProcessor: "$5" + - pattern: kafka.server<>connections + name: kafka_server_$1_connections_software + type: GAUGE + labels: + clientSoftwareName: "$2" + clientSoftwareVersion: "$3" + listener: "$4" + networkProcessor: "$5" + - pattern: "kafka.server<>(.+-total):" + name: kafka_server_$1_$4 + type: COUNTER + labels: + listener: "$2" + networkProcessor: "$3" + - pattern: "kafka.server<>(.+):" + name: kafka_server_$1_$4 + type: GAUGE + labels: + listener: "$2" + networkProcessor: "$3" + - pattern: kafka.server<>(.+-total) + name: kafka_server_$1_$4 + type: COUNTER + labels: + listener: "$2" + networkProcessor: "$3" + - pattern: kafka.server<>(.+) + name: kafka_server_$1_$4 + type: GAUGE + labels: + listener: "$2" + networkProcessor: "$3" + # Some percent metrics use MeanRate attribute + # Ex) kafka.server<>MeanRate + - pattern: kafka.(\w+)<>MeanRate + name: kafka_$1_$2_$3_percent + type: GAUGE + # Generic gauges for percents + - pattern: kafka.(\w+)<>Value + name: kafka_$1_$2_$3_percent + type: GAUGE + - pattern: kafka.(\w+)<>Value + name: kafka_$1_$2_$3_percent + type: GAUGE + labels: + "$4": "$5" + # Generic per-second counters with 0-2 key/value pairs + - pattern: kafka.(\w+)<>Count + name: kafka_$1_$2_$3_total + type: COUNTER + labels: + "$4": "$5" + "$6": "$7" + - pattern: kafka.(\w+)<>Count + name: kafka_$1_$2_$3_total + type: COUNTER + labels: + "$4": "$5" + - pattern: kafka.(\w+)<>Count + name: kafka_$1_$2_$3_total + type: COUNTER + # Generic gauges with 0-2 key/value pairs + - pattern: kafka.(\w+)<>Value + name: kafka_$1_$2_$3 + type: GAUGE + labels: + "$4": "$5" + "$6": "$7" + - pattern: kafka.(\w+)<>Value + name: kafka_$1_$2_$3 + type: GAUGE + labels: + "$4": "$5" + - pattern: kafka.(\w+)<>Value + name: kafka_$1_$2_$3 + type: GAUGE + # Emulate Prometheus 'Summary' metrics for the exported 'Histogram's. + # Note that these are missing the '_sum' metric! + - pattern: kafka.(\w+)<>Count + name: kafka_$1_$2_$3_count + type: COUNTER + labels: + "$4": "$5" + "$6": "$7" + - pattern: kafka.(\w+)<>(\d+)thPercentile + name: kafka_$1_$2_$3 + type: GAUGE + labels: + "$4": "$5" + "$6": "$7" + quantile: "0.$8" + - pattern: kafka.(\w+)<>Count + name: kafka_$1_$2_$3_count + type: COUNTER + labels: + "$4": "$5" + - pattern: kafka.(\w+)<>(\d+)thPercentile + name: kafka_$1_$2_$3 + type: GAUGE + labels: + "$4": "$5" + quantile: "0.$6" + - pattern: kafka.(\w+)<>Count + name: kafka_$1_$2_$3_count + type: COUNTER + - pattern: kafka.(\w+)<>(\d+)thPercentile + name: kafka_$1_$2_$3 + type: GAUGE + labels: + quantile: "0.$4" + # KRaft overall related metrics + # distinguish between always increasing COUNTER (total and max) and variable GAUGE (all others) metrics + - pattern: "kafka.server<>(.+-total|.+-max):" + name: kafka_server_raftmetrics_$1 + type: COUNTER + - pattern: "kafka.server<>(current-state): (.+)" + name: kafka_server_raftmetrics_$1 + value: 1 + type: UNTYPED + labels: + $1: "$2" + - pattern: "kafka.server<>(.+):" + name: kafka_server_raftmetrics_$1 + type: GAUGE + # KRaft "low level" channels related metrics + # distinguish between always increasing COUNTER (total and max) and variable GAUGE (all others) metrics + - pattern: "kafka.server<>(.+-total|.+-max):" + name: kafka_server_raftchannelmetrics_$1 + type: COUNTER + - pattern: "kafka.server<>(.+):" + name: kafka_server_raftchannelmetrics_$1 + type: GAUGE + # Broker metrics related to fetching metadata topic records in KRaft mode + - pattern: "kafka.server<>(.+):" + name: kafka_server_brokermetadatametrics_$1 + type: GAUGE + zookeeper-metrics-config.yml: | + # See https://github.com/prometheus/jmx_exporter for more info about JMX Prometheus Exporter metrics + lowercaseOutputName: true + rules: + # replicated Zookeeper + - pattern: "org.apache.ZooKeeperService<>(\\w+)" + name: "zookeeper_$2" + type: GAUGE + - pattern: "org.apache.ZooKeeperService<>(\\w+)" + name: "zookeeper_$3" + type: GAUGE + labels: + replicaId: "$2" + - pattern: "org.apache.ZooKeeperService<>(Packets\\w+)" + name: "zookeeper_$4" + type: COUNTER + labels: + replicaId: "$2" + memberType: "$3" + - pattern: "org.apache.ZooKeeperService<>(\\w+)" + name: "zookeeper_$4" + type: GAUGE + labels: + replicaId: "$2" + memberType: "$3" + - pattern: "org.apache.ZooKeeperService<>(\\w+)" + name: "zookeeper_$4_$5" + type: GAUGE + labels: + replicaId: "$2" + memberType: "$3" diff --git a/packages/apps/kafka/templates/podscrape.yaml b/packages/apps/kafka/templates/podscrape.yaml new file mode 100644 index 00000000..bbbf2916 --- /dev/null +++ b/packages/apps/kafka/templates/podscrape.yaml @@ -0,0 +1,40 @@ +apiVersion: operator.victoriametrics.com/v1beta1 +kind: VMPodScrape +metadata: + name: {{ .Release.Name }}-pod-scrape +spec: + podMetricsEndpoints: + - port: tcp-prometheus + scheme: http + relabelConfigs: + - separator: ; + regex: __meta_kubernetes_pod_label_(strimzi_io_.+) + replacement: $1 + action: labelmap + - sourceLabels: [__meta_kubernetes_namespace] + separator: ; + regex: (.*) + targetLabel: namespace + replacement: $1 + action: replace + - sourceLabels: [__meta_kubernetes_pod_name] + separator: ; + regex: (.*) + targetLabel: kubernetes_pod_name + replacement: $1 + action: replace + - sourceLabels: [__meta_kubernetes_pod_node_name] + separator: ; + regex: (.*) + targetLabel: node_name + replacement: $1 + action: replace + - sourceLabels: [__meta_kubernetes_pod_host_ip] + separator: ; + regex: (.*) + targetLabel: node_ip + replacement: $1 + action: replace + selector: + matchLabels: + app.kubernetes.io/instance: {{ .Release.Name }} diff --git a/packages/apps/versions_map b/packages/apps/versions_map index e9e597cc..85c0ded7 100644 --- a/packages/apps/versions_map +++ b/packages/apps/versions_map @@ -23,7 +23,8 @@ kafka 0.2.1 3ac17018 kafka 0.2.2 d0758692 kafka 0.2.3 5ca8823 kafka 0.3.0 c07c4bbd -kafka 0.3.1 HEAD +kafka 0.3.1 b7375f73 +kafka 0.3.2 HEAD kubernetes 0.1.0 f642698 kubernetes 0.2.0 7cd7de73 kubernetes 0.3.0 7caccec1 diff --git a/packages/extra/monitoring/dashboards.list b/packages/extra/monitoring/dashboards.list index 8c1c8ab5..0de7bfd6 100644 --- a/packages/extra/monitoring/dashboards.list +++ b/packages/extra/monitoring/dashboards.list @@ -34,3 +34,4 @@ control-plane/kube-etcd kubevirt/kubevirt-control-plane flux/flux-control-plane flux/flux-stats +kafka/strimzi-kafka diff --git a/packages/system/kafka-operator/templates/prometheus-rules.yaml b/packages/system/kafka-operator/templates/prometheus-rules.yaml new file mode 100644 index 00000000..bc4d6f46 --- /dev/null +++ b/packages/system/kafka-operator/templates/prometheus-rules.yaml @@ -0,0 +1,275 @@ +apiVersion: monitoring.coreos.com/v1 +kind: PrometheusRule +metadata: + labels: + role: alert-rules + app: strimzi + name: prometheus-kafka-rules +spec: + groups: + - name: kafka + rules: + - alert: KafkaRunningOutOfSpace + expr: kubelet_volume_stats_available_bytes{persistentvolumeclaim=~"data(-[0-9]+)?-(.+)-kafka-[0-9]+"} * 100 / kubelet_volume_stats_capacity_bytes{persistentvolumeclaim=~"data(-[0-9]+)?-(.+)-kafka-[0-9]+"} < 15 + for: 10s + labels: + severity: warning + annotations: + summary: 'Kafka is running out of free disk space' + description: 'There are only {{ $value }} percent available at {{ $labels.persistentvolumeclaim }} PVC' + - alert: UnderReplicatedPartitions + expr: kafka_server_replicamanager_underreplicatedpartitions > 0 + for: 10s + labels: + severity: warning + annotations: + summary: 'Kafka under replicated partitions' + description: 'There are {{ $value }} under replicated partitions on {{ $labels.kubernetes_pod_name }}' + - alert: AbnormalControllerState + expr: sum(kafka_controller_kafkacontroller_activecontrollercount) by (strimzi_io_name) != 1 + for: 10s + labels: + severity: warning + annotations: + summary: 'Kafka abnormal controller state' + description: 'There are {{ $value }} active controllers in the cluster' + - alert: OfflinePartitions + expr: sum(kafka_controller_kafkacontroller_offlinepartitionscount) > 0 + for: 10s + labels: + severity: warning + annotations: + summary: 'Kafka offline partitions' + description: 'One or more partitions have no leader' + - alert: UnderMinIsrPartitionCount + expr: kafka_server_replicamanager_underminisrpartitioncount > 0 + for: 10s + labels: + severity: warning + annotations: + summary: 'Kafka under min ISR partitions' + description: 'There are {{ $value }} partitions under the min ISR on {{ $labels.kubernetes_pod_name }}' + - alert: OfflineLogDirectoryCount + expr: kafka_log_logmanager_offlinelogdirectorycount > 0 + for: 10s + labels: + severity: warning + annotations: + summary: 'Kafka offline log directories' + description: 'There are {{ $value }} offline log directories on {{ $labels.kubernetes_pod_name }}' + - alert: ScrapeProblem + expr: up{kubernetes_namespace!~"openshift-.+",kubernetes_pod_name=~".+-kafka-[0-9]+"} == 0 + for: 3m + labels: + severity: major + annotations: + summary: 'Prometheus unable to scrape metrics from {{ $labels.kubernetes_pod_name }}/{{ $labels.instance }}' + description: 'Prometheus was unable to scrape metrics from {{ $labels.kubernetes_pod_name }}/{{ $labels.instance }} for more than 3 minutes' + - alert: ClusterOperatorContainerDown + expr: count((container_last_seen{container="strimzi-cluster-operator"} > (time() - 90))) < 1 or absent(container_last_seen{container="strimzi-cluster-operator"}) + for: 1m + labels: + severity: major + annotations: + summary: 'Cluster Operator down' + description: 'The Cluster Operator has been down for longer than 90 seconds' + - alert: KafkaBrokerContainersDown + expr: absent(container_last_seen{container="kafka",pod=~".+-kafka-[0-9]+"}) + for: 3m + labels: + severity: major + annotations: + summary: 'All `kafka` containers down or in CrashLookBackOff status' + description: 'All `kafka` containers have been down or in CrashLookBackOff status for 3 minutes' + - alert: KafkaContainerRestartedInTheLast5Minutes + expr: count(count_over_time(container_last_seen{container="kafka"}[5m])) > 2 * count(container_last_seen{container="kafka",pod=~".+-kafka-[0-9]+"}) + for: 5m + labels: + severity: warning + annotations: + summary: 'One or more Kafka containers restarted too often' + description: 'One or more Kafka containers were restarted too often within the last 5 minutes' + - name: zookeeper + rules: + - alert: AvgRequestLatency + expr: zookeeper_avgrequestlatency > 10 + for: 10s + labels: + severity: warning + annotations: + summary: 'Zookeeper average request latency' + description: 'The average request latency is {{ $value }} on {{ $labels.kubernetes_pod_name }}' + - alert: OutstandingRequests + expr: zookeeper_outstandingrequests > 10 + for: 10s + labels: + severity: warning + annotations: + summary: 'Zookeeper outstanding requests' + description: 'There are {{ $value }} outstanding requests on {{ $labels.kubernetes_pod_name }}' + - alert: ZookeeperRunningOutOfSpace + expr: kubelet_volume_stats_available_bytes{persistentvolumeclaim=~"data-(.+)-zookeeper-[0-9]+"} < 5368709120 + for: 10s + labels: + severity: warning + annotations: + summary: 'Zookeeper is running out of free disk space' + description: 'There are only {{ $value }} bytes available at {{ $labels.persistentvolumeclaim }} PVC' + - alert: ZookeeperContainerRestartedInTheLast5Minutes + expr: count(count_over_time(container_last_seen{container="zookeeper"}[5m])) > 2 * count(container_last_seen{container="zookeeper",pod=~".+-zookeeper-[0-9]+"}) + for: 5m + labels: + severity: warning + annotations: + summary: 'One or more Zookeeper containers were restarted too often' + description: 'One or more Zookeeper containers were restarted too often within the last 5 minutes. This alert can be ignored when the Zookeeper cluster is scaling up' + - alert: ZookeeperContainersDown + expr: absent(container_last_seen{container="zookeeper",pod=~".+-zookeeper-[0-9]+"}) + for: 3m + labels: + severity: major + annotations: + summary: 'All `zookeeper` containers in the Zookeeper pods down or in CrashLookBackOff status' + description: 'All `zookeeper` containers in the Zookeeper pods have been down or in CrashLookBackOff status for 3 minutes' + - name: entityOperator + rules: + - alert: TopicOperatorContainerDown + expr: absent(container_last_seen{container="topic-operator",pod=~".+-entity-operator-.+"}) + for: 3m + labels: + severity: major + annotations: + summary: 'Container topic-operator in Entity Operator pod down or in CrashLookBackOff status' + description: 'Container topic-operator in Entity Operator pod has been or in CrashLookBackOff status for 3 minutes' + - alert: UserOperatorContainerDown + expr: absent(container_last_seen{container="user-operator",pod=~".+-entity-operator-.+"}) + for: 3m + labels: + severity: major + annotations: + summary: 'Container user-operator in Entity Operator pod down or in CrashLookBackOff status' + description: 'Container user-operator in Entity Operator pod have been down or in CrashLookBackOff status for 3 minutes' + - name: connect + rules: + - alert: ConnectContainersDown + expr: absent(container_last_seen{container=~".+-connect",pod=~".+-connect-.+"}) + for: 3m + labels: + severity: major + annotations: + summary: 'All Kafka Connect containers down or in CrashLookBackOff status' + description: 'All Kafka Connect containers have been down or in CrashLookBackOff status for 3 minutes' + - alert: ConnectFailedConnector + expr: sum(kafka_connect_connector_status{status="failed"}) > 0 + for: 5m + labels: + severity: major + annotations: + summary: 'Kafka Connect Connector Failure' + description: 'One or more connectors have been in failed state for 5 minutes,' + - alert: ConnectFailedTask + expr: sum(kafka_connect_worker_connector_failed_task_count) > 0 + for: 5m + labels: + severity: major + annotations: + summary: 'Kafka Connect Task Failure' + description: 'One or more tasks have been in failed state for 5 minutes.' + - name: bridge + rules: + - alert: BridgeContainersDown + expr: absent(container_last_seen{container=~".+-bridge",pod=~".+-bridge-.+"}) + for: 3m + labels: + severity: major + annotations: + summary: 'All Kafka Bridge containers down or in CrashLookBackOff status' + description: 'All Kafka Bridge containers have been down or in CrashLookBackOff status for 3 minutes' + - alert: AvgProducerLatency + expr: strimzi_bridge_kafka_producer_request_latency_avg > 10 + for: 10s + labels: + severity: warning + annotations: + summary: 'Kafka Bridge producer average request latency' + description: 'The average producer request latency is {{ $value }} on {{ $labels.clientId }}' + - alert: AvgConsumerFetchLatency + expr: strimzi_bridge_kafka_consumer_fetch_latency_avg > 500 + for: 10s + labels: + severity: warning + annotations: + summary: 'Kafka Bridge consumer average fetch latency' + description: 'The average consumer fetch latency is {{ $value }} on {{ $labels.clientId }}' + - alert: AvgConsumerCommitLatency + expr: strimzi_bridge_kafka_consumer_commit_latency_avg > 200 + for: 10s + labels: + severity: warning + annotations: + summary: 'Kafka Bridge consumer average commit latency' + description: 'The average consumer commit latency is {{ $value }} on {{ $labels.clientId }}' + - alert: Http4xxErrorRate + expr: strimzi_bridge_http_server_requestCount_total{code=~"^4..$", container=~"^.+-bridge", path !="/favicon.ico"} > 10 + for: 1m + labels: + severity: warning + annotations: + summary: 'Kafka Bridge returns code 4xx too often' + description: 'Kafka Bridge returns code 4xx too much ({{ $value }}) for the path {{ $labels.path }}' + - alert: Http5xxErrorRate + expr: strimzi_bridge_http_server_requestCount_total{code=~"^5..$", container=~"^.+-bridge"} > 10 + for: 1m + labels: + severity: warning + annotations: + summary: 'Kafka Bridge returns code 5xx too often' + description: 'Kafka Bridge returns code 5xx too much ({{ $value }}) for the path {{ $labels.path }}' + - name: mirrorMaker + rules: + - alert: MirrorMakerContainerDown + expr: absent(container_last_seen{container=~".+-mirror-maker",pod=~".+-mirror-maker-.+"}) + for: 3m + labels: + severity: major + annotations: + summary: 'All Kafka Mirror Maker containers down or in CrashLookBackOff status' + description: 'All Kafka Mirror Maker containers have been down or in CrashLookBackOff status for 3 minutes' + - name: kafkaExporter + rules: + - alert: UnderReplicatedPartition + expr: kafka_topic_partition_under_replicated_partition > 0 + for: 10s + labels: + severity: warning + annotations: + summary: 'Topic has under-replicated partitions' + description: 'Topic {{ $labels.topic }} has {{ $value }} under-replicated partition {{ $labels.partition }}' + - alert: TooLargeConsumerGroupLag + expr: kafka_consumergroup_lag > 1000 + for: 10s + labels: + severity: warning + annotations: + summary: 'Consumer group lag is too big' + description: 'Consumer group {{ $labels.consumergroup}} lag is too big ({{ $value }}) on topic {{ $labels.topic }}/partition {{ $labels.partition }}' + - alert: NoMessageForTooLong + expr: changes(kafka_topic_partition_current_offset[10m]) == 0 + for: 10s + labels: + severity: warning + annotations: + summary: 'No message for 10 minutes' + description: 'There is no messages in topic {{ $labels.topic}}/partition {{ $labels.partition }} for 10 minutes' + - name: certificates + interval: 1m0s + rules: + - alert: CertificateExpiration + expr: | + strimzi_certificate_expiration_timestamp_ms/1000 - time() < 30 * 24 * 60 * 60 + for: 5m + labels: + severity: warning + annotations: + summary: 'Certificate will expire in less than 30 days' + description: 'Certificate of type {{ $labels.type }} in cluster {{ $labels.cluster }} in namespace {{ $labels.resource_namespace }} will expire in less than 30 days' From d234d58a166e8798299a3a207ba0b090a3806ec2 Mon Sep 17 00:00:00 2001 From: Floppy Disk Date: Mon, 10 Feb 2025 13:29:59 +0300 Subject: [PATCH 3/5] update kafka operator version --- .../charts/strimzi-kafka-operator/Chart.yaml | 4 +- .../charts/strimzi-kafka-operator/README.md | 25 +- .../crds/040-Crd-kafka.yaml | 610 ++++- .../crds/041-Crd-kafkaconnect.yaml | 188 +- .../crds/045-Crd-kafkamirrormaker.yaml | 63 +- .../crds/046-Crd-kafkabridge.yaml | 105 +- .../crds/047-Crd-kafkaconnector.yaml | 24 + .../crds/048-Crd-kafkamirrormaker2.yaml | 258 +- .../crds/049-Crd-kafkarebalance.yaml | 47 +- .../crds/04A-Crd-kafkanodepool.yaml | 2274 +++++++++-------- .../grafana-dashboards/strimzi-kraft.json | 95 +- ...-RoleBinding-strimzi-cluster-operator.yaml | 6 +- ...terRole-strimzi-cluster-operator-role.yaml | 7 + ...-RoleBinding-strimzi-cluster-operator.yaml | 8 +- ...r-operator-entity-operator-delegation.yaml | 8 +- ...0-Deployment-strimzi-cluster-operator.yaml | 4 + .../templates/_kafka_image_map.tpl | 20 +- .../charts/strimzi-kafka-operator/values.yaml | 8 +- 18 files changed, 2597 insertions(+), 1157 deletions(-) diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/Chart.yaml b/packages/system/kafka-operator/charts/strimzi-kafka-operator/Chart.yaml index 9b05f6b5..f6974bed 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/Chart.yaml +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 -appVersion: 0.43.0 +appVersion: 0.45.0 description: 'Strimzi: Apache Kafka running on Kubernetes' home: https://strimzi.io/ icon: https://raw.githubusercontent.com/strimzi/strimzi-kafka-operator/main/documentation/logo/strimzi_logo.png @@ -24,4 +24,4 @@ maintainers: name: strimzi-kafka-operator sources: - https://github.com/strimzi/strimzi-kafka-operator -version: 0.43.0 +version: 0.45.0 diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/README.md b/packages/system/kafka-operator/charts/strimzi-kafka-operator/README.md index a725ddea..e66e9fd7 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/README.md +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/README.md @@ -5,12 +5,15 @@ Strimzi provides a way to run an [Apache Kafka®](https://kafka.apache.org) clus See our [website](https://strimzi.io) for more details about the project. **!!! IMPORTANT !!!** -Upgrading to Strimzi 0.32 and newer directly from Strimzi 0.22 and earlier is no longer possible. -Please follow the [documentation](https://strimzi.io/docs/operators/latest/full/deploying.html#assembly-upgrade-str) for more details. -**!!! IMPORTANT !!!** -Strimzi 0.43.0 (and any of its patch releases) is the last Strimzi version with support for Kubernetes 1.23 and 1.24. -From Strimzi 0.44.0 on, Strimzi will support only Kubernetes 1.25 and newer. +* **Strimzi 0.45 is the last Strimzi version with support for ZooKeeper-based Apache Kafka clusters and MirrorMaker 1 deployments.** + **Please make sure to [migrate to KRaft](https://strimzi.io/docs/operators/latest/full/deploying.html#assembly-kraft-mode-str) and MirrorMaker 2 before upgrading to Strimzi 0.46 or newer.** +* Strimzi 0.45 is the last Strimzi version to include the [Strimzi EnvVar Configuration Provider](https://github.com/strimzi/kafka-env-var-config-provider) (deprecated in Strimzi 0.38.0) and [Strimzi MirrorMaker 2 Extensions](https://github.com/strimzi/mirror-maker-2-extensions) (deprecated in Strimzi 0.28.0). + Please use the Apache Kafka [EnvVarConfigProvider](https://github.com/strimzi/kafka-env-var-config-provider?tab=readme-ov-file#deprecation-notice) and [Identity Replication Policy](https://github.com/strimzi/mirror-maker-2-extensions?tab=readme-ov-file#identity-replication-policy) instead. +* From Strimzi 0.44.0 on, we support only Kubernetes 1.25 and newer. + Kubernetes 1.23 and 1.24 are not supported anymore. +* Upgrading to Strimzi 0.32 and newer directly from Strimzi 0.22 and earlier is no longer possible. + Please follow the [documentation](https://strimzi.io/docs/operators/latest/full/deploying.html#assembly-upgrade-str) for more details. ## Introduction @@ -21,14 +24,16 @@ cluster using the [Helm](https://helm.sh) package manager. ### Supported Features * **Manages the Kafka Cluster** - Deploys and manages all of the components of this complex application, including dependencies like Apache ZooKeeper® that are traditionally hard to administer. -* **KRaft support** - Allows running Apache Kafka clusters in the KRaft mode (without ZooKeeper). +* **KRaft support** - Allows running Apache Kafka clusters in the KRaft mode (without ZooKeeper). * **Includes Kafka Connect** - Allows for configuration of common data sources and sinks to move data into and out of the Kafka cluster. * **Topic Management** - Creates and manages Kafka Topics within the cluster. * **User Management** - Creates and manages Kafka Users within the cluster. * **Connector Management** - Creates and manages Kafka Connect connectors. -* **Includes Kafka Mirror Maker 1 and 2** - Allows for mirroring data between different Apache Kafka® clusters. +* **Includes Kafka MirrorMaker** - Allows for mirroring data between different Apache Kafka® clusters. * **Includes HTTP Kafka Bridge** - Allows clients to send and receive messages through an Apache Kafka® cluster via the HTTP protocol. * **Includes Cruise Control** - Automates the process of balancing partitions across an Apache Kafka® cluster. +* **Auto-rebalancing when scaling** - Automatically rebalance the Kafka cluster after a scale-up or before a scale-down. +* **Tiered storage** - Offloads older, less critical data to a lower-cost, lower-performance storage tier, such as object storage. * **Prometheus monitoring** - Built-in support for monitoring using Prometheus. * **Grafana Dashboards** - Built-in support for loading Grafana® dashboards via the grafana_sidecar @@ -60,7 +65,7 @@ Strimzi is licensed under the [Apache License, Version 2.0](https://github.com/s ## Prerequisites -- Kubernetes 1.23+ +- Kubernetes 1.25+ ## Installing the Chart @@ -97,7 +102,7 @@ the documentation for more details. | `watchAnyNamespace` | Watch the whole Kubernetes cluster (all namespaces) | `false` | | `defaultImageRegistry` | Default image registry for all the images | `quay.io` | | `defaultImageRepository` | Default image registry for all the images | `strimzi` | -| `defaultImageTag` | Default image tag for all the images except Kafka Bridge | `0.43.0` | +| `defaultImageTag` | Default image tag for all the images except Kafka Bridge | `0.45.0` | | `image.registry` | Override default Cluster Operator image registry | `nil` | | `image.repository` | Override default Cluster Operator image repository | `nil` | | `image.name` | Cluster Operator image name | `cluster-operator` | @@ -161,7 +166,7 @@ the documentation for more details. | `kafkaBridge.image.registry` | Override default Kafka Bridge image registry | `quay.io` | | `kafkaBridge.image.repository` | Override default Kafka Bridge image repository | `strimzi` | | `kafkaBridge.image.name` | Kafka Bridge image name | `kafka-bridge` | -| `kafkaBridge.image.tag` | Override default Kafka Bridge image tag | `0.30.0` | +| `kafkaBridge.image.tag` | Override default Kafka Bridge image tag | `0.31.1` | | `kafkaBridge.image.digest` | Override Kafka Bridge image tag with digest | `nil` | | `kafkaExporter.image.registry` | Override default Kafka Exporter image registry | `nil` | | `kafkaExporter.image.repository` | Override default Kafka Exporter image repository | `nil` | diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/040-Crd-kafka.yaml b/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/040-Crd-kafka.yaml index 166ebe3d..a5d0bb9e 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/040-Crd-kafka.yaml +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/040-Crd-kafka.yaml @@ -480,6 +480,18 @@ spec: publishNotReadyAddresses: type: boolean description: Configures whether the service endpoints are considered "ready" even if the Pods themselves are not. Defaults to `false`. This field can not be used with `internal` listeners. + hostTemplate: + type: string + description: "Configures the template for generating the hostnames of the individual brokers. Valid placeholders that you can use in the template are `{nodeId}` and `{nodePodName}`." + advertisedHostTemplate: + type: string + description: "Configures the template for generating the advertised hostnames of the individual brokers. Valid placeholders that you can use in the template are `{nodeId}` and `{nodePodName}`." + allocateLoadBalancerNodePorts: + type: boolean + description: |- + Configures whether to allocate NodePort automatically for the `Service` with type `LoadBalancer`. + This is a one to one with the `spec.allocateLoadBalancerNodePorts` configuration in the `Service` type + For `loadbalancer` listeners only. description: Additional listener configuration. networkPolicyPeers: type: array @@ -1561,13 +1573,32 @@ spec: readOnly: type: boolean description: PersistentVolumeClaim object to use to populate the volume. + csi: + type: object + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + type: object + properties: + name: + type: string + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + description: CSIVolumeSource object to use to populate the volume. oneOf: - properties: secret: {} configMap: {} emptyDir: {} persistentVolumeClaim: {} - required: [] + csi: {} description: Additional volumes that can be mounted to the pod. description: Template for Kafka `Pods`. bootstrapService: @@ -1798,6 +1829,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object @@ -1899,6 +1972,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object @@ -3012,13 +3127,32 @@ spec: readOnly: type: boolean description: PersistentVolumeClaim object to use to populate the volume. + csi: + type: object + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + type: object + properties: + name: + type: string + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + description: CSIVolumeSource object to use to populate the volume. oneOf: - properties: secret: {} configMap: {} emptyDir: {} persistentVolumeClaim: {} - required: [] + csi: {} description: Additional volumes that can be mounted to the pod. description: Template for ZooKeeper `Pods`. clientService: @@ -3141,6 +3275,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object @@ -4319,13 +4495,32 @@ spec: readOnly: type: boolean description: PersistentVolumeClaim object to use to populate the volume. + csi: + type: object + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + type: object + properties: + name: + type: string + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + description: CSIVolumeSource object to use to populate the volume. oneOf: - properties: secret: {} configMap: {} emptyDir: {} persistentVolumeClaim: {} - required: [] + csi: {} description: Additional volumes that can be mounted to the pod. description: Template for Entity Operator `Pods`. topicOperatorContainer: @@ -4342,6 +4537,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object @@ -4443,6 +4680,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object @@ -4544,6 +4823,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object @@ -5593,13 +5914,32 @@ spec: readOnly: type: boolean description: PersistentVolumeClaim object to use to populate the volume. + csi: + type: object + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + type: object + properties: + name: + type: string + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + description: CSIVolumeSource object to use to populate the volume. oneOf: - properties: secret: {} configMap: {} emptyDir: {} persistentVolumeClaim: {} - required: [] + csi: {} description: Additional volumes that can be mounted to the pod. description: Template for Cruise Control `Pods`. apiService: @@ -5671,6 +6011,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object @@ -5772,6 +6154,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object @@ -5984,6 +6408,27 @@ spec: - type - valueFrom description: Configuration of the Cruise Control REST API users. + autoRebalance: + type: array + minItems: 1 + items: + type: object + properties: + mode: + type: string + enum: + - add-brokers + - remove-brokers + description: "Specifies the mode for automatically rebalancing when brokers are added or removed. Supported modes are `add-brokers` and `remove-brokers`. \n" + template: + type: object + properties: + name: + type: string + description: Reference to the KafkaRebalance custom resource to be used as the configuration template for the auto-rebalancing on scaling when running for the corresponding mode. + required: + - mode + description: "Auto-rebalancing on scaling related configuration listing the modes, when brokers are added or removed, with the corresponding rebalance template configurations.If this field is set, at least one mode has to be defined." description: Configuration for Cruise Control deployment. Deploys a Cruise Control instance when specified. jmxTrans: type: object @@ -6675,13 +7120,32 @@ spec: readOnly: type: boolean description: PersistentVolumeClaim object to use to populate the volume. + csi: + type: object + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + type: object + properties: + name: + type: string + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + description: CSIVolumeSource object to use to populate the volume. oneOf: - properties: secret: {} configMap: {} emptyDir: {} persistentVolumeClaim: {} - required: [] + csi: {} description: Additional volumes that can be mounted to the pod. description: Template for JmxTrans `Pods`. container: @@ -6698,6 +7162,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object @@ -7512,13 +8018,32 @@ spec: readOnly: type: boolean description: PersistentVolumeClaim object to use to populate the volume. + csi: + type: object + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + type: object + properties: + name: + type: string + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + description: CSIVolumeSource object to use to populate the volume. oneOf: - properties: secret: {} configMap: {} emptyDir: {} persistentVolumeClaim: {} - required: [] + csi: {} description: Additional volumes that can be mounted to the pod. description: Template for Kafka Exporter `Pods`. service: @@ -7553,6 +8078,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object @@ -7763,4 +8330,35 @@ spec: - PreKRaft - KRaft description: "Defines where cluster metadata are stored. Possible values are: ZooKeeper if the metadata are stored in ZooKeeper; KRaftMigration if the controllers are connected to ZooKeeper, brokers are being rolled with Zookeeper migration enabled and connection information to controllers, and the metadata migration process is running; KRaftDualWriting if the metadata migration process finished and the cluster is in dual-write mode; KRaftPostMigration if the brokers are fully KRaft-based but controllers being rolled to disconnect from ZooKeeper; PreKRaft if brokers and controller are fully KRaft-based, metadata are stored in KRaft, but ZooKeeper must be deleted; KRaft if the metadata are stored in KRaft." + autoRebalance: + type: object + properties: + state: + type: string + enum: + - Idle + - RebalanceOnScaleDown + - RebalanceOnScaleUp + description: "The current state of an auto-rebalancing operation. Possible values are: \n\n* `Idle` as the initial state when an auto-rebalancing is requested or as final state when it completes or fails.\n* `RebalanceOnScaleDown` if an auto-rebalance related to a scale-down operation is running.\n* `RebalanceOnScaleUp` if an auto-rebalance related to a scale-up operation is running." + lastTransitionTime: + type: string + description: The timestamp of the latest auto-rebalancing state update. + modes: + type: array + items: + type: object + properties: + mode: + type: string + enum: + - add-brokers + - remove-brokers + description: "Mode for which there is an auto-rebalancing operation in progress or queued, when brokers are added or removed. The possible modes are `add-brokers` and `remove-brokers`." + brokers: + type: array + items: + type: integer + description: "List of broker IDs involved in an auto-rebalancing operation related to the current mode. \nThe list contains one of the following: \n\n* Broker IDs for a current auto-rebalance. \n* Broker IDs for a queued auto-rebalance (if a previous auto-rebalance is still in progress). \n" + description: "List of modes where an auto-rebalancing operation is either running or queued. \nEach mode entry (`add-brokers` or `remove-brokers`) includes one of the following: \n\n* Broker IDs for a current auto-rebalance. \n* Broker IDs for a queued auto-rebalance (if a previous rebalance is still in progress)." + description: The status of an auto-rebalancing triggered by a cluster scaling request. description: "The status of the Kafka and ZooKeeper clusters, and Topic Operator." diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/041-Crd-kafkaconnect.yaml b/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/041-Crd-kafkaconnect.yaml index 560ac7e8..66182007 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/041-Crd-kafkaconnect.yaml +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/041-Crd-kafkaconnect.yaml @@ -1103,13 +1103,32 @@ spec: readOnly: type: boolean description: PersistentVolumeClaim object to use to populate the volume. + csi: + type: object + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + type: object + properties: + name: + type: string + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + description: CSIVolumeSource object to use to populate the volume. oneOf: - properties: secret: {} configMap: {} emptyDir: {} persistentVolumeClaim: {} - required: [] + csi: {} description: Additional volumes that can be mounted to the pod. description: Template for Kafka Connect `Pods`. apiService: @@ -1192,6 +1211,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object @@ -1293,6 +1354,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object @@ -2013,13 +2116,32 @@ spec: readOnly: type: boolean description: PersistentVolumeClaim object to use to populate the volume. + csi: + type: object + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + type: object + properties: + name: + type: string + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + description: CSIVolumeSource object to use to populate the volume. oneOf: - properties: secret: {} configMap: {} emptyDir: {} persistentVolumeClaim: {} - required: [] + csi: {} description: Additional volumes that can be mounted to the pod. description: Template for Kafka Connect Build `Pods`. The build pod is used only on Kubernetes. buildContainer: @@ -2036,6 +2158,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object @@ -2215,6 +2379,15 @@ spec: optional: type: boolean description: Reference to a key in a ConfigMap. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef description: Value of the environment variable which will be passed to the Kafka Connect pods. It can be passed either as a reference to Secret or ConfigMap field. The field has to specify exactly one Secret or ConfigMap. required: - name @@ -2270,6 +2443,15 @@ spec: optional: type: boolean description: Reference to a key in a ConfigMap. Exactly one Secret or ConfigMap has to be specified. + oneOf: + - properties: + secret: {} + required: + - secret + - properties: + configMap: {} + required: + - configMap required: - name description: Makes data from a Secret or ConfigMap available in the Kafka Connect pods as volumes. @@ -2284,7 +2466,7 @@ spec: type: array items: type: string - description: "Configures additional options which will be passed to the Kaniko executor when building the new Connect image. Allowed options are: --customPlatform, --insecure, --insecure-pull, --insecure-registry, --log-format, --log-timestamp, --registry-mirror, --reproducible, --single-snapshot, --skip-tls-verify, --skip-tls-verify-pull, --skip-tls-verify-registry, --verbosity, --snapshotMode, --use-new-run. These options will be used only on Kubernetes where the Kaniko executor is used. They will be ignored on OpenShift. The options are described in the link:https://github.com/GoogleContainerTools/kaniko[Kaniko GitHub repository^]. Changing this field does not trigger new build of the Kafka Connect image." + description: "Configures additional options which will be passed to the Kaniko executor when building the new Connect image. Allowed options are: --customPlatform, --custom-platform, --insecure, --insecure-pull, --insecure-registry, --log-format, --log-timestamp, --registry-mirror, --reproducible, --single-snapshot, --skip-tls-verify, --skip-tls-verify-pull, --skip-tls-verify-registry, --verbosity, --snapshotMode, --use-new-run, --registry-certificate, --registry-client-cert. These options will be used only on Kubernetes where the Kaniko executor is used. They will be ignored on OpenShift. The options are described in the link:https://github.com/GoogleContainerTools/kaniko[Kaniko GitHub repository^]. Changing this field does not trigger new build of the Kafka Connect image." image: type: string description: The name of the image which will be built. Required. diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/045-Crd-kafkamirrormaker.yaml b/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/045-Crd-kafkamirrormaker.yaml index 7d988b36..1e6d6ce4 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/045-Crd-kafkamirrormaker.yaml +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/045-Crd-kafkamirrormaker.yaml @@ -1268,13 +1268,32 @@ spec: readOnly: type: boolean description: PersistentVolumeClaim object to use to populate the volume. + csi: + type: object + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + type: object + properties: + name: + type: string + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + description: CSIVolumeSource object to use to populate the volume. oneOf: - properties: secret: {} configMap: {} emptyDir: {} persistentVolumeClaim: {} - required: [] + csi: {} description: Additional volumes that can be mounted to the pod. description: Template for Kafka MirrorMaker `Pods`. podDisruptionBudget: @@ -1313,6 +1332,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/046-Crd-kafkabridge.yaml b/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/046-Crd-kafkabridge.yaml index 5109f40a..8355ae95 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/046-Crd-kafkabridge.yaml +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/046-Crd-kafkabridge.yaml @@ -1092,13 +1092,32 @@ spec: readOnly: type: boolean description: PersistentVolumeClaim object to use to populate the volume. + csi: + type: object + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + type: object + properties: + name: + type: string + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + description: CSIVolumeSource object to use to populate the volume. oneOf: - properties: secret: {} configMap: {} emptyDir: {} persistentVolumeClaim: {} - required: [] + csi: {} description: Additional volumes that can be mounted to the pod. description: Template for Kafka Bridge `Pods`. apiService: @@ -1170,6 +1189,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object @@ -1307,6 +1368,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/047-Crd-kafkaconnector.yaml b/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/047-Crd-kafkaconnector.yaml index 0a682070..25a8b74a 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/047-Crd-kafkaconnector.yaml +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/047-Crd-kafkaconnector.yaml @@ -92,6 +92,30 @@ spec: - stopped - running description: The state the connector should be in. Defaults to running. + listOffsets: + type: object + properties: + toConfigMap: + type: object + properties: + name: + type: string + description: Reference to the ConfigMap where the list of offsets will be written to. + required: + - toConfigMap + description: Configuration for listing offsets. + alterOffsets: + type: object + properties: + fromConfigMap: + type: object + properties: + name: + type: string + description: Reference to the ConfigMap where the new offsets are stored. + required: + - fromConfigMap + description: Configuration for altering offsets. description: The specification of the Kafka Connector. status: type: object diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/048-Crd-kafkamirrormaker2.yaml b/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/048-Crd-kafkamirrormaker2.yaml index 18f2a1b6..55b514a8 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/048-Crd-kafkamirrormaker2.yaml +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/048-Crd-kafkamirrormaker2.yaml @@ -337,6 +337,30 @@ spec: type: integer description: "The maximum number of connector restarts that the operator will try. If the connector remains in a failed state after reaching this limit, it must be restarted manually by the user. Defaults to an unlimited number of restarts." description: Automatic restart of connector and tasks configuration. + listOffsets: + type: object + properties: + toConfigMap: + type: object + properties: + name: + type: string + description: Reference to the ConfigMap where the list of offsets will be written to. + required: + - toConfigMap + description: Configuration for listing offsets. + alterOffsets: + type: object + properties: + fromConfigMap: + type: object + properties: + name: + type: string + description: Reference to the ConfigMap where the new offsets are stored. + required: + - fromConfigMap + description: Configuration for altering offsets. description: The specification of the Kafka MirrorMaker 2 source connector. heartbeatConnector: type: object @@ -369,6 +393,30 @@ spec: type: integer description: "The maximum number of connector restarts that the operator will try. If the connector remains in a failed state after reaching this limit, it must be restarted manually by the user. Defaults to an unlimited number of restarts." description: Automatic restart of connector and tasks configuration. + listOffsets: + type: object + properties: + toConfigMap: + type: object + properties: + name: + type: string + description: Reference to the ConfigMap where the list of offsets will be written to. + required: + - toConfigMap + description: Configuration for listing offsets. + alterOffsets: + type: object + properties: + fromConfigMap: + type: object + properties: + name: + type: string + description: Reference to the ConfigMap where the new offsets are stored. + required: + - fromConfigMap + description: Configuration for altering offsets. description: The specification of the Kafka MirrorMaker 2 heartbeat connector. checkpointConnector: type: object @@ -401,6 +449,30 @@ spec: type: integer description: "The maximum number of connector restarts that the operator will try. If the connector remains in a failed state after reaching this limit, it must be restarted manually by the user. Defaults to an unlimited number of restarts." description: Automatic restart of connector and tasks configuration. + listOffsets: + type: object + properties: + toConfigMap: + type: object + properties: + name: + type: string + description: Reference to the ConfigMap where the list of offsets will be written to. + required: + - toConfigMap + description: Configuration for listing offsets. + alterOffsets: + type: object + properties: + fromConfigMap: + type: object + properties: + name: + type: string + description: Reference to the ConfigMap where the new offsets are stored. + required: + - fromConfigMap + description: Configuration for altering offsets. description: The specification of the Kafka MirrorMaker 2 checkpoint connector. topicsPattern: type: string @@ -1248,13 +1320,32 @@ spec: readOnly: type: boolean description: PersistentVolumeClaim object to use to populate the volume. + csi: + type: object + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + type: object + properties: + name: + type: string + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + description: CSIVolumeSource object to use to populate the volume. oneOf: - properties: secret: {} configMap: {} emptyDir: {} persistentVolumeClaim: {} - required: [] + csi: {} description: Additional volumes that can be mounted to the pod. description: Template for Kafka Connect `Pods`. apiService: @@ -1337,6 +1428,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object @@ -1438,6 +1571,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object @@ -2158,13 +2333,32 @@ spec: readOnly: type: boolean description: PersistentVolumeClaim object to use to populate the volume. + csi: + type: object + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + type: object + properties: + name: + type: string + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + description: CSIVolumeSource object to use to populate the volume. oneOf: - properties: secret: {} configMap: {} emptyDir: {} persistentVolumeClaim: {} - required: [] + csi: {} description: Additional volumes that can be mounted to the pod. description: Template for Kafka Connect Build `Pods`. The build pod is used only on Kubernetes. buildContainer: @@ -2181,6 +2375,48 @@ spec: value: type: string description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom description: Environment variables which should be applied to the container. securityContext: type: object @@ -2360,6 +2596,15 @@ spec: optional: type: boolean description: Reference to a key in a ConfigMap. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef description: Value of the environment variable which will be passed to the Kafka Connect pods. It can be passed either as a reference to Secret or ConfigMap field. The field has to specify exactly one Secret or ConfigMap. required: - name @@ -2415,6 +2660,15 @@ spec: optional: type: boolean description: Reference to a key in a ConfigMap. Exactly one Secret or ConfigMap has to be specified. + oneOf: + - properties: + secret: {} + required: + - secret + - properties: + configMap: {} + required: + - configMap required: - name description: Makes data from a Secret or ConfigMap available in the Kafka Connect pods as volumes. diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/049-Crd-kafkarebalance.yaml b/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/049-Crd-kafkarebalance.yaml index aefb1c36..024b1524 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/049-Crd-kafkarebalance.yaml +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/049-Crd-kafkarebalance.yaml @@ -31,29 +31,13 @@ spec: description: The name of the Kafka cluster this resource rebalances jsonPath: .metadata.labels.strimzi\.io/cluster type: string - - name: PendingProposal - description: A proposal has been requested from Cruise Control - jsonPath: ".status.conditions[?(@.type==\"PendingProposal\")].status" + - name: Template + description: If this rebalance resource is a template + jsonPath: .metadata.annotations.strimzi\.io/rebalance-template type: string - - name: ProposalReady - description: A proposal is ready and waiting for approval - jsonPath: ".status.conditions[?(@.type==\"ProposalReady\")].status" - type: string - - name: Rebalancing - description: Cruise Control is doing the rebalance - jsonPath: ".status.conditions[?(@.type==\"Rebalancing\")].status" - type: string - - name: Ready - description: The rebalance is complete - jsonPath: ".status.conditions[?(@.type==\"Ready\")].status" - type: string - - name: NotReady - description: There is an error on the custom resource - jsonPath: ".status.conditions[?(@.type==\"NotReady\")].status" - type: string - - name: Stopped - description: Processing the proposal or running rebalancing was stopped - jsonPath: ".status.conditions[?(@.type==\"Stopped\")].status" + - name: Status + description: Status of the current rebalancing operation + jsonPath: ".status.conditions[*].type" type: string schema: openAPIV3Schema: @@ -76,7 +60,8 @@ spec: - full - add-brokers - remove-brokers - description: "Mode to run the rebalancing. The supported modes are `full`, `add-brokers`, `remove-brokers`.\nIf not specified, the `full` mode is used by default. \n\n* `full` mode runs the rebalancing across all the brokers in the cluster.\n* `add-brokers` mode can be used after scaling up the cluster to move some replicas to the newly added brokers.\n* `remove-brokers` mode can be used before scaling down the cluster to move replicas out of the brokers to be removed.\n" + - remove-disks + description: "Mode to run the rebalancing. The supported modes are `full`, `add-brokers`, `remove-brokers`.\nIf not specified, the `full` mode is used by default. \n\n* `full` mode runs the rebalancing across all the brokers in the cluster.\n* `add-brokers` mode can be used after scaling up the cluster to move some replicas to the newly added brokers.\n* `remove-brokers` mode can be used before scaling down the cluster to move replicas out of the brokers to be removed.\n* `remove-disks` mode can be used to move data across the volumes within the same broker\n." brokers: type: array items: @@ -117,6 +102,22 @@ spec: items: type: string description: "A list of strategy class names used to determine the execution order for the replica movements in the generated optimization proposal. By default BaseReplicaMovementStrategy is used, which will execute the replica movements in the order that they were generated." + moveReplicasOffVolumes: + type: array + minItems: 1 + items: + type: object + properties: + brokerId: + type: integer + description: ID of the broker that contains the disk from which you want to move the partition replicas. + volumeIds: + type: array + minItems: 1 + items: + type: integer + description: IDs of the disks from which the partition replicas need to be moved. + description: List of brokers and their corresponding volumes from which replicas need to be moved. description: The specification of the Kafka rebalance. status: type: object diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/04A-Crd-kafkanodepool.yaml b/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/04A-Crd-kafkanodepool.yaml index 66f66fc5..2e48bf0a 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/04A-Crd-kafkanodepool.yaml +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/crds/04A-Crd-kafkanodepool.yaml @@ -5,6 +5,7 @@ metadata: labels: app: strimzi strimzi.io/crd-install: "true" + component: kafkanodepools.kafka.strimzi.io-crd spec: group: kafka.strimzi.io names: @@ -13,1158 +14,1261 @@ spec: singular: kafkanodepool plural: kafkanodepools shortNames: - - knp + - knp categories: - - strimzi + - strimzi scope: Namespaced conversion: strategy: None versions: - - name: v1beta2 - served: true - storage: true - subresources: - status: {} - scale: - specReplicasPath: .spec.replicas - statusReplicasPath: .status.replicas - labelSelectorPath: .status.labelSelector - additionalPrinterColumns: - - name: Desired replicas - description: The desired number of replicas - jsonPath: .spec.replicas - type: integer - - name: Roles - description: Roles of the nodes in the pool - jsonPath: .status.roles - type: string - - name: NodeIds - description: Node IDs used by Kafka nodes in this pool - jsonPath: .status.nodeIds - type: string - schema: - openAPIV3Schema: - type: object - properties: - apiVersion: - type: string - 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" - kind: - type: string - 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" - metadata: - type: object - spec: - type: object - properties: - replicas: - type: integer - minimum: 0 - description: The number of pods in the pool. - storage: - type: object - properties: - class: - type: string - description: The storage class to use for dynamic volume allocation. - deleteClaim: - type: boolean - description: Specifies if the persistent volume claim has to be deleted when the cluster is un-deployed. - id: - type: integer - minimum: 0 - description: Storage identification number. It is mandatory only for storage volumes defined in a storage of type 'jbod'. - kraftMetadata: - type: string - enum: - - shared - description: "Specifies whether this volume should be used for storing KRaft metadata. This property is optional. When set, the only currently supported value is `shared`. At most one volume can have this property set." - overrides: - type: array - items: - type: object - properties: - class: - type: string - description: The storage class to use for dynamic volume allocation for this broker. - broker: - type: integer - description: Id of the kafka broker (broker identifier). - description: Overrides for individual brokers. The `overrides` field allows you to specify a different configuration for different brokers. - selector: - additionalProperties: + - name: v1beta2 + served: true + storage: true + subresources: + status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas + labelSelectorPath: .status.labelSelector + additionalPrinterColumns: + - name: Desired replicas + description: The desired number of replicas + jsonPath: .spec.replicas + type: integer + - name: Roles + description: Roles of the nodes in the pool + jsonPath: .status.roles + type: string + - name: NodeIds + description: Node IDs used by Kafka nodes in this pool + jsonPath: .status.nodeIds + type: string + schema: + openAPIV3Schema: + type: object + properties: + apiVersion: + type: string + 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" + kind: + type: string + 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" + metadata: + type: object + spec: + type: object + properties: + replicas: + type: integer + minimum: 0 + description: The number of pods in the pool. + storage: + type: object + properties: + class: type: string - type: object - description: Specifies a specific persistent volume to use. It contains key:value pairs representing labels for selecting such a volume. - size: - type: string - description: "When `type=persistent-claim`, defines the size of the persistent volume claim, such as 100Gi. Mandatory when `type=persistent-claim`." - sizeLimit: - type: string - pattern: "^([0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$" - description: "When type=ephemeral, defines the total amount of local storage required for this EmptyDir volume (for example 1Gi)." - type: + description: The storage class to use for dynamic volume allocation. + deleteClaim: + type: boolean + description: Specifies if the persistent volume claim has to be deleted when the cluster is un-deployed. + id: + type: integer + minimum: 0 + description: Storage identification number. It is mandatory only for storage volumes defined in a storage of type 'jbod'. + kraftMetadata: + type: string + enum: + - shared + description: "Specifies whether this volume should be used for storing KRaft metadata. This property is optional. When set, the only currently supported value is `shared`. At most one volume can have this property set." + overrides: + type: array + items: + type: object + properties: + class: + type: string + description: The storage class to use for dynamic volume allocation for this broker. + broker: + type: integer + description: Id of the kafka broker (broker identifier). + description: Overrides for individual brokers. The `overrides` field allows you to specify a different configuration for different brokers. + selector: + additionalProperties: + type: string + type: object + description: Specifies a specific persistent volume to use. It contains key:value pairs representing labels for selecting such a volume. + size: + type: string + description: "When `type=persistent-claim`, defines the size of the persistent volume claim, such as 100Gi. Mandatory when `type=persistent-claim`." + sizeLimit: + type: string + pattern: "^([0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$" + description: "When type=ephemeral, defines the total amount of local storage required for this EmptyDir volume (for example 1Gi)." + type: + type: string + enum: + - ephemeral + - persistent-claim + - jbod + description: "Storage type, must be either 'ephemeral', 'persistent-claim', or 'jbod'." + volumes: + type: array + items: + type: object + properties: + class: + type: string + description: The storage class to use for dynamic volume allocation. + deleteClaim: + type: boolean + description: Specifies if the persistent volume claim has to be deleted when the cluster is un-deployed. + id: + type: integer + minimum: 0 + description: Storage identification number. Mandatory for storage volumes defined with a `jbod` storage type configuration. + kraftMetadata: + type: string + enum: + - shared + description: "Specifies whether this volume should be used for storing KRaft metadata. This property is optional. When set, the only currently supported value is `shared`. At most one volume can have this property set." + overrides: + type: array + items: + type: object + properties: + class: + type: string + description: The storage class to use for dynamic volume allocation for this broker. + broker: + type: integer + description: Id of the kafka broker (broker identifier). + description: Overrides for individual brokers. The `overrides` field allows you to specify a different configuration for different brokers. + selector: + additionalProperties: + type: string + type: object + description: Specifies a specific persistent volume to use. It contains key:value pairs representing labels for selecting such a volume. + size: + type: string + description: "When `type=persistent-claim`, defines the size of the persistent volume claim, such as 100Gi. Mandatory when `type=persistent-claim`." + sizeLimit: + type: string + pattern: "^([0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$" + description: "When type=ephemeral, defines the total amount of local storage required for this EmptyDir volume (for example 1Gi)." + type: + type: string + enum: + - ephemeral + - persistent-claim + description: "Storage type, must be either 'ephemeral' or 'persistent-claim'." + required: + - type + description: List of volumes as Storage objects representing the JBOD disks array. + required: + - type + description: Storage configuration (disk). Cannot be updated. + roles: + type: array + items: type: string enum: - - ephemeral - - persistent-claim - - jbod - description: "Storage type, must be either 'ephemeral', 'persistent-claim', or 'jbod'." - volumes: - type: array - items: + - controller + - broker + description: "The roles that the nodes in this pool will have when KRaft mode is enabled. Supported values are 'broker' and 'controller'. This field is required. When KRaft mode is disabled, the only allowed value if `broker`." + resources: + type: object + properties: + claims: + type: array + items: + type: object + properties: + name: + type: string + 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 + 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 + type: object + description: CPU and memory resources to reserve. + jvmOptions: + type: object + properties: + "-XX": + additionalProperties: + type: string + type: object + description: A map of -XX options to the JVM. + "-Xmx": + type: string + pattern: "^[0-9]+[mMgG]?$" + description: -Xmx option to to the JVM. + "-Xms": + type: string + pattern: "^[0-9]+[mMgG]?$" + description: -Xms option to to the JVM. + gcLoggingEnabled: + type: boolean + description: Specifies whether the Garbage Collection logging is enabled. The default is false. + javaSystemProperties: + type: array + items: + type: object + properties: + name: + type: string + description: The system property name. + value: + type: string + description: The system property value. + description: A map of additional system properties which will be passed using the `-D` option to the JVM. + description: JVM Options for pods. + template: + type: object + properties: + podSet: type: object properties: - class: - type: string - description: The storage class to use for dynamic volume allocation. - deleteClaim: - type: boolean - description: Specifies if the persistent volume claim has to be deleted when the cluster is un-deployed. - id: - type: integer - minimum: 0 - description: Storage identification number. Mandatory for storage volumes defined with a `jbod` storage type configuration. - kraftMetadata: - type: string - enum: - - shared - description: "Specifies whether this volume should be used for storing KRaft metadata. This property is optional. When set, the only currently supported value is `shared`. At most one volume can have this property set." - overrides: + metadata: + type: object + properties: + labels: + additionalProperties: + type: string + type: object + description: Labels added to the Kubernetes resource. + annotations: + additionalProperties: + type: string + type: object + description: Annotations added to the Kubernetes resource. + description: Metadata applied to the resource. + description: Template for Kafka `StrimziPodSet` resource. + pod: + type: object + properties: + metadata: + type: object + properties: + labels: + additionalProperties: + type: string + type: object + description: Labels added to the Kubernetes resource. + annotations: + additionalProperties: + type: string + type: object + description: Annotations added to the Kubernetes resource. + description: Metadata applied to the resource. + imagePullSecrets: type: array items: type: object properties: - class: + name: type: string - description: The storage class to use for dynamic volume allocation for this broker. - broker: - type: integer - description: Id of the kafka broker (broker identifier). - description: Overrides for individual brokers. The `overrides` field allows you to specify a different configuration for different brokers. - selector: - additionalProperties: - type: string - type: object - description: Specifies a specific persistent volume to use. It contains key:value pairs representing labels for selecting such a volume. - size: - type: string - description: "When `type=persistent-claim`, defines the size of the persistent volume claim, such as 100Gi. Mandatory when `type=persistent-claim`." - sizeLimit: - type: string - pattern: "^([0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$" - description: "When type=ephemeral, defines the total amount of local storage required for this EmptyDir volume (for example 1Gi)." - type: - type: string - enum: - - ephemeral - - persistent-claim - description: "Storage type, must be either 'ephemeral' or 'persistent-claim'." - required: - - type - description: List of volumes as Storage objects representing the JBOD disks array. - required: - - type - description: Storage configuration (disk). Cannot be updated. - roles: - type: array - items: - type: string - enum: - - controller - - broker - description: "The roles that the nodes in this pool will have when KRaft mode is enabled. Supported values are 'broker' and 'controller'. This field is required. When KRaft mode is disabled, the only allowed value if `broker`." - resources: - type: object - properties: - claims: - type: array - items: - type: object - properties: - name: - type: string - 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 - 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 - type: object - description: CPU and memory resources to reserve. - jvmOptions: - type: object - properties: - "-XX": - additionalProperties: - type: string - type: object - description: A map of -XX options to the JVM. - "-Xmx": - type: string - pattern: "^[0-9]+[mMgG]?$" - description: -Xmx option to to the JVM. - "-Xms": - type: string - pattern: "^[0-9]+[mMgG]?$" - description: -Xms option to to the JVM. - gcLoggingEnabled: - type: boolean - description: Specifies whether the Garbage Collection logging is enabled. The default is false. - javaSystemProperties: - type: array - items: - type: object - properties: - name: - type: string - description: The system property name. - value: - type: string - description: The system property value. - description: A map of additional system properties which will be passed using the `-D` option to the JVM. - description: JVM Options for pods. - template: - type: object - properties: - podSet: - type: object - properties: - metadata: - type: object - properties: - labels: - additionalProperties: - type: string - type: object - description: Labels added to the Kubernetes resource. - annotations: - additionalProperties: - type: string - type: object - description: Annotations added to the Kubernetes resource. - description: Metadata applied to the resource. - description: Template for Kafka `StrimziPodSet` resource. - pod: - type: object - properties: - metadata: - type: object - properties: - labels: - additionalProperties: - type: string - type: object - description: Labels added to the Kubernetes resource. - annotations: - additionalProperties: - type: string - type: object - description: Annotations added to the Kubernetes resource. - description: Metadata applied to the resource. - imagePullSecrets: - type: array - items: + description: "List of references to secrets in the same namespace to use for pulling any of the images used by this Pod. When the `STRIMZI_IMAGE_PULL_SECRETS` environment variable in Cluster Operator and the `imagePullSecrets` option are specified, only the `imagePullSecrets` variable is used and the `STRIMZI_IMAGE_PULL_SECRETS` variable is ignored." + securityContext: type: object properties: - name: - type: string - description: "List of references to secrets in the same namespace to use for pulling any of the images used by this Pod. When the `STRIMZI_IMAGE_PULL_SECRETS` environment variable in Cluster Operator and the `imagePullSecrets` option are specified, only the `imagePullSecrets` variable is used and the `STRIMZI_IMAGE_PULL_SECRETS` variable is ignored." - securityContext: - type: object - properties: - appArmorProfile: - type: object - properties: - localhostProfile: - type: string - type: - type: string - fsGroup: - type: integer - fsGroupChangePolicy: - type: string - runAsGroup: - type: integer - runAsNonRoot: - type: boolean - runAsUser: - type: integer - seLinuxOptions: - type: object - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - seccompProfile: - type: object - properties: - localhostProfile: - type: string - type: - type: string - supplementalGroups: - type: array - items: - type: integer - sysctls: - type: array - items: + appArmorProfile: type: object properties: - name: + localhostProfile: type: string - value: + type: type: string - windowsOptions: - type: object - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - description: Configures pod-level security attributes and common container settings. - terminationGracePeriodSeconds: - type: integer - minimum: 0 - description: "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 to longer than the expected cleanup time for your process. Value must be a non-negative integer. A zero value indicates delete immediately. You might need to increase the grace period for very large Kafka clusters, so that the Kafka brokers have enough time to transfer their work to another broker before they are terminated. Defaults to 30 seconds." - affinity: - type: object - properties: - nodeAffinity: - type: object - properties: - preferredDuringSchedulingIgnoredDuringExecution: - type: array - items: - type: object - properties: - preference: - type: object - properties: - matchExpressions: - type: array - items: - type: object - properties: - key: - type: string - operator: - type: string - values: - type: array - items: - type: string - matchFields: - type: array - items: - type: object - properties: - key: - type: string - operator: - type: string - values: - type: array - items: - type: string - weight: - type: integer - requiredDuringSchedulingIgnoredDuringExecution: + fsGroup: + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + type: integer + runAsNonRoot: + type: boolean + runAsUser: + type: integer + seLinuxOptions: + type: object + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + seccompProfile: + type: object + properties: + localhostProfile: + type: string + type: + type: string + supplementalGroups: + type: array + items: + type: integer + sysctls: + type: array + items: type: object properties: - nodeSelectorTerms: + name: + type: string + value: + type: string + windowsOptions: + type: object + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + description: Configures pod-level security attributes and common container settings. + terminationGracePeriodSeconds: + type: integer + minimum: 0 + description: "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 to longer than the expected cleanup time for your process. Value must be a non-negative integer. A zero value indicates delete immediately. You might need to increase the grace period for very large Kafka clusters, so that the Kafka brokers have enough time to transfer their work to another broker before they are terminated. Defaults to 30 seconds." + affinity: + type: object + properties: + nodeAffinity: + type: object + properties: + preferredDuringSchedulingIgnoredDuringExecution: + type: array + items: + type: object + properties: + preference: + type: object + properties: + matchExpressions: + type: array + items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + matchFields: + type: array + items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + weight: + type: integer + requiredDuringSchedulingIgnoredDuringExecution: + type: object + properties: + nodeSelectorTerms: + type: array + items: + type: object + properties: + matchExpressions: + type: array + items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + matchFields: + type: array + items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + podAffinity: + type: object + properties: + preferredDuringSchedulingIgnoredDuringExecution: + type: array + items: + type: object + properties: + podAffinityTerm: + type: object + properties: + labelSelector: + type: object + properties: + matchExpressions: + type: array + items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + matchLabels: + additionalProperties: + type: string + type: object + matchLabelKeys: + type: array + items: + type: string + mismatchLabelKeys: + type: array + items: + type: string + namespaceSelector: + type: object + properties: + matchExpressions: + type: array + items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + matchLabels: + additionalProperties: + type: string + type: object + namespaces: + type: array + items: + type: string + topologyKey: + type: string + weight: + type: integer + requiredDuringSchedulingIgnoredDuringExecution: + type: array + items: + type: object + properties: + labelSelector: + type: object + properties: + matchExpressions: + type: array + items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + matchLabels: + additionalProperties: + type: string + type: object + matchLabelKeys: + type: array + items: + type: string + mismatchLabelKeys: + type: array + items: + type: string + namespaceSelector: + type: object + properties: + matchExpressions: + type: array + items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + matchLabels: + additionalProperties: + type: string + type: object + namespaces: + type: array + items: + type: string + topologyKey: + type: string + podAntiAffinity: + type: object + properties: + preferredDuringSchedulingIgnoredDuringExecution: + type: array + items: + type: object + properties: + podAffinityTerm: + type: object + properties: + labelSelector: + type: object + properties: + matchExpressions: + type: array + items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + matchLabels: + additionalProperties: + type: string + type: object + matchLabelKeys: + type: array + items: + type: string + mismatchLabelKeys: + type: array + items: + type: string + namespaceSelector: + type: object + properties: + matchExpressions: + type: array + items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + matchLabels: + additionalProperties: + type: string + type: object + namespaces: + type: array + items: + type: string + topologyKey: + type: string + weight: + type: integer + requiredDuringSchedulingIgnoredDuringExecution: + type: array + items: + type: object + properties: + labelSelector: + type: object + properties: + matchExpressions: + type: array + items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + matchLabels: + additionalProperties: + type: string + type: object + matchLabelKeys: + type: array + items: + type: string + mismatchLabelKeys: + type: array + items: + type: string + namespaceSelector: + type: object + properties: + matchExpressions: + type: array + items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + matchLabels: + additionalProperties: + type: string + type: object + namespaces: + type: array + items: + type: string + topologyKey: + type: string + description: The pod's affinity rules. + tolerations: + type: array + items: + type: object + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + type: integer + value: + type: string + description: The pod's tolerations. + topologySpreadConstraints: + type: array + items: + type: object + properties: + labelSelector: + type: object + properties: + matchExpressions: type: array items: type: object properties: - matchExpressions: - type: array - items: - type: object - properties: - key: - type: string - operator: - type: string - values: - type: array - items: - type: string - matchFields: - type: array - items: - type: object - properties: - key: - type: string - operator: - type: string - values: - type: array - items: - type: string - podAffinity: - type: object - properties: - preferredDuringSchedulingIgnoredDuringExecution: - type: array - items: - type: object - properties: - podAffinityTerm: - type: object - properties: - labelSelector: - type: object - properties: - matchExpressions: - type: array - items: - type: object - properties: - key: - type: string - operator: - type: string - values: - type: array - items: - type: string - matchLabels: - additionalProperties: - type: string - type: object - matchLabelKeys: - type: array - items: - type: string - mismatchLabelKeys: - type: array - items: - type: string - namespaceSelector: - type: object - properties: - matchExpressions: - type: array - items: - type: object - properties: - key: - type: string - operator: - type: string - values: - type: array - items: - type: string - matchLabels: - additionalProperties: - type: string - type: object - namespaces: - type: array - items: - type: string - topologyKey: + key: type: string - weight: - type: integer - requiredDuringSchedulingIgnoredDuringExecution: - type: array - items: - type: object - properties: - labelSelector: - type: object - properties: - matchExpressions: - type: array - items: - type: object - properties: - key: - type: string - operator: - type: string - values: - type: array - items: - type: string - matchLabels: - additionalProperties: - type: string - type: object - matchLabelKeys: - type: array - items: - type: string - mismatchLabelKeys: - type: array - items: - type: string - namespaceSelector: - type: object - properties: - matchExpressions: - type: array - items: - type: object - properties: - key: - type: string - operator: - type: string - values: - type: array - items: - type: string - matchLabels: - additionalProperties: - type: string - type: object - namespaces: - type: array - items: - type: string - topologyKey: - type: string - podAntiAffinity: - type: object - properties: - preferredDuringSchedulingIgnoredDuringExecution: - type: array - items: - type: object - properties: - podAffinityTerm: - type: object - properties: - labelSelector: - type: object - properties: - matchExpressions: - type: array - items: - type: object - properties: - key: - type: string - operator: - type: string - values: - type: array - items: - type: string - matchLabels: - additionalProperties: - type: string - type: object - matchLabelKeys: - type: array - items: - type: string - mismatchLabelKeys: - type: array - items: - type: string - namespaceSelector: - type: object - properties: - matchExpressions: - type: array - items: - type: object - properties: - key: - type: string - operator: - type: string - values: - type: array - items: - type: string - matchLabels: - additionalProperties: - type: string - type: object - namespaces: - type: array - items: - type: string - topologyKey: + operator: type: string - weight: - type: integer - requiredDuringSchedulingIgnoredDuringExecution: - type: array - items: - type: object - properties: - labelSelector: - type: object - properties: - matchExpressions: + values: type: array items: - type: object - properties: - key: - type: string - operator: - type: string - values: - type: array - items: - type: string - matchLabels: - additionalProperties: type: string - type: object - matchLabelKeys: - type: array - items: - type: string - mismatchLabelKeys: - type: array - items: - type: string - namespaceSelector: - type: object - properties: - matchExpressions: - type: array - items: - type: object - properties: - key: - type: string - operator: - type: string - values: - type: array - items: - type: string - matchLabels: - additionalProperties: - type: string - type: object - namespaces: - type: array - items: - type: string - topologyKey: + matchLabels: + additionalProperties: type: string - description: The pod's affinity rules. - tolerations: - type: array - items: - type: object - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - type: integer - value: - type: string - description: The pod's tolerations. - topologySpreadConstraints: - type: array - items: - type: object - properties: - labelSelector: - type: object - properties: - matchExpressions: - type: array - items: type: object - properties: - key: - type: string - operator: - type: string - values: - type: array - items: + matchLabelKeys: + type: array + items: + type: string + maxSkew: + type: integer + minDomains: + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + description: The pod's topology spread constraints. + priorityClassName: + type: string + description: 'The name of the priority class used to assign priority to the pods. ' + schedulerName: + type: string + description: "The name of the scheduler used to dispatch this `Pod`. If not specified, the default scheduler will be used." + hostAliases: + type: array + items: + type: object + properties: + hostnames: + type: array + items: + type: string + ip: + type: string + description: The pod's HostAliases. HostAliases is an optional list of hosts and IPs that will be injected into the Pod's hosts file if specified. + enableServiceLinks: + type: boolean + description: Indicates whether information about services should be injected into Pod's environment variables. + tmpDirSizeLimit: + type: string + pattern: "^([0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$" + description: "Defines the total amount of pod memory allocated for the temporary `EmptyDir` volume `/tmp`. Specify the allocation in memory units, for example, `100Mi` for 100 mebibytes. Default value is `5Mi`. The `/tmp` volume is backed by pod memory, not disk storage, so avoid setting a high value as it consumes pod memory resources." + volumes: + type: array + items: + type: object + properties: + name: + type: string + description: Name to use for the volume. Required. + secret: + type: object + properties: + defaultMode: + type: integer + items: + type: array + items: + type: object + properties: + key: type: string - matchLabels: - additionalProperties: + mode: + type: integer + path: + type: string + optional: + type: boolean + secretName: type: string - type: object - matchLabelKeys: - type: array - items: - type: string - maxSkew: - type: integer - minDomains: - type: integer - nodeAffinityPolicy: - type: string - nodeTaintsPolicy: - type: string - topologyKey: - type: string - whenUnsatisfiable: - type: string - description: The pod's topology spread constraints. - priorityClassName: - type: string - description: 'The name of the priority class used to assign priority to the pods. ' - schedulerName: - type: string - description: "The name of the scheduler used to dispatch this `Pod`. If not specified, the default scheduler will be used." - hostAliases: - type: array - items: - type: object - properties: - hostnames: - type: array - items: - type: string - ip: - type: string - description: The pod's HostAliases. HostAliases is an optional list of hosts and IPs that will be injected into the Pod's hosts file if specified. - enableServiceLinks: - type: boolean - description: Indicates whether information about services should be injected into Pod's environment variables. - tmpDirSizeLimit: - type: string - pattern: "^([0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$" - description: "Defines the total amount of pod memory allocated for the temporary `EmptyDir` volume `/tmp`. Specify the allocation in memory units, for example, `100Mi` for 100 mebibytes. Default value is `5Mi`. The `/tmp` volume is backed by pod memory, not disk storage, so avoid setting a high value as it consumes pod memory resources." - volumes: - type: array - items: - type: object - properties: - name: - type: string - description: Name to use for the volume. Required. - secret: - type: object - properties: - defaultMode: - type: integer - items: - type: array + description: Secret to use populate the volume. + configMap: + type: object + properties: + defaultMode: + type: integer items: + type: array + items: + type: object + properties: + key: + type: string + mode: + type: integer + path: + type: string + name: + type: string + optional: + type: boolean + description: ConfigMap to use to populate the volume. + emptyDir: + type: object + properties: + medium: + type: string + sizeLimit: + type: object + properties: + amount: + type: string + format: + type: string + description: EmptyDir to use to populate the volume. + persistentVolumeClaim: + type: object + properties: + claimName: + type: string + readOnly: + type: boolean + description: PersistentVolumeClaim object to use to populate the volume. + csi: + type: object + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + type: object + properties: + name: + type: string + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + description: CSIVolumeSource object to use to populate the volume. + oneOf: + - properties: + secret: {} + configMap: {} + emptyDir: {} + persistentVolumeClaim: {} + csi: {} + description: Additional volumes that can be mounted to the pod. + description: Template for Kafka `Pods`. + perPodService: + type: object + properties: + metadata: + type: object + properties: + labels: + additionalProperties: + type: string + type: object + description: Labels added to the Kubernetes resource. + annotations: + additionalProperties: + type: string + type: object + description: Annotations added to the Kubernetes resource. + description: Metadata applied to the resource. + description: Template for Kafka per-pod `Services` used for access from outside of Kubernetes. + perPodRoute: + type: object + properties: + metadata: + type: object + properties: + labels: + additionalProperties: + type: string + type: object + description: Labels added to the Kubernetes resource. + annotations: + additionalProperties: + type: string + type: object + description: Annotations added to the Kubernetes resource. + description: Metadata applied to the resource. + description: Template for Kafka per-pod `Routes` used for access from outside of OpenShift. + perPodIngress: + type: object + properties: + metadata: + type: object + properties: + labels: + additionalProperties: + type: string + type: object + description: Labels added to the Kubernetes resource. + annotations: + additionalProperties: + type: string + type: object + description: Annotations added to the Kubernetes resource. + description: Metadata applied to the resource. + description: Template for Kafka per-pod `Ingress` used for access from outside of Kubernetes. + persistentVolumeClaim: + type: object + properties: + metadata: + type: object + properties: + labels: + additionalProperties: + type: string + type: object + description: Labels added to the Kubernetes resource. + annotations: + additionalProperties: + type: string + type: object + description: Annotations added to the Kubernetes resource. + description: Metadata applied to the resource. + description: Template for all Kafka `PersistentVolumeClaims`. + kafkaContainer: + type: object + properties: + env: + type: array + items: + type: object + properties: + name: + type: string + description: The environment variable key. + value: + type: string + description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: type: object properties: key: type: string - mode: - type: integer - path: + name: type: string - optional: - type: boolean - secretName: - type: string - description: Secret to use populate the volume. - configMap: - type: object - properties: - defaultMode: - type: integer - items: - type: array - items: + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: type: object properties: key: type: string - mode: - type: integer - path: + name: type: string - name: - type: string - optional: - type: boolean - description: ConfigMap to use to populate the volume. - emptyDir: + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom + description: Environment variables which should be applied to the container. + securityContext: + type: object + properties: + allowPrivilegeEscalation: + type: boolean + appArmorProfile: type: object properties: - medium: + localhostProfile: type: string - sizeLimit: - type: object - properties: - amount: - type: string - format: - type: string - description: EmptyDir to use to populate the volume. - persistentVolumeClaim: + type: + type: string + capabilities: type: object properties: - claimName: + add: + type: array + items: + type: string + drop: + type: array + items: + type: string + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + type: integer + runAsNonRoot: + type: boolean + runAsUser: + type: integer + seLinuxOptions: + type: object + properties: + level: type: string - readOnly: + role: + type: string + type: + type: string + user: + type: string + seccompProfile: + type: object + properties: + localhostProfile: + type: string + type: + type: string + windowsOptions: + type: object + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: type: boolean - description: PersistentVolumeClaim object to use to populate the volume. - oneOf: - - properties: - secret: {} - configMap: {} - emptyDir: {} - persistentVolumeClaim: {} - required: [] - description: Additional volumes that can be mounted to the pod. - description: Template for Kafka `Pods`. - perPodService: - type: object - properties: - metadata: - type: object - properties: - labels: - additionalProperties: - type: string - type: object - description: Labels added to the Kubernetes resource. - annotations: - additionalProperties: - type: string - type: object - description: Annotations added to the Kubernetes resource. - description: Metadata applied to the resource. - description: Template for Kafka per-pod `Services` used for access from outside of Kubernetes. - perPodRoute: - type: object - properties: - metadata: - type: object - properties: - labels: - additionalProperties: - type: string - type: object - description: Labels added to the Kubernetes resource. - annotations: - additionalProperties: - type: string - type: object - description: Annotations added to the Kubernetes resource. - description: Metadata applied to the resource. - description: Template for Kafka per-pod `Routes` used for access from outside of OpenShift. - perPodIngress: - type: object - properties: - metadata: - type: object - properties: - labels: - additionalProperties: - type: string - type: object - description: Labels added to the Kubernetes resource. - annotations: - additionalProperties: - type: string - type: object - description: Annotations added to the Kubernetes resource. - description: Metadata applied to the resource. - description: Template for Kafka per-pod `Ingress` used for access from outside of Kubernetes. - persistentVolumeClaim: - type: object - properties: - metadata: - type: object - properties: - labels: - additionalProperties: - type: string - type: object - description: Labels added to the Kubernetes resource. - annotations: - additionalProperties: - type: string - type: object - description: Annotations added to the Kubernetes resource. - description: Metadata applied to the resource. - description: Template for all Kafka `PersistentVolumeClaims`. - kafkaContainer: - type: object - properties: - env: - type: array - items: - type: object - properties: - name: - type: string - description: The environment variable key. - value: - type: string - description: The environment variable value. - description: Environment variables which should be applied to the container. - securityContext: - type: object - properties: - allowPrivilegeEscalation: - type: boolean - appArmorProfile: - type: object - properties: - localhostProfile: - type: string - type: - type: string - capabilities: - type: object - properties: - add: - type: array - items: + runAsUserName: type: string - drop: - type: array - items: - type: string - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - type: integer - runAsNonRoot: - type: boolean - runAsUser: - type: integer - seLinuxOptions: + description: Security context for the container. + volumeMounts: + type: array + items: type: object properties: - level: + mountPath: type: string - role: + mountPropagation: type: string - type: + name: type: string - user: - type: string - seccompProfile: - type: object - properties: - localhostProfile: - type: string - type: - type: string - windowsOptions: - type: object - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: + readOnly: type: boolean - runAsUserName: + recursiveReadOnly: type: string - description: Security context for the container. - volumeMounts: - type: array - items: + subPath: + type: string + subPathExpr: + type: string + description: Additional volume mounts which should be applied to the container. + description: Template for the Kafka broker container. + initContainer: + type: object + properties: + env: + type: array + items: + type: object + properties: + name: + type: string + description: The environment variable key. + value: + type: string + description: The environment variable value. + valueFrom: + type: object + properties: + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a secret. + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + description: Reference to a key in a config map. + oneOf: + - properties: + secretKeyRef: {} + required: + - secretKeyRef + - properties: + configMapKeyRef: {} + required: + - configMapKeyRef + description: Reference to the secret or config map property to which the environment variable is set. + oneOf: + - properties: + value: {} + required: + - value + - properties: + valueFrom: {} + required: + - valueFrom + description: Environment variables which should be applied to the container. + securityContext: type: object properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: + allowPrivilegeEscalation: type: boolean - recursiveReadOnly: + appArmorProfile: + type: object + properties: + localhostProfile: + type: string + type: + type: string + capabilities: + type: object + properties: + add: + type: array + items: + type: string + drop: + type: array + items: + type: string + privileged: + type: boolean + procMount: type: string - subPath: - type: string - subPathExpr: - type: string - description: Additional volume mounts which should be applied to the container. - description: Template for the Kafka broker container. - initContainer: + readOnlyRootFilesystem: + type: boolean + runAsGroup: + type: integer + runAsNonRoot: + type: boolean + runAsUser: + type: integer + seLinuxOptions: + type: object + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + seccompProfile: + type: object + properties: + localhostProfile: + type: string + type: + type: string + windowsOptions: + type: object + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + description: Security context for the container. + volumeMounts: + type: array + items: + type: object + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + recursiveReadOnly: + type: string + subPath: + type: string + subPathExpr: + type: string + description: Additional volume mounts which should be applied to the container. + description: Template for the Kafka init container. + description: Template for pool resources. The template allows users to specify how the resources belonging to this pool are generated. + required: + - replicas + - storage + - roles + description: The specification of the KafkaNodePool. + status: + type: object + properties: + conditions: + type: array + items: type: object properties: - env: - type: array - items: - type: object - properties: - name: - type: string - description: The environment variable key. - value: - type: string - description: The environment variable value. - description: Environment variables which should be applied to the container. - securityContext: - type: object - properties: - allowPrivilegeEscalation: - type: boolean - appArmorProfile: - type: object - properties: - localhostProfile: - type: string - type: - type: string - capabilities: - type: object - properties: - add: - type: array - items: - type: string - drop: - type: array - items: - type: string - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - type: integer - runAsNonRoot: - type: boolean - runAsUser: - type: integer - seLinuxOptions: - type: object - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - seccompProfile: - type: object - properties: - localhostProfile: - type: string - type: - type: string - windowsOptions: - type: object - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - description: Security context for the container. - volumeMounts: - type: array - items: - type: object - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - recursiveReadOnly: - type: string - subPath: - type: string - subPathExpr: - type: string - description: Additional volume mounts which should be applied to the container. - description: Template for the Kafka init container. - description: Template for pool resources. The template allows users to specify how the resources belonging to this pool are generated. - required: - - replicas - - storage - - roles - description: The specification of the KafkaNodePool. - status: - type: object - properties: - conditions: - type: array - items: - type: object - properties: - type: - type: string - description: "The unique identifier of a condition, used to distinguish between other conditions in the resource." - status: - type: string - description: "The status of the condition, either True, False or Unknown." - lastTransitionTime: - type: string - description: "Last time the condition of a type changed from one status to another. The required format is 'yyyy-MM-ddTHH:mm:ssZ', in the UTC time zone." - reason: - type: string - description: The reason for the condition's last transition (a single word in CamelCase). - message: - type: string - description: Human-readable message indicating details about the condition's last transition. - description: List of status conditions. - observedGeneration: - type: integer - description: The generation of the CRD that was last reconciled by the operator. - nodeIds: - type: array - items: + type: + type: string + description: "The unique identifier of a condition, used to distinguish between other conditions in the resource." + status: + type: string + description: "The status of the condition, either True, False or Unknown." + lastTransitionTime: + type: string + description: "Last time the condition of a type changed from one status to another. The required format is 'yyyy-MM-ddTHH:mm:ssZ', in the UTC time zone." + reason: + type: string + description: The reason for the condition's last transition (a single word in CamelCase). + message: + type: string + description: Human-readable message indicating details about the condition's last transition. + description: List of status conditions. + observedGeneration: type: integer - description: Node IDs used by Kafka nodes in this pool. - clusterId: - type: string - description: Kafka cluster ID. - roles: - type: array - items: + description: The generation of the CRD that was last reconciled by the operator. + nodeIds: + type: array + items: + type: integer + description: Node IDs used by Kafka nodes in this pool. + clusterId: type: string - enum: - - controller - - broker - description: The roles currently assigned to this pool. - replicas: - type: integer - description: The current number of pods being used to provide this resource. - labelSelector: - type: string - description: Label selector for pods providing this resource. - description: The status of the KafkaNodePool. + description: Kafka cluster ID. + roles: + type: array + items: + type: string + enum: + - controller + - broker + description: The roles currently assigned to this pool. + replicas: + type: integer + description: The current number of pods being used to provide this resource. + labelSelector: + type: string + description: Label selector for pods providing this resource. + description: The status of the KafkaNodePool. diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/files/grafana-dashboards/strimzi-kraft.json b/packages/system/kafka-operator/charts/strimzi-kafka-operator/files/grafana-dashboards/strimzi-kraft.json index e4187494..96055f96 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/files/grafana-dashboards/strimzi-kraft.json +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/files/grafana-dashboards/strimzi-kraft.json @@ -1073,6 +1073,89 @@ "title": "Metadata Records Commit Latency", "type": "timeseries" }, + { + "datasource": "${DS_PROMETHEUS}", + "description": "The role of the node in KRaft", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 6, + "x": 0, + "y": 23 + }, + "id": 122, + "options": { + "showHeader": true, + "sortBy": [ + { + "desc": false, + "displayName": "Pod Name" + } + ] + }, + "pluginVersion": "7.4.5", + "targets": [ + { + "expr": "max(kafka_server_raftmetrics_current_state) by (kubernetes_pod_name, current_state)", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Current Raft State", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "Value": true + }, + "indexByName": { + "Time": 0, + "Value": 3, + "current_state": 2, + "kubernetes_pod_name": 1 + }, + "renameByName": { + "current_state": "Current State", + "kubernetes_pod_name": "Pod Name" + } + } + } + ], + "type": "table" + }, { "datasource": "${DS_PROMETHEUS}", "description": "The current quorum leader's id; -1 indicates unknown", @@ -1134,8 +1217,8 @@ }, "gridPos": { "h": 8, - "w": 8, - "x": 0, + "w": 6, + "x": 6, "y": 23 }, "id": 104, @@ -1228,8 +1311,8 @@ }, "gridPos": { "h": 8, - "w": 8, - "x": 8, + "w": 6, + "x": 12, "y": 23 }, "id": 105, @@ -1322,8 +1405,8 @@ }, "gridPos": { "h": 8, - "w": 8, - "x": 16, + "w": 6, + "x": 18, "y": 23 }, "id": 113, diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/020-RoleBinding-strimzi-cluster-operator.yaml b/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/020-RoleBinding-strimzi-cluster-operator.yaml index 630ba6d7..dae5166d 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/020-RoleBinding-strimzi-cluster-operator.yaml +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/020-RoleBinding-strimzi-cluster-operator.yaml @@ -1,6 +1,10 @@ {{- if .Values.rbac.create -}} {{- $root := . -}} -{{- range append .Values.watchNamespaces .Release.Namespace }} +{{- $watchNamespaces := .Values.watchNamespaces -}} +{{- if $root.Values.watchAnyNamespace }} + {{- $watchNamespaces = list -}} +{{- end }} +{{- range append $watchNamespaces .Release.Namespace }} --- apiVersion: rbac.authorization.k8s.io/v1 {{- if $root.Values.watchAnyNamespace }} diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/023-ClusterRole-strimzi-cluster-operator-role.yaml b/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/023-ClusterRole-strimzi-cluster-operator-role.yaml index 55394c64..0f70ff13 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/023-ClusterRole-strimzi-cluster-operator-role.yaml +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/023-ClusterRole-strimzi-cluster-operator-role.yaml @@ -79,4 +79,11 @@ rules: - get - patch - update +- apiGroups: + - "kafka.strimzi.io" + resources: + # The Cluster Operator needs deletion for KafkaRebalance only (during auto-rebalancing) + - kafkarebalances + verbs: + - delete {{- end -}} diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/023-RoleBinding-strimzi-cluster-operator.yaml b/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/023-RoleBinding-strimzi-cluster-operator.yaml index 2eacd13d..57cac997 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/023-RoleBinding-strimzi-cluster-operator.yaml +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/023-RoleBinding-strimzi-cluster-operator.yaml @@ -1,6 +1,10 @@ -{{- if .Values.rbac.create }} +{{- if .Values.rbac.create -}} {{- $root := . -}} -{{- range append .Values.watchNamespaces .Release.Namespace }} +{{- $watchNamespaces := .Values.watchNamespaces -}} +{{- if $root.Values.watchAnyNamespace }} + {{- $watchNamespaces = list -}} +{{- end }} +{{- range append $watchNamespaces .Release.Namespace }} --- apiVersion: rbac.authorization.k8s.io/v1 {{- if $root.Values.watchAnyNamespace }} diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/031-RoleBinding-strimzi-cluster-operator-entity-operator-delegation.yaml b/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/031-RoleBinding-strimzi-cluster-operator-entity-operator-delegation.yaml index 1d5e3151..f222a4b0 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/031-RoleBinding-strimzi-cluster-operator-entity-operator-delegation.yaml +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/031-RoleBinding-strimzi-cluster-operator-entity-operator-delegation.yaml @@ -1,6 +1,10 @@ -{{- if .Values.rbac.create }} +{{- if .Values.rbac.create -}} {{- $root := . -}} -{{- range append .Values.watchNamespaces .Release.Namespace }} +{{- $watchNamespaces := .Values.watchNamespaces -}} +{{- if $root.Values.watchAnyNamespace }} + {{- $watchNamespaces = list -}} +{{- end }} +{{- range append $watchNamespaces .Release.Namespace }} --- apiVersion: rbac.authorization.k8s.io/v1 {{- if $root.Values.watchAnyNamespace }} diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/060-Deployment-strimzi-cluster-operator.yaml b/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/060-Deployment-strimzi-cluster-operator.yaml index 67564c1b..16e4f0f2 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/060-Deployment-strimzi-cluster-operator.yaml +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/060-Deployment-strimzi-cluster-operator.yaml @@ -140,6 +140,10 @@ spec: - name: STRIMZI_CONNECT_BUILD_TIMEOUT_MS value: {{ .Values.connectBuildTimeoutMs | quote }} {{- end }} + {{- if ne .Values.generatePodDisruptionBudget true}} + - name: STRIMZI_POD_DISRUPTION_BUDGET_GENERATION + value: {{ .Values.generatePodDisruptionBudget | quote }} + {{- end }} {{- if .Values.extraEnvs }} {{ toYaml .Values.extraEnvs | indent 12 }} {{- end }} diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/_kafka_image_map.tpl b/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/_kafka_image_map.tpl index 8b937099..c1ff9e62 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/_kafka_image_map.tpl +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/templates/_kafka_image_map.tpl @@ -6,27 +6,27 @@ {{/* Generate the kafka image map */}} {{- define "strimzi.kafka.image.map" }} - name: STRIMZI_DEFAULT_KAFKA_EXPORTER_IMAGE - value: {{ template "strimzi.image" (merge . (dict "key" "kafkaExporter" "tagSuffix" "-kafka-3.8.0")) }} + value: {{ template "strimzi.image" (merge . (dict "key" "kafkaExporter" "tagSuffix" "-kafka-3.9.0")) }} - name: STRIMZI_DEFAULT_CRUISE_CONTROL_IMAGE - value: {{ template "strimzi.image" (merge . (dict "key" "cruiseControl" "tagSuffix" "-kafka-3.8.0")) }} + value: {{ template "strimzi.image" (merge . (dict "key" "cruiseControl" "tagSuffix" "-kafka-3.9.0")) }} - name: STRIMZI_KAFKA_IMAGES value: | - 3.7.0={{ template "strimzi.image" (merge . (dict "key" "kafka" "tagSuffix" "-kafka-3.7.0")) }} - 3.7.1={{ template "strimzi.image" (merge . (dict "key" "kafka" "tagSuffix" "-kafka-3.7.1")) }} 3.8.0={{ template "strimzi.image" (merge . (dict "key" "kafka" "tagSuffix" "-kafka-3.8.0")) }} + 3.8.1={{ template "strimzi.image" (merge . (dict "key" "kafka" "tagSuffix" "-kafka-3.8.1")) }} + 3.9.0={{ template "strimzi.image" (merge . (dict "key" "kafka" "tagSuffix" "-kafka-3.9.0")) }} - name: STRIMZI_KAFKA_CONNECT_IMAGES value: | - 3.7.0={{ template "strimzi.image" (merge . (dict "key" "kafkaConnect" "tagSuffix" "-kafka-3.7.0")) }} - 3.7.1={{ template "strimzi.image" (merge . (dict "key" "kafkaConnect" "tagSuffix" "-kafka-3.7.1")) }} 3.8.0={{ template "strimzi.image" (merge . (dict "key" "kafkaConnect" "tagSuffix" "-kafka-3.8.0")) }} + 3.8.1={{ template "strimzi.image" (merge . (dict "key" "kafkaConnect" "tagSuffix" "-kafka-3.8.1")) }} + 3.9.0={{ template "strimzi.image" (merge . (dict "key" "kafkaConnect" "tagSuffix" "-kafka-3.9.0")) }} - name: STRIMZI_KAFKA_MIRROR_MAKER_IMAGES value: | - 3.7.0={{ template "strimzi.image" (merge . (dict "key" "kafkaMirrorMaker" "tagSuffix" "-kafka-3.7.0")) }} - 3.7.1={{ template "strimzi.image" (merge . (dict "key" "kafkaMirrorMaker" "tagSuffix" "-kafka-3.7.1")) }} 3.8.0={{ template "strimzi.image" (merge . (dict "key" "kafkaMirrorMaker" "tagSuffix" "-kafka-3.8.0")) }} + 3.8.1={{ template "strimzi.image" (merge . (dict "key" "kafkaMirrorMaker" "tagSuffix" "-kafka-3.8.1")) }} + 3.9.0={{ template "strimzi.image" (merge . (dict "key" "kafkaMirrorMaker" "tagSuffix" "-kafka-3.9.0")) }} - name: STRIMZI_KAFKA_MIRROR_MAKER_2_IMAGES value: | - 3.7.0={{ template "strimzi.image" (merge . (dict "key" "kafkaMirrorMaker2" "tagSuffix" "-kafka-3.7.0")) }} - 3.7.1={{ template "strimzi.image" (merge . (dict "key" "kafkaMirrorMaker2" "tagSuffix" "-kafka-3.7.1")) }} 3.8.0={{ template "strimzi.image" (merge . (dict "key" "kafkaMirrorMaker2" "tagSuffix" "-kafka-3.8.0")) }} + 3.8.1={{ template "strimzi.image" (merge . (dict "key" "kafkaMirrorMaker2" "tagSuffix" "-kafka-3.8.1")) }} + 3.9.0={{ template "strimzi.image" (merge . (dict "key" "kafkaMirrorMaker2" "tagSuffix" "-kafka-3.9.0")) }} {{- end -}} diff --git a/packages/system/kafka-operator/charts/strimzi-kafka-operator/values.yaml b/packages/system/kafka-operator/charts/strimzi-kafka-operator/values.yaml index a177e5d9..9c82c743 100644 --- a/packages/system/kafka-operator/charts/strimzi-kafka-operator/values.yaml +++ b/packages/system/kafka-operator/charts/strimzi-kafka-operator/values.yaml @@ -10,7 +10,7 @@ watchAnyNamespace: false defaultImageRegistry: quay.io defaultImageRepository: strimzi -defaultImageTag: 0.43.0 +defaultImageTag: 0.45.0 image: registry: "" @@ -126,7 +126,7 @@ kafkaBridge: registry: "" repository: name: kafka-bridge - tag: 0.30.0 + tag: 0.31.1 kafkaExporter: image: registry: "" @@ -180,4 +180,6 @@ labelsExclusionPattern: "" # Controls whether Strimzi generates network policy resources (By default true) generateNetworkPolicy: true # Override the value for Connect build timeout -connectBuildTimeoutMs: 300000 \ No newline at end of file +connectBuildTimeoutMs: 300000 +# Controls whether Strimzi generates pod disruption budget resources (By default true) +generatePodDisruptionBudget: true \ No newline at end of file From 84a23947b0b00b9cdcc2190f582145b78d2f8aad Mon Sep 17 00:00:00 2001 From: Floppy Disk Date: Wed, 12 Feb 2025 11:45:16 +0300 Subject: [PATCH 4/5] fix --- packages/apps/kafka/templates/podscrape.yaml | 6 +++--- .../templates/prometheus-rules.yaml | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/apps/kafka/templates/podscrape.yaml b/packages/apps/kafka/templates/podscrape.yaml index bbbf2916..fcf91553 100644 --- a/packages/apps/kafka/templates/podscrape.yaml +++ b/packages/apps/kafka/templates/podscrape.yaml @@ -1,7 +1,7 @@ apiVersion: operator.victoriametrics.com/v1beta1 kind: VMPodScrape metadata: - name: {{ .Release.Name }}-pod-scrape + name: {{ .Release.Name }} spec: podMetricsEndpoints: - port: tcp-prometheus @@ -20,13 +20,13 @@ spec: - sourceLabels: [__meta_kubernetes_pod_name] separator: ; regex: (.*) - targetLabel: kubernetes_pod_name + targetLabel: pod replacement: $1 action: replace - sourceLabels: [__meta_kubernetes_pod_node_name] separator: ; regex: (.*) - targetLabel: node_name + targetLabel: node replacement: $1 action: replace - sourceLabels: [__meta_kubernetes_pod_host_ip] diff --git a/packages/system/kafka-operator/templates/prometheus-rules.yaml b/packages/system/kafka-operator/templates/prometheus-rules.yaml index bc4d6f46..760ca5da 100644 --- a/packages/system/kafka-operator/templates/prometheus-rules.yaml +++ b/packages/system/kafka-operator/templates/prometheus-rules.yaml @@ -24,7 +24,7 @@ spec: severity: warning annotations: summary: 'Kafka under replicated partitions' - description: 'There are {{ $value }} under replicated partitions on {{ $labels.kubernetes_pod_name }}' + description: 'There are {{ $value }} under replicated partitions on {{ $labels.pod }}' - alert: AbnormalControllerState expr: sum(kafka_controller_kafkacontroller_activecontrollercount) by (strimzi_io_name) != 1 for: 10s @@ -48,7 +48,7 @@ spec: severity: warning annotations: summary: 'Kafka under min ISR partitions' - description: 'There are {{ $value }} partitions under the min ISR on {{ $labels.kubernetes_pod_name }}' + description: 'There are {{ $value }} partitions under the min ISR on {{ $labels.pod }}' - alert: OfflineLogDirectoryCount expr: kafka_log_logmanager_offlinelogdirectorycount > 0 for: 10s @@ -56,15 +56,15 @@ spec: severity: warning annotations: summary: 'Kafka offline log directories' - description: 'There are {{ $value }} offline log directories on {{ $labels.kubernetes_pod_name }}' + description: 'There are {{ $value }} offline log directories on {{ $labels.pod }}' - alert: ScrapeProblem - expr: up{kubernetes_namespace!~"openshift-.+",kubernetes_pod_name=~".+-kafka-[0-9]+"} == 0 + expr: up{kubernetes_namespace!~"openshift-.+",pod=~".+-kafka-[0-9]+"} == 0 for: 3m labels: severity: major annotations: - summary: 'Prometheus unable to scrape metrics from {{ $labels.kubernetes_pod_name }}/{{ $labels.instance }}' - description: 'Prometheus was unable to scrape metrics from {{ $labels.kubernetes_pod_name }}/{{ $labels.instance }} for more than 3 minutes' + summary: 'Prometheus unable to scrape metrics from {{ $labels.pod }}/{{ $labels.instance }}' + description: 'Prometheus was unable to scrape metrics from {{ $labels.pod }}/{{ $labels.instance }} for more than 3 minutes' - alert: ClusterOperatorContainerDown expr: count((container_last_seen{container="strimzi-cluster-operator"} > (time() - 90))) < 1 or absent(container_last_seen{container="strimzi-cluster-operator"}) for: 1m @@ -98,7 +98,7 @@ spec: severity: warning annotations: summary: 'Zookeeper average request latency' - description: 'The average request latency is {{ $value }} on {{ $labels.kubernetes_pod_name }}' + description: 'The average request latency is {{ $value }} on {{ $labels.pod }}' - alert: OutstandingRequests expr: zookeeper_outstandingrequests > 10 for: 10s @@ -106,7 +106,7 @@ spec: severity: warning annotations: summary: 'Zookeeper outstanding requests' - description: 'There are {{ $value }} outstanding requests on {{ $labels.kubernetes_pod_name }}' + description: 'There are {{ $value }} outstanding requests on {{ $labels.pod }}' - alert: ZookeeperRunningOutOfSpace expr: kubelet_volume_stats_available_bytes{persistentvolumeclaim=~"data-(.+)-zookeeper-[0-9]+"} < 5368709120 for: 10s From cc0222aa115f73cce76c02b127b481b6122f0c7c Mon Sep 17 00:00:00 2001 From: Floppy Disk Date: Thu, 13 Feb 2025 13:09:34 +0300 Subject: [PATCH 5/5] fix dashboard --- dashboards/kafka/strimzi-kafka.json | 80 ++++++++++++++--------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/dashboards/kafka/strimzi-kafka.json b/dashboards/kafka/strimzi-kafka.json index e7d5a5ed..4e1fbe85 100644 --- a/dashboards/kafka/strimzi-kafka.json +++ b/dashboards/kafka/strimzi-kafka.json @@ -1027,11 +1027,11 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(process_open_fds{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",container=\"kafka\"}) by (kubernetes_pod_name)", + "expr": "sum(process_open_fds{namespace=\"$kubernetes_namespace\",pod=~\"$strimzi_cluster_name-$kafka_broker\",container=\"kafka\"}) by (pod)", "format": "time_series", "hide": false, "intervalFactor": 1, - "legendFormat": "{{kubernetes_pod_name}}", + "legendFormat": "{{pod}}", "refId": "A" } ], @@ -1119,10 +1119,10 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(jvm_memory_used_bytes{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}) by (kubernetes_pod_name)", + "expr": "sum(jvm_memory_used_bytes{namespace=\"$kubernetes_namespace\",pod=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}) by (pod)", "format": "time_series", "intervalFactor": 1, - "legendFormat": "{{kubernetes_pod_name}}", + "legendFormat": "{{pod}}", "refId": "A" } ], @@ -1210,10 +1210,10 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(rate(jvm_gc_collection_seconds_sum{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}[5m])) by (kubernetes_pod_name)", + "expr": "sum(rate(jvm_gc_collection_seconds_sum{namespace=\"$kubernetes_namespace\",pod=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}[5m])) by (pod)", "format": "time_series", "intervalFactor": 1, - "legendFormat": "{{kubernetes_pod_name}}", + "legendFormat": "{{pod}}", "refId": "A" } ], @@ -1301,10 +1301,10 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(rate(jvm_gc_collection_seconds_count{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}[5m])) by (kubernetes_pod_name)", + "expr": "sum(rate(jvm_gc_collection_seconds_count{namespace=\"$kubernetes_namespace\",pod=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}[5m])) by (pod)", "format": "time_series", "intervalFactor": 1, - "legendFormat": "{{kubernetes_pod_name}}", + "legendFormat": "{{pod}}", "refId": "A" } ], @@ -1393,10 +1393,10 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(jvm_threads_current{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}) by (kubernetes_pod_name)", + "expr": "sum(jvm_threads_current{namespace=\"$kubernetes_namespace\",pod=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}) by (pod)", "format": "time_series", "intervalFactor": 1, - "legendFormat": "{{kubernetes_pod_name}}", + "legendFormat": "{{pod}}", "refId": "A" } ], @@ -1473,7 +1473,7 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(irate(kafka_server_brokertopicmetrics_bytesin_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "expr": "sum(irate(kafka_server_brokertopicmetrics_bytesin_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",pod=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -1554,7 +1554,7 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(irate(kafka_server_brokertopicmetrics_bytesout_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "expr": "sum(irate(kafka_server_brokertopicmetrics_bytesout_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",pod=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -1635,7 +1635,7 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(irate(kafka_server_brokertopicmetrics_messagesin_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "expr": "sum(irate(kafka_server_brokertopicmetrics_messagesin_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",pod=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -1716,7 +1716,7 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(irate(kafka_server_brokertopicmetrics_totalproducerequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "expr": "sum(irate(kafka_server_brokertopicmetrics_totalproducerequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",pod=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -1809,7 +1809,7 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(irate(kafka_server_brokertopicmetrics_bytesin_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "expr": "sum(irate(kafka_server_brokertopicmetrics_bytesin_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",pod=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", "format": "time_series", "hide": false, "instant": false, @@ -1820,7 +1820,7 @@ }, { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(irate(kafka_server_brokertopicmetrics_bytesout_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "expr": "sum(irate(kafka_server_brokertopicmetrics_bytesout_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",pod=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -1912,7 +1912,7 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(irate(kafka_server_brokertopicmetrics_messagesin_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "expr": "sum(irate(kafka_server_brokertopicmetrics_messagesin_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",pod=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", "format": "time_series", "intervalFactor": 1, "legendFormat": "Total Incoming Messages Rate", @@ -2004,7 +2004,7 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(irate(kafka_server_brokertopicmetrics_totalproducerequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "expr": "sum(irate(kafka_server_brokertopicmetrics_totalproducerequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",pod=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", "format": "time_series", "intervalFactor": 1, "legendFormat": "Total Produce Request Rate", @@ -2012,7 +2012,7 @@ }, { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(irate(kafka_server_brokertopicmetrics_failedproducerequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "expr": "sum(irate(kafka_server_brokertopicmetrics_failedproducerequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",pod=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -2105,7 +2105,7 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(irate(kafka_server_brokertopicmetrics_totalfetchrequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "expr": "sum(irate(kafka_server_brokertopicmetrics_totalfetchrequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",pod=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", "format": "time_series", "intervalFactor": 1, "legendFormat": "Fetch Request Rate", @@ -2113,7 +2113,7 @@ }, { "datasource": "${DS_PROMETHEUS}", - "expr": " sum(irate(kafka_server_brokertopicmetrics_failedfetchrequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", + "expr": " sum(irate(kafka_server_brokertopicmetrics_failedfetchrequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",pod=~\"$strimzi_cluster_name-$kafka_broker\"}[5m]))", "format": "time_series", "intervalFactor": 1, "legendFormat": "Failed Fetch Request Rate", @@ -2205,10 +2205,10 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(kafka_network_socketserver_networkprocessoravgidle_percent{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}*100) by (kubernetes_pod_name)", + "expr": "sum(kafka_network_socketserver_networkprocessoravgidle_percent{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",pod=~\"$strimzi_cluster_name-$kafka_broker\"}*100) by (pod)", "format": "time_series", "intervalFactor": 1, - "legendFormat": "{{kubernetes_pod_name}}", + "legendFormat": "{{pod}}", "refId": "A" } ], @@ -2297,11 +2297,11 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(kafka_server_kafkarequesthandlerpool_requesthandleravgidle_percent{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}*100) by (kubernetes_pod_name)", + "expr": "sum(kafka_server_kafkarequesthandlerpool_requesthandleravgidle_percent{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",pod=~\"$strimzi_cluster_name-$kafka_broker\"}*100) by (pod)", "format": "time_series", "hide": false, "intervalFactor": 1, - "legendFormat": "{{kubernetes_pod_name}}", + "legendFormat": "{{pod}}", "refId": "A" } ], @@ -2390,11 +2390,11 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(irate(kafka_server_kafkaserver_linux_disk_write_bytes{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m])) by (kubernetes_pod_name)", + "expr": "sum(irate(kafka_server_kafkaserver_linux_disk_write_bytes{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",pod=~\"$strimzi_cluster_name-$kafka_broker\"}[5m])) by (pod)", "format": "time_series", "hide": false, "intervalFactor": 1, - "legendFormat": "{{kubernetes_pod_name}}", + "legendFormat": "{{pod}}", "refId": "A" } ], @@ -2483,11 +2483,11 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(irate(kafka_server_kafkaserver_linux_disk_read_bytes{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[5m])) by (kubernetes_pod_name)", + "expr": "sum(irate(kafka_server_kafkaserver_linux_disk_read_bytes{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",pod=~\"$strimzi_cluster_name-$kafka_broker\"}[5m])) by (pod)", "format": "time_series", "hide": false, "intervalFactor": 1, - "legendFormat": "{{kubernetes_pod_name}}", + "legendFormat": "{{pod}}", "refId": "A" } ], @@ -2576,11 +2576,11 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(kafka_server_socket_server_metrics_connection_count{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}) by (kubernetes_pod_name, listener)", + "expr": "sum(kafka_server_socket_server_metrics_connection_count{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",pod=~\"$strimzi_cluster_name-$kafka_broker\"}) by (pod, listener)", "format": "time_series", "hide": false, "intervalFactor": 1, - "legendFormat": "{{listener}}-{{kubernetes_pod_name}}", + "legendFormat": "{{listener}}-{{pod}}", "refId": "A" } ], @@ -2646,7 +2646,7 @@ "pluginVersion": "11.4.0", "targets": [ { - "expr": "kafka_log_log_size{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",topic=~\"$kafka_topic\",partition=~\"$kafka_partition\"}", + "expr": "kafka_log_log_size{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",pod=~\"$strimzi_cluster_name-$kafka_broker\",topic=~\"$kafka_topic\",partition=~\"$kafka_partition\"}", "format": "table", "instant": true, "interval": "", @@ -2667,10 +2667,10 @@ "endpoint": true, "instance": true, "job": true, - "kubernetes_pod_name": true, + "pod": true, "namespace": true, "node_ip": true, - "node_name": true, + "node": true, "pod": true, "strimzi_io_broker_role": true, "strimzi_io_cluster": true, @@ -2691,10 +2691,10 @@ "endpoint": 4, "instance": 5, "job": 6, - "kubernetes_pod_name": 7, + "pod": 7, "namespace": 8, "node_ip": 9, - "node_name": 10, + "node": 10, "partition": 11, "pod": 12, "strimzi_io_broker_role": 13, @@ -2801,11 +2801,11 @@ "targets": [ { "datasource": "${DS_PROMETHEUS}", - "expr": "sum(kafka_server_zookeeperclientmetrics_zookeeperrequestlatencyms{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}) by (kubernetes_pod_name)", + "expr": "sum(kafka_server_zookeeperclientmetrics_zookeeperrequestlatencyms{namespace=\"$kubernetes_namespace\",pod=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}) by (pod)", "format": "time_series", "instant": false, "intervalFactor": 1, - "legendFormat": "{{kubernetes_pod_name}}", + "legendFormat": "{{pod}}", "refId": "A" } ], @@ -2897,7 +2897,7 @@ "label": "Topic", "name": "kafka_topic", "options": [], - "query": "query_result(kafka_cluster_partition_replicascount{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"})", + "query": "query_result(kafka_cluster_partition_replicascount{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",pod=~\"$strimzi_cluster_name-$kafka_broker\"})", "refresh": 1, "regex": "/.*topic=\"([^\"]*).*/", "type": "query" @@ -2919,7 +2919,7 @@ "multi": true, "name": "kafka_partition", "options": [], - "query": "query_result(kafka_log_log_size{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",topic=~\"$kafka_topic\"})", + "query": "query_result(kafka_log_log_size{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",pod=~\"$strimzi_cluster_name-$kafka_broker\",topic=~\"$kafka_topic\"})", "refresh": 1, "regex": "/.*partition=\"([^\"]*).*/", "sort": 3,