From 9de782e719d6a616bcccd8e73ea4d8ba71bffa89 Mon Sep 17 00:00:00 2001 From: Floppy Disk Date: Thu, 16 Jan 2025 13:23:56 +0300 Subject: [PATCH 01/25] 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 bf8604d0a..f20762dfb 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 f768dc1632f87438c8851ea74cc241bdbe638029 Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Fri, 7 Feb 2025 08:40:49 +0100 Subject: [PATCH 02/25] Introduce externalMethod=WholeIP for VMs (#616) Signed-off-by: Andrei Kvapil ## Summary by CodeRabbit - **New Features** - Introduced a new configuration option for specifying the method to handle external traffic. Users can now choose between "WholeIP" and "PortList" (default) across virtual machine and instance deployments. - Service settings now adjust automatically based on the selected external traffic method. - **Documentation** - Updated configuration guides to include details on the new `externalMethod` parameter and its usage for managing external traffic. --------- Signed-off-by: Andrei Kvapil --- packages/apps/versions_map | 6 +++-- packages/apps/virtual-machine/Chart.yaml | 4 +-- packages/apps/virtual-machine/Makefile | 1 + packages/apps/virtual-machine/README.md | 1 + .../virtual-machine/templates/service.yaml | 8 ++++++ .../apps/virtual-machine/values.schema.json | 9 +++++++ packages/apps/virtual-machine/values.yaml | 2 ++ packages/apps/vm-instance/Chart.yaml | 4 +-- packages/apps/vm-instance/Makefile | 1 + packages/apps/vm-instance/README.md | 25 ++++++++++--------- .../apps/vm-instance/templates/service.yaml | 8 ++++++ packages/apps/vm-instance/values.schema.json | 9 +++++++ packages/apps/vm-instance/values.yaml | 2 ++ 13 files changed, 62 insertions(+), 18 deletions(-) diff --git a/packages/apps/versions_map b/packages/apps/versions_map index ece42d416..e9e597cc1 100644 --- a/packages/apps/versions_map +++ b/packages/apps/versions_map @@ -109,13 +109,15 @@ virtual-machine 0.4.0 4746d51 virtual-machine 0.5.0 cad9cde virtual-machine 0.6.0 0e728870 virtual-machine 0.7.0 af58018a -virtual-machine 0.7.1 HEAD +virtual-machine 0.7.1 05857b95 +virtual-machine 0.8.0 HEAD vm-disk 0.1.0 HEAD vm-instance 0.1.0 ced8e5b9 vm-instance 0.2.0 4f767ee3 vm-instance 0.3.0 0e728870 vm-instance 0.4.0 af58018a -vm-instance 0.4.1 HEAD +vm-instance 0.4.1 05857b95 +vm-instance 0.5.0 HEAD vpn 0.1.0 f642698 vpn 0.2.0 7151424 vpn 0.3.0 a2bcf100 diff --git a/packages/apps/virtual-machine/Chart.yaml b/packages/apps/virtual-machine/Chart.yaml index 5ac2d8fe8..859719e21 100644 --- a/packages/apps/virtual-machine/Chart.yaml +++ b/packages/apps/virtual-machine/Chart.yaml @@ -17,10 +17,10 @@ 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.7.1 +version: 0.8.0 # 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 # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.7.1" +appVersion: "0.8.0" diff --git a/packages/apps/virtual-machine/Makefile b/packages/apps/virtual-machine/Makefile index 31ae2f191..e1bc3a911 100644 --- a/packages/apps/virtual-machine/Makefile +++ b/packages/apps/virtual-machine/Makefile @@ -8,3 +8,4 @@ generate: && yq -i -o json ".properties.instanceProfile.optional=true | .properties.instanceProfile.enum = $${PREFERENCES}" values.schema.json yq -i -o json '.properties.externalPorts.items.type = "integer"' values.schema.json yq -i -o json '.properties.systemDisk.properties.image.enum = ["ubuntu", "cirros", "alpine", "fedora", "talos"]' values.schema.json + yq -i -o json '.properties.externalMethod.enum = ["wholeIP", "PortList"]' values.schema.json diff --git a/packages/apps/virtual-machine/README.md b/packages/apps/virtual-machine/README.md index 90bf3dc42..29b22401c 100644 --- a/packages/apps/virtual-machine/README.md +++ b/packages/apps/virtual-machine/README.md @@ -39,6 +39,7 @@ virtctl ssh @ | Name | Description | Value | | ------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------- | | `external` | Enable external access from outside the cluster | `false` | +| `externalMethod` | specify method to passthrough the traffic to the virtual machine. Allowed values: `WholeIP` and `PortList` | `WholeIP` | | `externalPorts` | Specify ports to forward from outside the cluster | `[]` | | `running` | Determines if the virtual machine should be running | `true` | | `instanceType` | Virtual Machine instance type | `u1.medium` | diff --git a/packages/apps/virtual-machine/templates/service.yaml b/packages/apps/virtual-machine/templates/service.yaml index 9c1dc2aa1..eed8dbad7 100644 --- a/packages/apps/virtual-machine/templates/service.yaml +++ b/packages/apps/virtual-machine/templates/service.yaml @@ -6,6 +6,10 @@ metadata: name: {{ include "virtual-machine.fullname" . }} labels: {{- include "virtual-machine.labels" . | nindent 4 }} + {{- if eq .Values.externalMethod "WholeIP" }} + annotations: + networking.cozystack.io/wholeIP: "true" + {{- end }} spec: type: {{ ternary "LoadBalancer" "ClusterIP" .Values.external }} externalTrafficPolicy: Local @@ -13,9 +17,13 @@ spec: selector: {{- include "virtual-machine.labels" . | nindent 4 }} ports: + {{- if eq .Values.externalMethod "WholeIP" }} + - port: 65535 + {{- else }} {{- range .Values.externalPorts }} - name: port-{{ . }} port: {{ . }} targetPort: {{ . }} {{- end }} + {{- end }} {{- end }} diff --git a/packages/apps/virtual-machine/values.schema.json b/packages/apps/virtual-machine/values.schema.json index 1192b2d84..d2c53544b 100644 --- a/packages/apps/virtual-machine/values.schema.json +++ b/packages/apps/virtual-machine/values.schema.json @@ -7,6 +7,15 @@ "description": "Enable external access from outside the cluster", "default": false }, + "externalMethod": { + "type": "string", + "description": "specify method to passthrough the traffic to the virtual machine. Allowed values: `WholeIP` and `PortList`", + "default": "WholeIP", + "enum": [ + "wholeIP", + "PortList" + ] + }, "externalPorts": { "type": "array", "description": "Specify ports to forward from outside the cluster", diff --git a/packages/apps/virtual-machine/values.yaml b/packages/apps/virtual-machine/values.yaml index f1b0300e8..0d6513789 100644 --- a/packages/apps/virtual-machine/values.yaml +++ b/packages/apps/virtual-machine/values.yaml @@ -1,8 +1,10 @@ ## @section Common parameters ## @param external Enable external access from outside the cluster +## @param externalMethod specify method to passthrough the traffic to the virtual machine. Allowed values: `WholeIP` and `PortList` ## @param externalPorts [array] Specify ports to forward from outside the cluster external: false +externalMethod: WholeIP externalPorts: - 22 diff --git a/packages/apps/vm-instance/Chart.yaml b/packages/apps/vm-instance/Chart.yaml index b6fbce6ec..f5f697a39 100644 --- a/packages/apps/vm-instance/Chart.yaml +++ b/packages/apps/vm-instance/Chart.yaml @@ -17,10 +17,10 @@ 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.4.1 +version: 0.5.0 # 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 # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.4.1" +appVersion: "0.5.0" diff --git a/packages/apps/vm-instance/Makefile b/packages/apps/vm-instance/Makefile index f6e91ba78..a9aee79ca 100644 --- a/packages/apps/vm-instance/Makefile +++ b/packages/apps/vm-instance/Makefile @@ -8,3 +8,4 @@ generate: PREFERENCES=$$(yq e '.metadata.name' -o=json -r ../../system/kubevirt-instancetypes/templates/preferences.yaml | yq 'split(" ") | . + [""]' -o json) \ && yq -i -o json ".properties.instanceProfile.optional=true | .properties.instanceProfile.enum = $${PREFERENCES}" values.schema.json yq -i -o json '.properties.externalPorts.items.type = "integer"' values.schema.json + yq -i -o json '.properties.externalMethod.enum = ["WholeIP", "PortList"]' values.schema.json diff --git a/packages/apps/vm-instance/README.md b/packages/apps/vm-instance/README.md index acd14b878..53d9f614e 100644 --- a/packages/apps/vm-instance/README.md +++ b/packages/apps/vm-instance/README.md @@ -36,18 +36,19 @@ virtctl ssh @ ### Common parameters -| Name | Description | Value | -| ------------------ | ---------------------------------------------------------------------------------- | ---------------- | -| `external` | Enable external access from outside the cluster | `false` | -| `externalPorts` | Specify ports to forward from outside the cluster | `[]` | -| `running` | Determines if the virtual machine should be running | `true` | -| `instanceType` | Virtual Machine instance type | `u1.medium` | -| `instanceProfile` | Virtual Machine prefferences profile | `ubuntu` | -| `disks` | List of disks to attach | `[]` | -| `resources.cpu` | The number of CPU cores allocated to the virtual machine | `""` | -| `resources.memory` | The amount of memory allocated to the virtual machine | `""` | -| `sshKeys` | List of SSH public keys for authentication. Can be a single key or a list of keys. | `[]` | -| `cloudInit` | cloud-init user data config. See cloud-init documentation for more details. | `#cloud-config +| Name | Description | Value | +| ------------------ | ---------------------------------------------------------------------------------------------------------- | ---------------- | +| `external` | Enable external access from outside the cluster | `false` | +| `externalMethod` | specify method to passthrough the traffic to the virtual machine. Allowed values: `WholeIP` and `PortList` | `WholeIP` | +| `externalPorts` | Specify ports to forward from outside the cluster | `[]` | +| `running` | Determines if the virtual machine should be running | `true` | +| `instanceType` | Virtual Machine instance type | `u1.medium` | +| `instanceProfile` | Virtual Machine prefferences profile | `ubuntu` | +| `disks` | List of disks to attach | `[]` | +| `resources.cpu` | The number of CPU cores allocated to the virtual machine | `""` | +| `resources.memory` | The amount of memory allocated to the virtual machine | `""` | +| `sshKeys` | List of SSH public keys for authentication. Can be a single key or a list of keys. | `[]` | +| `cloudInit` | cloud-init user data config. See cloud-init documentation for more details. | `#cloud-config ` | ## U Series diff --git a/packages/apps/vm-instance/templates/service.yaml b/packages/apps/vm-instance/templates/service.yaml index 9c1dc2aa1..eed8dbad7 100644 --- a/packages/apps/vm-instance/templates/service.yaml +++ b/packages/apps/vm-instance/templates/service.yaml @@ -6,6 +6,10 @@ metadata: name: {{ include "virtual-machine.fullname" . }} labels: {{- include "virtual-machine.labels" . | nindent 4 }} + {{- if eq .Values.externalMethod "WholeIP" }} + annotations: + networking.cozystack.io/wholeIP: "true" + {{- end }} spec: type: {{ ternary "LoadBalancer" "ClusterIP" .Values.external }} externalTrafficPolicy: Local @@ -13,9 +17,13 @@ spec: selector: {{- include "virtual-machine.labels" . | nindent 4 }} ports: + {{- if eq .Values.externalMethod "WholeIP" }} + - port: 65535 + {{- else }} {{- range .Values.externalPorts }} - name: port-{{ . }} port: {{ . }} targetPort: {{ . }} {{- end }} + {{- end }} {{- end }} diff --git a/packages/apps/vm-instance/values.schema.json b/packages/apps/vm-instance/values.schema.json index 6ef0c40da..405608613 100644 --- a/packages/apps/vm-instance/values.schema.json +++ b/packages/apps/vm-instance/values.schema.json @@ -7,6 +7,15 @@ "description": "Enable external access from outside the cluster", "default": false }, + "externalMethod": { + "type": "string", + "description": "specify method to passthrough the traffic to the virtual machine. Allowed values: `WholeIP` and `PortList`", + "default": "WholeIP", + "enum": [ + "WholeIP", + "PortList" + ] + }, "externalPorts": { "type": "array", "description": "Specify ports to forward from outside the cluster", diff --git a/packages/apps/vm-instance/values.yaml b/packages/apps/vm-instance/values.yaml index b7e2f83c4..418ba7e83 100644 --- a/packages/apps/vm-instance/values.yaml +++ b/packages/apps/vm-instance/values.yaml @@ -1,8 +1,10 @@ ## @section Common parameters ## @param external Enable external access from outside the cluster +## @param externalMethod specify method to passthrough the traffic to the virtual machine. Allowed values: `WholeIP` and `PortList` ## @param externalPorts [array] Specify ports to forward from outside the cluster external: false +externalMethod: WholeIP externalPorts: - 22 From 5f406851613f19b6bb1a677e3fa6417b84138ce1 Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Fri, 7 Feb 2025 13:53:56 +0100 Subject: [PATCH 03/25] fix: running=false for the VMs (#621) ## Summary by CodeRabbit - **Chores** - Revised Virtual Machine configuration to require explicit confirmation for the running state. The system no longer auto-activates instances by default, giving users more direct control over instance activation. Existing validations continue to ensure that only valid configurations are applied, resulting in a more reliable deployment process. --- packages/apps/vm-instance/templates/vm.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apps/vm-instance/templates/vm.yaml b/packages/apps/vm-instance/templates/vm.yaml index eb6ec94b3..843ae2213 100644 --- a/packages/apps/vm-instance/templates/vm.yaml +++ b/packages/apps/vm-instance/templates/vm.yaml @@ -12,7 +12,7 @@ metadata: labels: {{- include "virtual-machine.labels" . | nindent 4 }} spec: - running: {{ .Values.running | default "true" }} + running: {{ .Values.running }} {{- with .Values.instanceType }} instancetype: kind: VirtualMachineClusterInstancetype From bf68404c53a619ec02823d2878698b053193cbba Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Fri, 7 Feb 2025 14:47:45 +0100 Subject: [PATCH 04/25] Update Talos v1.9.3 (#617) ## Summary by CodeRabbit - **Chores** - Upgraded the core installer and related system images from version v1.9.2 to v1.9.3. - Refreshed firmware and driver references for improved consistency across all installation profiles. --- packages/core/builder/values.yaml | 2 +- .../images/talos/profiles/initramfs.yaml | 16 ++++++++-------- .../images/talos/profiles/installer.yaml | 16 ++++++++-------- .../installer/images/talos/profiles/iso.yaml | 16 ++++++++-------- .../installer/images/talos/profiles/kernel.yaml | 16 ++++++++-------- .../installer/images/talos/profiles/metal.yaml | 16 ++++++++-------- .../installer/images/talos/profiles/nocloud.yaml | 16 ++++++++-------- 7 files changed, 49 insertions(+), 49 deletions(-) diff --git a/packages/core/builder/values.yaml b/packages/core/builder/values.yaml index 2dbbe11a3..fb0613543 100755 --- a/packages/core/builder/values.yaml +++ b/packages/core/builder/values.yaml @@ -1,3 +1,3 @@ talos: imager: - image: ghcr.io/siderolabs/imager:v1.9.2 + image: ghcr.io/siderolabs/imager:v1.9.3 diff --git a/packages/core/installer/images/talos/profiles/initramfs.yaml b/packages/core/installer/images/talos/profiles/initramfs.yaml index 9993ba57c..790dca83e 100644 --- a/packages/core/installer/images/talos/profiles/initramfs.yaml +++ b/packages/core/installer/images/talos/profiles/initramfs.yaml @@ -3,24 +3,24 @@ arch: amd64 platform: metal secureboot: false -version: v1.9.2 +version: v1.9.3 input: kernel: path: /usr/install/amd64/vmlinuz initramfs: path: /usr/install/amd64/initramfs.xz baseInstaller: - imageRef: ghcr.io/siderolabs/installer:v1.9.2 + imageRef: ghcr.io/siderolabs/installer:v1.9.3 systemExtensions: - - imageRef: ghcr.io/siderolabs/amd-ucode:20241210 + - imageRef: ghcr.io/siderolabs/amd-ucode:20250109 - imageRef: ghcr.io/siderolabs/amdgpu-firmware:20241110 - - imageRef: ghcr.io/siderolabs/bnx2-bnx2x:20241210 + - imageRef: ghcr.io/siderolabs/bnx2-bnx2x:20250109 - imageRef: ghcr.io/siderolabs/i915-ucode:20241110 - - imageRef: ghcr.io/siderolabs/intel-ice-firmware:20241210 + - imageRef: ghcr.io/siderolabs/intel-ice-firmware:20250109 - imageRef: ghcr.io/siderolabs/intel-ucode:20241112 - - imageRef: ghcr.io/siderolabs/qlogic-firmware:20241210 - - imageRef: ghcr.io/siderolabs/drbd:9.2.12-v1.9.2 - - imageRef: ghcr.io/siderolabs/zfs:2.2.7-v1.9.2 + - imageRef: ghcr.io/siderolabs/qlogic-firmware:20250109 + - imageRef: ghcr.io/siderolabs/drbd:9.2.12-v1.9.3 + - imageRef: ghcr.io/siderolabs/zfs:2.2.7-v1.9.3 output: kind: initramfs imageOptions: {} diff --git a/packages/core/installer/images/talos/profiles/installer.yaml b/packages/core/installer/images/talos/profiles/installer.yaml index e2199cedb..1def0f9cb 100644 --- a/packages/core/installer/images/talos/profiles/installer.yaml +++ b/packages/core/installer/images/talos/profiles/installer.yaml @@ -3,24 +3,24 @@ arch: amd64 platform: metal secureboot: false -version: v1.9.2 +version: v1.9.3 input: kernel: path: /usr/install/amd64/vmlinuz initramfs: path: /usr/install/amd64/initramfs.xz baseInstaller: - imageRef: ghcr.io/siderolabs/installer:v1.9.2 + imageRef: ghcr.io/siderolabs/installer:v1.9.3 systemExtensions: - - imageRef: ghcr.io/siderolabs/amd-ucode:20241210 + - imageRef: ghcr.io/siderolabs/amd-ucode:20250109 - imageRef: ghcr.io/siderolabs/amdgpu-firmware:20241110 - - imageRef: ghcr.io/siderolabs/bnx2-bnx2x:20241210 + - imageRef: ghcr.io/siderolabs/bnx2-bnx2x:20250109 - imageRef: ghcr.io/siderolabs/i915-ucode:20241110 - - imageRef: ghcr.io/siderolabs/intel-ice-firmware:20241210 + - imageRef: ghcr.io/siderolabs/intel-ice-firmware:20250109 - imageRef: ghcr.io/siderolabs/intel-ucode:20241112 - - imageRef: ghcr.io/siderolabs/qlogic-firmware:20241210 - - imageRef: ghcr.io/siderolabs/drbd:9.2.12-v1.9.2 - - imageRef: ghcr.io/siderolabs/zfs:2.2.7-v1.9.2 + - imageRef: ghcr.io/siderolabs/qlogic-firmware:20250109 + - imageRef: ghcr.io/siderolabs/drbd:9.2.12-v1.9.3 + - imageRef: ghcr.io/siderolabs/zfs:2.2.7-v1.9.3 output: kind: installer imageOptions: {} diff --git a/packages/core/installer/images/talos/profiles/iso.yaml b/packages/core/installer/images/talos/profiles/iso.yaml index c0314db73..8550ed40e 100644 --- a/packages/core/installer/images/talos/profiles/iso.yaml +++ b/packages/core/installer/images/talos/profiles/iso.yaml @@ -3,24 +3,24 @@ arch: amd64 platform: metal secureboot: false -version: v1.9.2 +version: v1.9.3 input: kernel: path: /usr/install/amd64/vmlinuz initramfs: path: /usr/install/amd64/initramfs.xz baseInstaller: - imageRef: ghcr.io/siderolabs/installer:v1.9.2 + imageRef: ghcr.io/siderolabs/installer:v1.9.3 systemExtensions: - - imageRef: ghcr.io/siderolabs/amd-ucode:20241210 + - imageRef: ghcr.io/siderolabs/amd-ucode:20250109 - imageRef: ghcr.io/siderolabs/amdgpu-firmware:20241110 - - imageRef: ghcr.io/siderolabs/bnx2-bnx2x:20241210 + - imageRef: ghcr.io/siderolabs/bnx2-bnx2x:20250109 - imageRef: ghcr.io/siderolabs/i915-ucode:20241110 - - imageRef: ghcr.io/siderolabs/intel-ice-firmware:20241210 + - imageRef: ghcr.io/siderolabs/intel-ice-firmware:20250109 - imageRef: ghcr.io/siderolabs/intel-ucode:20241112 - - imageRef: ghcr.io/siderolabs/qlogic-firmware:20241210 - - imageRef: ghcr.io/siderolabs/drbd:9.2.12-v1.9.2 - - imageRef: ghcr.io/siderolabs/zfs:2.2.7-v1.9.2 + - imageRef: ghcr.io/siderolabs/qlogic-firmware:20250109 + - imageRef: ghcr.io/siderolabs/drbd:9.2.12-v1.9.3 + - imageRef: ghcr.io/siderolabs/zfs:2.2.7-v1.9.3 output: kind: iso imageOptions: {} diff --git a/packages/core/installer/images/talos/profiles/kernel.yaml b/packages/core/installer/images/talos/profiles/kernel.yaml index 6149be11c..9c70334b6 100644 --- a/packages/core/installer/images/talos/profiles/kernel.yaml +++ b/packages/core/installer/images/talos/profiles/kernel.yaml @@ -3,24 +3,24 @@ arch: amd64 platform: metal secureboot: false -version: v1.9.2 +version: v1.9.3 input: kernel: path: /usr/install/amd64/vmlinuz initramfs: path: /usr/install/amd64/initramfs.xz baseInstaller: - imageRef: ghcr.io/siderolabs/installer:v1.9.2 + imageRef: ghcr.io/siderolabs/installer:v1.9.3 systemExtensions: - - imageRef: ghcr.io/siderolabs/amd-ucode:20241210 + - imageRef: ghcr.io/siderolabs/amd-ucode:20250109 - imageRef: ghcr.io/siderolabs/amdgpu-firmware:20241110 - - imageRef: ghcr.io/siderolabs/bnx2-bnx2x:20241210 + - imageRef: ghcr.io/siderolabs/bnx2-bnx2x:20250109 - imageRef: ghcr.io/siderolabs/i915-ucode:20241110 - - imageRef: ghcr.io/siderolabs/intel-ice-firmware:20241210 + - imageRef: ghcr.io/siderolabs/intel-ice-firmware:20250109 - imageRef: ghcr.io/siderolabs/intel-ucode:20241112 - - imageRef: ghcr.io/siderolabs/qlogic-firmware:20241210 - - imageRef: ghcr.io/siderolabs/drbd:9.2.12-v1.9.2 - - imageRef: ghcr.io/siderolabs/zfs:2.2.7-v1.9.2 + - imageRef: ghcr.io/siderolabs/qlogic-firmware:20250109 + - imageRef: ghcr.io/siderolabs/drbd:9.2.12-v1.9.3 + - imageRef: ghcr.io/siderolabs/zfs:2.2.7-v1.9.3 output: kind: kernel imageOptions: {} diff --git a/packages/core/installer/images/talos/profiles/metal.yaml b/packages/core/installer/images/talos/profiles/metal.yaml index 2d201a9f0..c32b82b1d 100644 --- a/packages/core/installer/images/talos/profiles/metal.yaml +++ b/packages/core/installer/images/talos/profiles/metal.yaml @@ -3,24 +3,24 @@ arch: amd64 platform: metal secureboot: false -version: v1.9.2 +version: v1.9.3 input: kernel: path: /usr/install/amd64/vmlinuz initramfs: path: /usr/install/amd64/initramfs.xz baseInstaller: - imageRef: ghcr.io/siderolabs/installer:v1.9.2 + imageRef: ghcr.io/siderolabs/installer:v1.9.3 systemExtensions: - - imageRef: ghcr.io/siderolabs/amd-ucode:20241210 + - imageRef: ghcr.io/siderolabs/amd-ucode:20250109 - imageRef: ghcr.io/siderolabs/amdgpu-firmware:20241110 - - imageRef: ghcr.io/siderolabs/bnx2-bnx2x:20241210 + - imageRef: ghcr.io/siderolabs/bnx2-bnx2x:20250109 - imageRef: ghcr.io/siderolabs/i915-ucode:20241110 - - imageRef: ghcr.io/siderolabs/intel-ice-firmware:20241210 + - imageRef: ghcr.io/siderolabs/intel-ice-firmware:20250109 - imageRef: ghcr.io/siderolabs/intel-ucode:20241112 - - imageRef: ghcr.io/siderolabs/qlogic-firmware:20241210 - - imageRef: ghcr.io/siderolabs/drbd:9.2.12-v1.9.2 - - imageRef: ghcr.io/siderolabs/zfs:2.2.7-v1.9.2 + - imageRef: ghcr.io/siderolabs/qlogic-firmware:20250109 + - imageRef: ghcr.io/siderolabs/drbd:9.2.12-v1.9.3 + - imageRef: ghcr.io/siderolabs/zfs:2.2.7-v1.9.3 output: kind: image imageOptions: { diskSize: 1306525696, diskFormat: raw } diff --git a/packages/core/installer/images/talos/profiles/nocloud.yaml b/packages/core/installer/images/talos/profiles/nocloud.yaml index a2373c9ef..67a8d14be 100644 --- a/packages/core/installer/images/talos/profiles/nocloud.yaml +++ b/packages/core/installer/images/talos/profiles/nocloud.yaml @@ -3,24 +3,24 @@ arch: amd64 platform: nocloud secureboot: false -version: v1.9.2 +version: v1.9.3 input: kernel: path: /usr/install/amd64/vmlinuz initramfs: path: /usr/install/amd64/initramfs.xz baseInstaller: - imageRef: ghcr.io/siderolabs/installer:v1.9.2 + imageRef: ghcr.io/siderolabs/installer:v1.9.3 systemExtensions: - - imageRef: ghcr.io/siderolabs/amd-ucode:20241210 + - imageRef: ghcr.io/siderolabs/amd-ucode:20250109 - imageRef: ghcr.io/siderolabs/amdgpu-firmware:20241110 - - imageRef: ghcr.io/siderolabs/bnx2-bnx2x:20241210 + - imageRef: ghcr.io/siderolabs/bnx2-bnx2x:20250109 - imageRef: ghcr.io/siderolabs/i915-ucode:20241110 - - imageRef: ghcr.io/siderolabs/intel-ice-firmware:20241210 + - imageRef: ghcr.io/siderolabs/intel-ice-firmware:20250109 - imageRef: ghcr.io/siderolabs/intel-ucode:20241112 - - imageRef: ghcr.io/siderolabs/qlogic-firmware:20241210 - - imageRef: ghcr.io/siderolabs/drbd:9.2.12-v1.9.2 - - imageRef: ghcr.io/siderolabs/zfs:2.2.7-v1.9.2 + - imageRef: ghcr.io/siderolabs/qlogic-firmware:20250109 + - imageRef: ghcr.io/siderolabs/drbd:9.2.12-v1.9.3 + - imageRef: ghcr.io/siderolabs/zfs:2.2.7-v1.9.3 output: kind: image imageOptions: { diskSize: 1306525696, diskFormat: raw } From dacabe63172b3e294d0ba97f27d996ffa3921939 Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Sat, 8 Feb 2025 22:07:12 +0100 Subject: [PATCH 05/25] Update cozy-proxy v0.1.1 (#624) --- packages/system/cozy-proxy/Chart.yaml | 2 +- packages/system/cozy-proxy/charts/cozy-proxy/values.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/system/cozy-proxy/Chart.yaml b/packages/system/cozy-proxy/Chart.yaml index 5dd1730b4..9be3ef017 100644 --- a/packages/system/cozy-proxy/Chart.yaml +++ b/packages/system/cozy-proxy/Chart.yaml @@ -1,3 +1,3 @@ apiVersion: v2 -name: cozy-cozystack-api +name: cozy-cozy-proxy version: 0.0.0 # Placeholder, the actual version will be automatically set during the build process diff --git a/packages/system/cozy-proxy/charts/cozy-proxy/values.yaml b/packages/system/cozy-proxy/charts/cozy-proxy/values.yaml index 57d246b55..099f29055 100644 --- a/packages/system/cozy-proxy/charts/cozy-proxy/values.yaml +++ b/packages/system/cozy-proxy/charts/cozy-proxy/values.yaml @@ -1,6 +1,6 @@ image: repository: ghcr.io/aenix-io/cozystack/cozy-proxy - tag: v0.1.0 + tag: v0.1.1 pullPolicy: IfNotPresent daemonset: From 6245976d3e144545078ffc11112000bed9228367 Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Sat, 8 Feb 2025 22:07:24 +0100 Subject: [PATCH 06/25] Fix bootbox chartname (#623) --- packages/system/bootbox/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/system/bootbox/Chart.yaml b/packages/system/bootbox/Chart.yaml index dabadb656..1a0c732fb 100644 --- a/packages/system/bootbox/Chart.yaml +++ b/packages/system/bootbox/Chart.yaml @@ -1,3 +1,3 @@ apiVersion: v2 -name: cozy-smee +name: cozy-bootbox version: 0.0.0 # Placeholder, the actual version will be automatically set during the build process From 3fa4dd3af95a71659801b5c147cb0cce7329789b Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Sun, 9 Feb 2025 11:41:28 +0100 Subject: [PATCH 07/25] Prepare release v0.25.0 (#622) Signed-off-by: Andrei Kvapil ## Summary by CodeRabbit - **Chores** - Upgraded multiple system components to the latest version, ensuring improved performance, stability, and enhanced security. - Updated deployment and testing configurations across the platform for a more reliable user experience. Signed-off-by: Andrei Kvapil --- Makefile | 1 + manifests/cozystack-installer.yaml | 4 ++-- packages/apps/http-cache/images/nginx-cache.tag | 2 +- packages/apps/kubernetes/images/kubevirt-cloud-provider.tag | 2 +- packages/apps/kubernetes/images/kubevirt-csi-driver.tag | 2 +- packages/apps/kubernetes/images/ubuntu-container-disk.tag | 2 +- packages/core/installer/values.yaml | 2 +- packages/core/testing/values.yaml | 2 +- packages/extra/bootbox/images/matchbox.tag | 2 +- packages/extra/monitoring/images/grafana.tag | 2 +- packages/system/bucket/images/s3manager.tag | 2 +- packages/system/cilium/values.yaml | 4 ++-- packages/system/cozystack-api/values.yaml | 2 +- packages/system/cozystack-controller/values.yaml | 4 ++-- .../charts/kubeapps/templates/dashboard/configmap.yaml | 2 +- packages/system/dashboard/values.yaml | 4 ++-- packages/system/kamaji/values.yaml | 2 +- packages/system/kubeovn/values.yaml | 2 +- 18 files changed, 22 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index dda80d2e4..1126c917f 100644 --- a/Makefile +++ b/Makefile @@ -36,6 +36,7 @@ assets: make -C packages/core/installer/ assets test: + test -f _out/assets/nocloud-amd64.raw.xz || make -C packages/core/installer talos-nocloud make -C packages/core/testing apply make -C packages/core/testing test make -C packages/core/testing test-applications diff --git a/manifests/cozystack-installer.yaml b/manifests/cozystack-installer.yaml index c998e60bf..b602a3aa4 100644 --- a/manifests/cozystack-installer.yaml +++ b/manifests/cozystack-installer.yaml @@ -68,7 +68,7 @@ spec: serviceAccountName: cozystack containers: - name: cozystack - image: "ghcr.io/aenix-io/cozystack/cozystack:v0.24.1" + image: "ghcr.io/aenix-io/cozystack/cozystack:v0.25.0" env: - name: KUBERNETES_SERVICE_HOST value: localhost @@ -87,7 +87,7 @@ spec: fieldRef: fieldPath: metadata.name - name: assets - image: "ghcr.io/aenix-io/cozystack/cozystack:v0.24.1" + image: "ghcr.io/aenix-io/cozystack/cozystack:v0.25.0" command: - /usr/bin/cozystack-assets-server - "-dir=/cozystack/assets" diff --git a/packages/apps/http-cache/images/nginx-cache.tag b/packages/apps/http-cache/images/nginx-cache.tag index a5bb57007..f7046a4b6 100644 --- a/packages/apps/http-cache/images/nginx-cache.tag +++ b/packages/apps/http-cache/images/nginx-cache.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/nginx-cache:0.3.1@sha256:b311eb8eb0c50a2707a6aef06a34a33c3ca40f2041eb30e73dd338ea3d11f33e +ghcr.io/aenix-io/cozystack/nginx-cache:0.3.1@sha256:f30e9bd4b8a2a4362b88ac8974b12ed1ded631c4eeea87831bb446bb302b2e29 diff --git a/packages/apps/kubernetes/images/kubevirt-cloud-provider.tag b/packages/apps/kubernetes/images/kubevirt-cloud-provider.tag index f80e6d627..71c14ceca 100644 --- a/packages/apps/kubernetes/images/kubevirt-cloud-provider.tag +++ b/packages/apps/kubernetes/images/kubevirt-cloud-provider.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/kubevirt-cloud-provider:0.15.0@sha256:22302ca96a146617636bda107991825f6fcdb4599d360ab392aca1c00ed81a94 +ghcr.io/aenix-io/cozystack/kubevirt-cloud-provider:0.15.0@sha256:5efee8f76d0948936255c4cabad58057523502f77ceb40216ffae7e02841f85b diff --git a/packages/apps/kubernetes/images/kubevirt-csi-driver.tag b/packages/apps/kubernetes/images/kubevirt-csi-driver.tag index ea03b8026..66fb29586 100644 --- a/packages/apps/kubernetes/images/kubevirt-csi-driver.tag +++ b/packages/apps/kubernetes/images/kubevirt-csi-driver.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/kubevirt-csi-driver:0.15.0@sha256:1318c7612391186b2a5d96c6fed2d13bd8fb2f6c13770e29e5d5abc517d9c138 +ghcr.io/aenix-io/cozystack/kubevirt-csi-driver:0.15.0@sha256:daac6de8ad25de9d30eb5e928271cebaaa59193889231a54fd4f60e8a1c5f51a diff --git a/packages/apps/kubernetes/images/ubuntu-container-disk.tag b/packages/apps/kubernetes/images/ubuntu-container-disk.tag index d7618da4f..20693c075 100644 --- a/packages/apps/kubernetes/images/ubuntu-container-disk.tag +++ b/packages/apps/kubernetes/images/ubuntu-container-disk.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/ubuntu-container-disk:v1.30.1@sha256:e4d153f11a545276cd299e893c28bf21c64eefa64ea25dbba3a0b40df0e3dbe9 +ghcr.io/aenix-io/cozystack/ubuntu-container-disk:v1.30.1@sha256:7bacb7853e656b6149c3a38c5cd925891011eb94358d4d11e154082ab8b3a643 diff --git a/packages/core/installer/values.yaml b/packages/core/installer/values.yaml index dd1b87db2..3561a91fb 100644 --- a/packages/core/installer/values.yaml +++ b/packages/core/installer/values.yaml @@ -1,2 +1,2 @@ cozystack: - image: ghcr.io/aenix-io/cozystack/cozystack:v0.24.1@sha256:2a07ec771337e41720196311ef53b120f2925abfc389eb36bc3c785c71817abd + image: ghcr.io/aenix-io/cozystack/cozystack:v0.25.0@sha256:86860fd1ddcd9709cb2a756409bc4983c44cd09b961d3b677469767fc93a7e36 diff --git a/packages/core/testing/values.yaml b/packages/core/testing/values.yaml index 9d4ff5579..af8fc2375 100755 --- a/packages/core/testing/values.yaml +++ b/packages/core/testing/values.yaml @@ -1,2 +1,2 @@ e2e: - image: ghcr.io/aenix-io/cozystack/e2e-sandbox:v0.24.1@sha256:3b4db74ce6225599fcf172a575a099e0ed365c81e62eb264bb49e38387232031 + image: ghcr.io/aenix-io/cozystack/e2e-sandbox:v0.25.0@sha256:c9165c329fd2536e0342345792586d3e6f4007a6e6bd2cce133f17088fd3e785 diff --git a/packages/extra/bootbox/images/matchbox.tag b/packages/extra/bootbox/images/matchbox.tag index a6d547891..8e360bad0 100644 --- a/packages/extra/bootbox/images/matchbox.tag +++ b/packages/extra/bootbox/images/matchbox.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/matchbox:v0.24.1@sha256:002d540c3a5583bfadbcbd436c2e582e51fc854068a2a7d2dba41072e921ca96 \ No newline at end of file +ghcr.io/aenix-io/cozystack/matchbox:v0.25.0@sha256:ffcfc340f19c7c6bc50f49d75b41c802df9bddc71d9e6fdeb9b9ad7dc242a5d1 diff --git a/packages/extra/monitoring/images/grafana.tag b/packages/extra/monitoring/images/grafana.tag index 4948a2ec5..6c2e9856b 100644 --- a/packages/extra/monitoring/images/grafana.tag +++ b/packages/extra/monitoring/images/grafana.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/grafana:1.8.0@sha256:1a484f970903cc38745251f3fbc1d4737065f2d0a8a08c0adccc8972aa25aa59 +ghcr.io/aenix-io/cozystack/grafana:1.8.0@sha256:0377abd3cb2c6e27b12ac297f1859aa4d550f1aa14989f824f2315d0dfd1a5b2 diff --git a/packages/system/bucket/images/s3manager.tag b/packages/system/bucket/images/s3manager.tag index 4165b940e..956ec0ea8 100644 --- a/packages/system/bucket/images/s3manager.tag +++ b/packages/system/bucket/images/s3manager.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/s3manager:v0.5.0@sha256:ced16c5ef3869e8ffbd0e880693b78ac47bdf310efcdb3e66ece6b22aaa5a75f +ghcr.io/aenix-io/cozystack/s3manager:v0.5.0@sha256:e4a4ab82290e6fc940beb799d5c15c7ed76f9752d3fce21fae6c2596a5da20b0 diff --git a/packages/system/cilium/values.yaml b/packages/system/cilium/values.yaml index 7b753b2c1..70ac5c9f3 100644 --- a/packages/system/cilium/values.yaml +++ b/packages/system/cilium/values.yaml @@ -12,7 +12,7 @@ cilium: mode: "kubernetes" image: repository: ghcr.io/aenix-io/cozystack/cilium - tag: 1.16.5 - digest: "sha256:eae9d5531c115f8946990a731bfaaebc905b020a2957559b3c9f2ce1c655a834" + tag: 1.16.6 + digest: "sha256:cf64df62897b071d5a9a005564ecbfb9124aa82a96957e329ce28a187864f113" envoy: enabled: false diff --git a/packages/system/cozystack-api/values.yaml b/packages/system/cozystack-api/values.yaml index a06b6c662..b69ecac8a 100644 --- a/packages/system/cozystack-api/values.yaml +++ b/packages/system/cozystack-api/values.yaml @@ -1,2 +1,2 @@ cozystackAPI: - image: ghcr.io/aenix-io/cozystack/cozystack-api:v0.24.1@sha256:ab6f4852be7d2be5deea8ace6f8901d8cbf41e87d219fdb805047f7a2bcbd2ed + image: ghcr.io/aenix-io/cozystack/cozystack-api:v0.25.0@sha256:513c49f8e2c1e2489faff03aacfcd609324ed5dc31ac594f9dd8a6feec0e7884 diff --git a/packages/system/cozystack-controller/values.yaml b/packages/system/cozystack-controller/values.yaml index 7b583eb22..92b28c61e 100644 --- a/packages/system/cozystack-controller/values.yaml +++ b/packages/system/cozystack-controller/values.yaml @@ -1,5 +1,5 @@ cozystackController: - image: ghcr.io/aenix-io/cozystack/cozystack-controller:v0.24.1@sha256:e59a04c072c0c50c3174b34329830d05266f3c87a4235dc8fbd78d91be9ceb2c + image: ghcr.io/aenix-io/cozystack/cozystack-controller:v0.25.0@sha256:9fe9369a88f7bf317bf84cf05fe733f50879467bf7b2ab58f50d914ff1b253cc debug: false disableTelemetry: false - cozystackVersion: "v0.24.1" + cozystackVersion: "v0.25.0" diff --git a/packages/system/dashboard/charts/kubeapps/templates/dashboard/configmap.yaml b/packages/system/dashboard/charts/kubeapps/templates/dashboard/configmap.yaml index bb4782af3..b7fb2ccf4 100644 --- a/packages/system/dashboard/charts/kubeapps/templates/dashboard/configmap.yaml +++ b/packages/system/dashboard/charts/kubeapps/templates/dashboard/configmap.yaml @@ -76,7 +76,7 @@ data: "kubeappsNamespace": {{ .Release.Namespace | quote }}, "helmGlobalNamespace": {{ include "kubeapps.helmGlobalPackagingNamespace" . | quote }}, "carvelGlobalNamespace": {{ .Values.kubeappsapis.pluginConfig.kappController.packages.v1alpha1.globalPackagingNamespace | quote }}, - "appVersion": "v0.24.1", + "appVersion": "v0.25.0", "authProxyEnabled": {{ .Values.authProxy.enabled }}, "oauthLoginURI": {{ .Values.authProxy.oauthLoginURI | quote }}, "oauthLogoutURI": {{ .Values.authProxy.oauthLogoutURI | quote }}, diff --git a/packages/system/dashboard/values.yaml b/packages/system/dashboard/values.yaml index aebc11be1..ca7a32a07 100644 --- a/packages/system/dashboard/values.yaml +++ b/packages/system/dashboard/values.yaml @@ -40,13 +40,13 @@ kubeapps: image: registry: ghcr.io/aenix-io/cozystack repository: dashboard - tag: v0.24.1 + tag: v0.25.0 digest: "sha256:81e7b625c667bce5fc339eb97c8e115eafb82f66df4501550b3677ac53f6e234" kubeappsapis: image: registry: ghcr.io/aenix-io/cozystack repository: kubeapps-apis - tag: v0.24.1 + tag: v0.25.0 digest: "sha256:72308ae00344d48e7ed58c5b1383874e84bcd82ac53b76857172b9ef510d53a6" pluginConfig: flux: diff --git a/packages/system/kamaji/values.yaml b/packages/system/kamaji/values.yaml index e6cf7d04f..20eba221b 100644 --- a/packages/system/kamaji/values.yaml +++ b/packages/system/kamaji/values.yaml @@ -3,7 +3,7 @@ kamaji: deploy: false image: pullPolicy: IfNotPresent - tag: v0.24.1@sha256:97a69a1ec6669d395f1d6875998903f94faf8f171d2c29f35c2f8b66fa06e676 + tag: v0.25.0@sha256:948a496a23b4b3158517473afd74a693380bfecb9f5346c214c8beef6deb405a repository: ghcr.io/aenix-io/cozystack/kamaji resources: limits: diff --git a/packages/system/kubeovn/values.yaml b/packages/system/kubeovn/values.yaml index 65f900816..717d0fe0b 100644 --- a/packages/system/kubeovn/values.yaml +++ b/packages/system/kubeovn/values.yaml @@ -22,4 +22,4 @@ global: images: kubeovn: repository: kubeovn - tag: v1.13.2@sha256:f7c33e8b29dfe0fa908db994cdb8c4026ac562975e9ad70c8a4c81c0319d62a9 + tag: v1.13.2@sha256:fccaf6b1f6514378f4ba2e17399af5b0c20ecf13f78142409848486b0992e5fd From b75aaf177b0e02dd92bc588ad08df70c1fc29be9 Mon Sep 17 00:00:00 2001 From: Floppy Disk Date: Mon, 10 Feb 2025 13:29:17 +0300 Subject: [PATCH 08/25] 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 000000000..e7d5a5ed1 --- /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 e3a2ed533..61d2ad5d3 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 ef5ef5fa6..ec425b028 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 eed36f63c..0134ca5a2 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 000000000..da2a15dab --- /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 000000000..bbbf29169 --- /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 e9e597cc1..85c0ded7c 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 8c1c8ab5a..0de7bfd65 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 000000000..bc4d6f46f --- /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 09/25] 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 | 2140 +++++++++-------- .../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, 2530 insertions(+), 1090 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 9b05f6b55..f6974bede 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 a725ddea3..e66e9fd71 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 166ebe3db..a5d0bb9ee 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 560ac7e83..661820071 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 7d988b36c..1e6d6ce44 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 5109f40a9..8355ae957 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 0a682070e..25a8b74a9 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 18f2a1b66..55b514a85 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 aefb1c360..024b15248 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 66f66fc5f..2e48bf0a2 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: - 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: + 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 - 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: + 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 - 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: + description: Specifies a specific persistent volume to use. It contains key:value pairs representing labels for selecting such a volume. + size: 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: + 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: - labels: - additionalProperties: - type: string - type: object - description: Labels added to the Kubernetes resource. - annotations: + 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: Annotations added to the Kubernetes resource. - description: Metadata applied to the resource. - description: Template for Kafka `StrimziPodSet` resource. - pod: - type: object - properties: - metadata: + 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: - 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: - 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: + 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: - appArmorProfile: - type: object - properties: - localhostProfile: - type: string - type: - type: string - fsGroup: - type: integer - fsGroupChangePolicy: + name: type: string - runAsGroup: - type: integer - runAsNonRoot: - type: boolean - runAsUser: - type: integer - seLinuxOptions: - type: object - properties: - level: + 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 - role: + type: object + description: Labels added to the Kubernetes resource. + annotations: + additionalProperties: type: string - type: + 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 - user: + type: object + description: Labels added to the Kubernetes resource. + annotations: + additionalProperties: type: string - seccompProfile: + type: object + description: Annotations added to the Kubernetes resource. + description: Metadata applied to the resource. + imagePullSecrets: + type: array + items: type: object properties: - localhostProfile: + name: type: string - type: - type: string - supplementalGroups: - 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: + appArmorProfile: + type: object + properties: + localhostProfile: + type: string + type: + type: string + fsGroup: type: integer - sysctls: - type: array - items: + fsGroupChangePolicy: + type: string + runAsGroup: + type: integer + runAsNonRoot: + type: boolean + runAsUser: + type: integer + seLinuxOptions: type: object properties: - name: + level: type: string - value: + role: 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: + 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: + 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: - preference: - type: object - properties: - matchExpressions: - type: array - items: + 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: - key: - type: string - operator: - type: string - values: + matchExpressions: type: array items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + matchLabels: + additionalProperties: type: string - matchFields: - type: array - items: + type: object + matchLabelKeys: + type: array + items: + type: string + mismatchLabelKeys: + type: array + items: + type: string + namespaceSelector: type: object properties: - key: - type: string - operator: - type: string - values: + matchExpressions: type: array items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + matchLabels: + additionalProperties: type: string - weight: - type: integer - requiredDuringSchedulingIgnoredDuringExecution: - type: object - properties: - nodeSelectorTerms: - type: array - items: - type: object - properties: - matchExpressions: - type: array - items: + 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: - key: - type: string - operator: - type: string - values: + matchExpressions: type: array items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + matchLabels: + additionalProperties: type: string - matchFields: - type: array - items: + type: object + matchLabelKeys: + type: array + items: + type: string + mismatchLabelKeys: + type: array + items: + type: string + namespaceSelector: type: object properties: - key: - type: string - operator: - type: string - values: + matchExpressions: type: array items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + matchLabels: + additionalProperties: 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: + namespaces: + type: array + items: + type: string + topologyKey: 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 + weight: + type: integer + requiredDuringSchedulingIgnoredDuringExecution: + type: array + items: + type: object + properties: + labelSelector: + type: object + properties: + matchExpressions: + type: array + items: 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: + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + matchLabels: + additionalProperties: + type: string type: object - properties: - key: - type: string - operator: - type: string - values: - type: array - items: + 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 - matchLabels: - additionalProperties: - type: string - type: object - matchLabelKeys: - type: array - items: - type: string - mismatchLabelKeys: - type: array - items: + operator: + type: string + values: + type: array + items: + type: string + matchLabels: + additionalProperties: + type: string + type: object + namespaces: + type: array + items: + type: string + topologyKey: type: string - namespaceSelector: + 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: + key: + type: string + operator: + type: string + 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 - namespaces: - type: array - items: - type: string - topologyKey: + matchLabels: + additionalProperties: type: string - podAntiAffinity: + 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: - preferredDuringSchedulingIgnoredDuringExecution: + hostnames: type: array items: - type: object - properties: - podAffinityTerm: + 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: - 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: + mode: + type: integer + path: + 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: 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: + 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 - mismatchLabelKeys: - type: array - items: + format: 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: + 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 - topologyKey: + readOnly: + type: boolean + volumeAttributes: + additionalProperties: type: string - description: The pod's affinity rules. - tolerations: - type: array - items: + 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: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - type: integer - value: - type: string - description: The pod's tolerations. - topologySpreadConstraints: - type: array - items: + 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: - labelSelector: + labels: + additionalProperties: + type: string 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: + description: Labels added to the Kubernetes resource. + annotations: + additionalProperties: 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 + 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: - hostnames: - type: array - items: + labels: + additionalProperties: 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 + 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: - name: - type: string - description: Name to use for the volume. Required. - secret: + labels: + additionalProperties: + type: string type: object - properties: - defaultMode: - type: integer - items: - type: array - items: + 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: + 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: + localhostProfile: type: string - optional: - type: boolean - description: ConfigMap to use to populate the volume. - emptyDir: + 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: - medium: + level: type: string - sizeLimit: - type: object - properties: - amount: - type: string - format: - type: string - description: EmptyDir to use to populate the volume. - persistentVolumeClaim: + role: + type: string + type: + type: string + user: + type: string + seccompProfile: type: object properties: - claimName: + localhostProfile: type: string - readOnly: - 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: + type: type: string - drop: - type: array - items: + windowsOptions: + type: object + properties: + gmsaCredentialSpec: type: string - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - type: integer - runAsNonRoot: - type: boolean - runAsUser: - type: integer - seLinuxOptions: + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + 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: + readOnly: + type: boolean + recursiveReadOnly: type: string - seccompProfile: - type: object - properties: - localhostProfile: + subPath: type: string - type: + subPathExpr: type: string - windowsOptions: + 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: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: + name: type: string - hostProcess: - type: boolean - runAsUserName: + description: The environment variable key. + value: type: string - description: Security context for the container. - volumeMounts: - type: array - items: + 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: - 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: - type: object - properties: - env: - type: array - items: - type: object - properties: - name: - type: string - description: The environment variable key. - value: + 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 - 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: + readOnlyRootFilesystem: + type: boolean + runAsGroup: + type: integer + runAsNonRoot: + type: boolean + runAsUser: + type: integer + seLinuxOptions: + type: object + properties: + level: type: string - drop: - type: array - items: + role: type: string - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - type: integer - runAsNonRoot: - type: boolean - runAsUser: - type: integer - seLinuxOptions: + 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: - level: - type: string - role: - type: string - type: + mountPath: type: string - user: + mountPropagation: type: string - seccompProfile: - type: object - properties: - localhostProfile: + name: type: string - type: - type: string - windowsOptions: - type: object - properties: - gmsaCredentialSpec: + readOnly: + type: boolean + recursiveReadOnly: type: string - gmsaCredentialSpecName: + subPath: type: string - hostProcess: - type: boolean - runAsUserName: + subPathExpr: 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: + 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: integer + description: Node IDs used by Kafka nodes in this pool. + clusterId: + type: string + 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: Node IDs used by Kafka nodes in this pool. - clusterId: - type: string - description: Kafka cluster ID. - roles: - type: array - items: + description: The current number of pods being used to provide this resource. + labelSelector: 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: 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 e41874945..96055f96e 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 630ba6d73..dae5166d6 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 55394c640..0f70ff131 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 2eacd13d0..57cac997f 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 1d5e31510..f222a4b0a 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 67564c1b7..16e4f0f22 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 8b9370993..c1ff9e62b 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 a177e5d92..9c82c743b 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 10/25] 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 bbbf29169..fcf915538 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 bc4d6f46f..760ca5dad 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 e2e32096a31e5a565fbfa0fb9257357459d8055d Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Wed, 12 Feb 2025 14:03:10 +0100 Subject: [PATCH 11/25] Fix VM services selector (#627) Signed-off-by: Andrei Kvapil ## Summary by CodeRabbit - **Chores** - Updated deployment configurations with the latest application versions (0.8.1 and 0.5.1) to ensure improved stability and compatibility. - **Bug Fixes** - Enhanced service connectivity by refining the criteria used for routing requests to the correct application endpoints. Signed-off-by: Andrei Kvapil --- packages/apps/virtual-machine/Chart.yaml | 4 ++-- packages/apps/virtual-machine/templates/service.yaml | 2 +- packages/apps/vm-instance/Chart.yaml | 4 ++-- packages/apps/vm-instance/templates/service.yaml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/apps/virtual-machine/Chart.yaml b/packages/apps/virtual-machine/Chart.yaml index 859719e21..dedc9df0e 100644 --- a/packages/apps/virtual-machine/Chart.yaml +++ b/packages/apps/virtual-machine/Chart.yaml @@ -17,10 +17,10 @@ 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.8.0 +version: 0.8.1 # 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 # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.8.0" +appVersion: "0.8.1" diff --git a/packages/apps/virtual-machine/templates/service.yaml b/packages/apps/virtual-machine/templates/service.yaml index eed8dbad7..7840d2db3 100644 --- a/packages/apps/virtual-machine/templates/service.yaml +++ b/packages/apps/virtual-machine/templates/service.yaml @@ -15,7 +15,7 @@ spec: externalTrafficPolicy: Local allocateLoadBalancerNodePorts: false selector: - {{- include "virtual-machine.labels" . | nindent 4 }} + {{- include "virtual-machine.selectorLabels" . | nindent 4 }} ports: {{- if eq .Values.externalMethod "WholeIP" }} - port: 65535 diff --git a/packages/apps/vm-instance/Chart.yaml b/packages/apps/vm-instance/Chart.yaml index f5f697a39..a54c1d397 100644 --- a/packages/apps/vm-instance/Chart.yaml +++ b/packages/apps/vm-instance/Chart.yaml @@ -17,10 +17,10 @@ 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.5.0 +version: 0.5.1 # 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 # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.5.0" +appVersion: "0.5.1" diff --git a/packages/apps/vm-instance/templates/service.yaml b/packages/apps/vm-instance/templates/service.yaml index eed8dbad7..7840d2db3 100644 --- a/packages/apps/vm-instance/templates/service.yaml +++ b/packages/apps/vm-instance/templates/service.yaml @@ -15,7 +15,7 @@ spec: externalTrafficPolicy: Local allocateLoadBalancerNodePorts: false selector: - {{- include "virtual-machine.labels" . | nindent 4 }} + {{- include "virtual-machine.selectorLabels" . | nindent 4 }} ports: {{- if eq .Values.externalMethod "WholeIP" }} - port: 65535 From 65036e8145d4474f9991bee8b8d6095e0f024deb Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Wed, 12 Feb 2025 18:41:27 +0100 Subject: [PATCH 12/25] Upd cozy-proxy to fix reconciliation logic (#629) --- packages/system/cozy-proxy/charts/cozy-proxy/Chart.yaml | 4 ++-- packages/system/cozy-proxy/charts/cozy-proxy/values.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/system/cozy-proxy/charts/cozy-proxy/Chart.yaml b/packages/system/cozy-proxy/charts/cozy-proxy/Chart.yaml index 72cbe4e12..d1654f907 100644 --- a/packages/system/cozy-proxy/charts/cozy-proxy/Chart.yaml +++ b/packages/system/cozy-proxy/charts/cozy-proxy/Chart.yaml @@ -2,5 +2,5 @@ apiVersion: v2 name: cozy-proxy description: A simple kube-proxy addon for 1:1 NAT services in Kubernetes using an NFT backend type: application -version: 0.1.0 -appVersion: 0.1.0 +version: 0.1.2 +appVersion: 0.1.2 diff --git a/packages/system/cozy-proxy/charts/cozy-proxy/values.yaml b/packages/system/cozy-proxy/charts/cozy-proxy/values.yaml index 099f29055..36058ae9b 100644 --- a/packages/system/cozy-proxy/charts/cozy-proxy/values.yaml +++ b/packages/system/cozy-proxy/charts/cozy-proxy/values.yaml @@ -1,6 +1,6 @@ image: repository: ghcr.io/aenix-io/cozystack/cozy-proxy - tag: v0.1.1 + tag: v0.1.2 pullPolicy: IfNotPresent daemonset: From cc0222aa115f73cce76c02b127b481b6122f0c7c Mon Sep 17 00:00:00 2001 From: Floppy Disk Date: Thu, 13 Feb 2025 13:09:34 +0300 Subject: [PATCH 13/25] 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 e7d5a5ed1..4e1fbe853 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, From 4cc48e6f34477a9fd7eb8a0622deaf9cff4f7094 Mon Sep 17 00:00:00 2001 From: Floppy Disk Date: Mon, 10 Feb 2025 15:30:30 +0300 Subject: [PATCH 14/25] add-workloadmonitors-roles --- packages/apps/tenant/Chart.yaml | 2 +- packages/apps/tenant/templates/tenant.yaml | 26 +++++++++++++++++++++- packages/apps/versions_map | 3 ++- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/packages/apps/tenant/Chart.yaml b/packages/apps/tenant/Chart.yaml index 5d83ea1bd..dfaabd5a3 100644 --- a/packages/apps/tenant/Chart.yaml +++ b/packages/apps/tenant/Chart.yaml @@ -4,4 +4,4 @@ description: Separated tenant namespace icon: /logos/tenant.svg type: application -version: 1.6.7 +version: 1.6.8 diff --git a/packages/apps/tenant/templates/tenant.yaml b/packages/apps/tenant/templates/tenant.yaml index 7d0085d0c..7aecc7935 100644 --- a/packages/apps/tenant/templates/tenant.yaml +++ b/packages/apps/tenant/templates/tenant.yaml @@ -34,7 +34,11 @@ rules: - apiGroups: ["apps.cozystack.io"] resources: ['*'] verbs: ['*'] - +- apiGroups: + - cozystack.io + resources: + - workloadmonitors + verbs: ["get", "list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -103,6 +107,11 @@ rules: - get - list - watch + - apiGroups: + - cozystack.io + resources: + - workloadmonitors + verbs: ["get", "list", "watch"] --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 @@ -175,6 +184,11 @@ rules: verbs: - get - list + - apiGroups: + - cozystack.io + resources: + - workloadmonitors + verbs: ["get", "list", "watch"] --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 @@ -266,6 +280,11 @@ rules: - update - patch - delete + - apiGroups: + - cozystack.io + resources: + - workloadmonitors + verbs: ["get", "list", "watch"] --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 @@ -334,6 +353,11 @@ rules: - '*' verbs: - '*' + - apiGroups: + - cozystack.io + resources: + - workloadmonitors + verbs: ["get", "list", "watch"] --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 diff --git a/packages/apps/versions_map b/packages/apps/versions_map index 85c0ded7c..771142390 100644 --- a/packages/apps/versions_map +++ b/packages/apps/versions_map @@ -101,7 +101,8 @@ tenant 1.6.3 2057bb96 tenant 1.6.4 3c9e50a4 tenant 1.6.5 f1e11451 tenant 1.6.6 d4634797 -tenant 1.6.7 HEAD +tenant 1.6.7 06afcf27 +tenant 1.6.8 HEAD virtual-machine 0.1.4 f2015d6 virtual-machine 0.1.5 7cd7de7 virtual-machine 0.2.0 5ca8823 From 1f6ea333b6a1ea81d7fb22ad207e14ac05e441e5 Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Wed, 12 Feb 2025 21:42:49 +0400 Subject: [PATCH 15/25] Prepare release v0.25.1 Signed-off-by: Andrei Kvapil --- manifests/cozystack-installer.yaml | 4 ++-- packages/apps/http-cache/images/nginx-cache.tag | 2 +- packages/apps/kubernetes/images/cluster-autoscaler.tag | 2 +- packages/apps/kubernetes/images/kubevirt-cloud-provider.tag | 2 +- packages/apps/kubernetes/images/kubevirt-csi-driver.tag | 2 +- packages/apps/kubernetes/images/ubuntu-container-disk.tag | 2 +- packages/apps/versions_map | 6 ++++-- packages/core/installer/Makefile | 4 ++-- packages/core/installer/values.yaml | 2 +- packages/core/testing/values.yaml | 2 +- packages/extra/bootbox/images/matchbox.tag | 2 +- packages/system/bucket/images/s3manager.tag | 2 +- packages/system/cozystack-api/values.yaml | 2 +- packages/system/cozystack-controller/values.yaml | 4 ++-- .../charts/kubeapps/templates/dashboard/configmap.yaml | 2 +- packages/system/dashboard/values.yaml | 6 +++--- packages/system/kamaji/values.yaml | 2 +- packages/system/kubeovn/values.yaml | 2 +- 18 files changed, 26 insertions(+), 24 deletions(-) diff --git a/manifests/cozystack-installer.yaml b/manifests/cozystack-installer.yaml index b602a3aa4..69b2501a5 100644 --- a/manifests/cozystack-installer.yaml +++ b/manifests/cozystack-installer.yaml @@ -68,7 +68,7 @@ spec: serviceAccountName: cozystack containers: - name: cozystack - image: "ghcr.io/aenix-io/cozystack/cozystack:v0.25.0" + image: "ghcr.io/aenix-io/cozystack/cozystack:v0.25.1" env: - name: KUBERNETES_SERVICE_HOST value: localhost @@ -87,7 +87,7 @@ spec: fieldRef: fieldPath: metadata.name - name: assets - image: "ghcr.io/aenix-io/cozystack/cozystack:v0.25.0" + image: "ghcr.io/aenix-io/cozystack/cozystack:v0.25.1" command: - /usr/bin/cozystack-assets-server - "-dir=/cozystack/assets" diff --git a/packages/apps/http-cache/images/nginx-cache.tag b/packages/apps/http-cache/images/nginx-cache.tag index f7046a4b6..014f9610d 100644 --- a/packages/apps/http-cache/images/nginx-cache.tag +++ b/packages/apps/http-cache/images/nginx-cache.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/nginx-cache:0.3.1@sha256:f30e9bd4b8a2a4362b88ac8974b12ed1ded631c4eeea87831bb446bb302b2e29 +ghcr.io/aenix-io/cozystack/nginx-cache:0.3.1@sha256:4c79017b6663f894812d8c3d4f9e03ef44e4d4032ad8bb91945c92c7cce6a0b0 diff --git a/packages/apps/kubernetes/images/cluster-autoscaler.tag b/packages/apps/kubernetes/images/cluster-autoscaler.tag index 78816cdab..5e9f0886f 100644 --- a/packages/apps/kubernetes/images/cluster-autoscaler.tag +++ b/packages/apps/kubernetes/images/cluster-autoscaler.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/cluster-autoscaler:0.15.0@sha256:73701e37727eedaafdf9efe4baefcf0835f064ee8731219f0c0186c0d0781a5c +ghcr.io/aenix-io/cozystack/cluster-autoscaler:0.15.0@sha256:50efa0d1e807c50d10e8fcece332e4eb7de464e98b23db6e3be02a1ef740821f diff --git a/packages/apps/kubernetes/images/kubevirt-cloud-provider.tag b/packages/apps/kubernetes/images/kubevirt-cloud-provider.tag index 71c14ceca..6fe362d22 100644 --- a/packages/apps/kubernetes/images/kubevirt-cloud-provider.tag +++ b/packages/apps/kubernetes/images/kubevirt-cloud-provider.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/kubevirt-cloud-provider:0.15.0@sha256:5efee8f76d0948936255c4cabad58057523502f77ceb40216ffae7e02841f85b +ghcr.io/aenix-io/cozystack/kubevirt-cloud-provider:0.15.0@sha256:461aee26669a15aa8febee5de43e1e5ec72b924ab3fe3fde2a0725ceef08a09b diff --git a/packages/apps/kubernetes/images/kubevirt-csi-driver.tag b/packages/apps/kubernetes/images/kubevirt-csi-driver.tag index 66fb29586..f543b8fe1 100644 --- a/packages/apps/kubernetes/images/kubevirt-csi-driver.tag +++ b/packages/apps/kubernetes/images/kubevirt-csi-driver.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/kubevirt-csi-driver:0.15.0@sha256:daac6de8ad25de9d30eb5e928271cebaaa59193889231a54fd4f60e8a1c5f51a +ghcr.io/aenix-io/cozystack/kubevirt-csi-driver:0.15.0@sha256:7b206eb9c1b44cead6e0e4931c569612fa8034f026d845469ebd2d2ef46b85ab diff --git a/packages/apps/kubernetes/images/ubuntu-container-disk.tag b/packages/apps/kubernetes/images/ubuntu-container-disk.tag index 20693c075..4aa985296 100644 --- a/packages/apps/kubernetes/images/ubuntu-container-disk.tag +++ b/packages/apps/kubernetes/images/ubuntu-container-disk.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/ubuntu-container-disk:v1.30.1@sha256:7bacb7853e656b6149c3a38c5cd925891011eb94358d4d11e154082ab8b3a643 +ghcr.io/aenix-io/cozystack/ubuntu-container-disk:v1.30.1@sha256:c2c26e7a61208415b044d32872c8692bb46e9b62746ce45166d6cb7bd15c597b diff --git a/packages/apps/versions_map b/packages/apps/versions_map index e9e597cc1..6d1dc0409 100644 --- a/packages/apps/versions_map +++ b/packages/apps/versions_map @@ -110,14 +110,16 @@ virtual-machine 0.5.0 cad9cde virtual-machine 0.6.0 0e728870 virtual-machine 0.7.0 af58018a virtual-machine 0.7.1 05857b95 -virtual-machine 0.8.0 HEAD +virtual-machine 0.8.0 3fa4dd3a +virtual-machine 0.8.1 HEAD vm-disk 0.1.0 HEAD vm-instance 0.1.0 ced8e5b9 vm-instance 0.2.0 4f767ee3 vm-instance 0.3.0 0e728870 vm-instance 0.4.0 af58018a vm-instance 0.4.1 05857b95 -vm-instance 0.5.0 HEAD +vm-instance 0.5.0 3fa4dd3a +vm-instance 0.5.1 HEAD vpn 0.1.0 f642698 vpn 0.2.0 7151424 vpn 0.3.0 a2bcf100 diff --git a/packages/core/installer/Makefile b/packages/core/installer/Makefile index e87c38b9a..8dd276af3 100644 --- a/packages/core/installer/Makefile +++ b/packages/core/installer/Makefile @@ -30,7 +30,7 @@ image-cozystack: run-builder --provenance false \ --tag $(REGISTRY)/cozystack:$(call settag,$(TAG)) \ --cache-from type=registry,ref=$(REGISTRY)/cozystack:latest \ - --platform linux/amd64,linux/arm64 \ + --platform linux/amd64 \ --cache-to type=inline \ --metadata-file images/cozystack.json \ --push=$(PUSH) \ @@ -43,7 +43,7 @@ image-talos: run-builder test -f ../../../_out/assets/installer-amd64.tar || make talos-installer skopeo copy docker-archive:../../../_out/assets/installer-amd64.tar docker://$(REGISTRY)/talos:$(call settag,$(TALOS_VERSION)) -image-matchbox: run-builder +image-matchbox: run-builder test -f ../../../_out/assets/kernel-amd64 || make talos-kernel test -f ../../../_out/assets/initramfs-metal-amd64.xz || make talos-initramfs docker buildx build -f images/matchbox/Dockerfile ../../.. \ diff --git a/packages/core/installer/values.yaml b/packages/core/installer/values.yaml index 3561a91fb..aec93a5e4 100644 --- a/packages/core/installer/values.yaml +++ b/packages/core/installer/values.yaml @@ -1,2 +1,2 @@ cozystack: - image: ghcr.io/aenix-io/cozystack/cozystack:v0.25.0@sha256:86860fd1ddcd9709cb2a756409bc4983c44cd09b961d3b677469767fc93a7e36 + image: ghcr.io/aenix-io/cozystack/cozystack:v0.25.1@sha256:bf74a003181ffb10c1a158b6920bb3d9be2cf06ecd41cb6519ad237ba52e9be1 diff --git a/packages/core/testing/values.yaml b/packages/core/testing/values.yaml index af8fc2375..499f12ebb 100755 --- a/packages/core/testing/values.yaml +++ b/packages/core/testing/values.yaml @@ -1,2 +1,2 @@ e2e: - image: ghcr.io/aenix-io/cozystack/e2e-sandbox:v0.25.0@sha256:c9165c329fd2536e0342345792586d3e6f4007a6e6bd2cce133f17088fd3e785 + image: ghcr.io/aenix-io/cozystack/e2e-sandbox:v0.25.1@sha256:eef99408647d4a427f971eed8a2ccd0ebc7f99b3c99f3f911bc87ffe34500661 diff --git a/packages/extra/bootbox/images/matchbox.tag b/packages/extra/bootbox/images/matchbox.tag index 8e360bad0..7e245dfe2 100644 --- a/packages/extra/bootbox/images/matchbox.tag +++ b/packages/extra/bootbox/images/matchbox.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/matchbox:v0.25.0@sha256:ffcfc340f19c7c6bc50f49d75b41c802df9bddc71d9e6fdeb9b9ad7dc242a5d1 +ghcr.io/aenix-io/cozystack/matchbox:v0.25.1@sha256:a6febea70f863ad834695f729d9befde7d970a36c605f1902a4d79e40dfbbe72 diff --git a/packages/system/bucket/images/s3manager.tag b/packages/system/bucket/images/s3manager.tag index 956ec0ea8..4eb27093f 100644 --- a/packages/system/bucket/images/s3manager.tag +++ b/packages/system/bucket/images/s3manager.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/s3manager:v0.5.0@sha256:e4a4ab82290e6fc940beb799d5c15c7ed76f9752d3fce21fae6c2596a5da20b0 +ghcr.io/aenix-io/cozystack/s3manager:v0.5.0@sha256:b4ea039e7a04edb1afb3dda86b5caf0fda6dcf826886118058560bf876c7197b diff --git a/packages/system/cozystack-api/values.yaml b/packages/system/cozystack-api/values.yaml index b69ecac8a..bbaff390a 100644 --- a/packages/system/cozystack-api/values.yaml +++ b/packages/system/cozystack-api/values.yaml @@ -1,2 +1,2 @@ cozystackAPI: - image: ghcr.io/aenix-io/cozystack/cozystack-api:v0.25.0@sha256:513c49f8e2c1e2489faff03aacfcd609324ed5dc31ac594f9dd8a6feec0e7884 + image: ghcr.io/aenix-io/cozystack/cozystack-api:v0.25.1@sha256:4e648c4badafabbb5d341d635f282e56f3fd8cc2d41dae23cbe8d469118b99c0 diff --git a/packages/system/cozystack-controller/values.yaml b/packages/system/cozystack-controller/values.yaml index 92b28c61e..217c6cd17 100644 --- a/packages/system/cozystack-controller/values.yaml +++ b/packages/system/cozystack-controller/values.yaml @@ -1,5 +1,5 @@ cozystackController: - image: ghcr.io/aenix-io/cozystack/cozystack-controller:v0.25.0@sha256:9fe9369a88f7bf317bf84cf05fe733f50879467bf7b2ab58f50d914ff1b253cc + image: ghcr.io/aenix-io/cozystack/cozystack-controller:v0.25.1@sha256:6e8931ac4c77a8e08cf8a1d245b004ce044868f2aaa424b5cf66760a385ac688 debug: false disableTelemetry: false - cozystackVersion: "v0.25.0" + cozystackVersion: "v0.25.1" diff --git a/packages/system/dashboard/charts/kubeapps/templates/dashboard/configmap.yaml b/packages/system/dashboard/charts/kubeapps/templates/dashboard/configmap.yaml index b7fb2ccf4..ad9681386 100644 --- a/packages/system/dashboard/charts/kubeapps/templates/dashboard/configmap.yaml +++ b/packages/system/dashboard/charts/kubeapps/templates/dashboard/configmap.yaml @@ -76,7 +76,7 @@ data: "kubeappsNamespace": {{ .Release.Namespace | quote }}, "helmGlobalNamespace": {{ include "kubeapps.helmGlobalPackagingNamespace" . | quote }}, "carvelGlobalNamespace": {{ .Values.kubeappsapis.pluginConfig.kappController.packages.v1alpha1.globalPackagingNamespace | quote }}, - "appVersion": "v0.25.0", + "appVersion": "v0.25.1", "authProxyEnabled": {{ .Values.authProxy.enabled }}, "oauthLoginURI": {{ .Values.authProxy.oauthLoginURI | quote }}, "oauthLogoutURI": {{ .Values.authProxy.oauthLogoutURI | quote }}, diff --git a/packages/system/dashboard/values.yaml b/packages/system/dashboard/values.yaml index ca7a32a07..a42d14152 100644 --- a/packages/system/dashboard/values.yaml +++ b/packages/system/dashboard/values.yaml @@ -40,14 +40,14 @@ kubeapps: image: registry: ghcr.io/aenix-io/cozystack repository: dashboard - tag: v0.25.0 + tag: v0.25.1 digest: "sha256:81e7b625c667bce5fc339eb97c8e115eafb82f66df4501550b3677ac53f6e234" kubeappsapis: image: registry: ghcr.io/aenix-io/cozystack repository: kubeapps-apis - tag: v0.25.0 - digest: "sha256:72308ae00344d48e7ed58c5b1383874e84bcd82ac53b76857172b9ef510d53a6" + tag: v0.25.1 + digest: "sha256:29a01f16edffddc2a8a0f6dd5432b98423a9f4e9029e773ce00c10fde4e89084" pluginConfig: flux: packages: diff --git a/packages/system/kamaji/values.yaml b/packages/system/kamaji/values.yaml index 20eba221b..c1dcd1dea 100644 --- a/packages/system/kamaji/values.yaml +++ b/packages/system/kamaji/values.yaml @@ -3,7 +3,7 @@ kamaji: deploy: false image: pullPolicy: IfNotPresent - tag: v0.25.0@sha256:948a496a23b4b3158517473afd74a693380bfecb9f5346c214c8beef6deb405a + tag: v0.25.1@sha256:b148aa417fa190e64f69ddc51a8aea542d74b7b0f4f67f9f01eaa9c3225cc70d repository: ghcr.io/aenix-io/cozystack/kamaji resources: limits: diff --git a/packages/system/kubeovn/values.yaml b/packages/system/kubeovn/values.yaml index 717d0fe0b..1148b29bd 100644 --- a/packages/system/kubeovn/values.yaml +++ b/packages/system/kubeovn/values.yaml @@ -22,4 +22,4 @@ global: images: kubeovn: repository: kubeovn - tag: v1.13.2@sha256:fccaf6b1f6514378f4ba2e17399af5b0c20ecf13f78142409848486b0992e5fd + tag: v1.13.2@sha256:a483e447e1e1337f6b02156d2b640492738f92706db8c8f962560c5a73f3f440 From 42f1dabc31050e94a99bdc42968a979e523ef82d Mon Sep 17 00:00:00 2001 From: Floppy Disk Date: Fri, 14 Feb 2025 17:47:37 +0300 Subject: [PATCH 16/25] add wl --- packages/apps/versions_map | 4 +- packages/core/platform/bundles/paas-full.yaml | 71 +++++++++++++++---- .../core/platform/bundles/paas-hosted.yaml | 56 +++++++++++++-- .../templates/configure-kk.yaml | 6 ++ 4 files changed, 114 insertions(+), 23 deletions(-) diff --git a/packages/apps/versions_map b/packages/apps/versions_map index 9b6c67e71..b86592124 100644 --- a/packages/apps/versions_map +++ b/packages/apps/versions_map @@ -112,7 +112,7 @@ virtual-machine 0.5.0 cad9cde virtual-machine 0.6.0 0e728870 virtual-machine 0.7.0 af58018a virtual-machine 0.7.1 05857b95 -virtual-machine 0.8.0 3fa4dd3a +virtual-machine 0.8.0 3fa4dd3 virtual-machine 0.8.1 HEAD vm-disk 0.1.0 HEAD vm-instance 0.1.0 ced8e5b9 @@ -120,7 +120,7 @@ vm-instance 0.2.0 4f767ee3 vm-instance 0.3.0 0e728870 vm-instance 0.4.0 af58018a vm-instance 0.4.1 05857b95 -vm-instance 0.5.0 3fa4dd3a +vm-instance 0.5.0 3fa4dd3 vm-instance 0.5.1 HEAD vpn 0.1.0 f642698 vpn 0.2.0 7151424 diff --git a/packages/core/platform/bundles/paas-full.yaml b/packages/core/platform/bundles/paas-full.yaml index d85af27a1..fdf0db75a 100644 --- a/packages/core/platform/bundles/paas-full.yaml +++ b/packages/core/platform/bundles/paas-full.yaml @@ -232,24 +232,67 @@ releases: namespace: cozy-dashboard dependsOn: [cilium,kubeovn,keycloak-configure] values: + kubeapps: {{- if .Capabilities.APIVersions.Has "source.toolkit.fluxcd.io/v1" }} {{- with (lookup "source.toolkit.fluxcd.io/v1" "HelmRepository" "cozy-public" "").items }} - redis: - master: - podAnnotations: - {{- range $index, $repo := . }} - {{- with (($repo.status).artifact).revision }} - repository.cozystack.io/{{ $repo.metadata.name }}: {{ quote . }} - {{- end }} - {{- end }} - {{- end }} + redis: + master: + podAnnotations: + {{- range $index, $repo := . }} + {{- with (($repo.status).artifact).revision }} + repository.cozystack.io/{{ $repo.metadata.name }}: {{ quote . }} + {{- end }} + {{- end }} {{- end }} - - {{- $dashboardKCconfig := lookup "v1" "ConfigMap" "cozy-dashboard" "kubeapps-auth-config" }} - {{- $dashboardKCValues := dig "data" "values.yaml" "" $dashboardKCconfig }} - {{- if $dashboardKCValues }} - {{- $dashboardKCValues | nindent 4 }} {{- end }} + dashboard: + image: + registry: ghcr.io/aenix-io/cozystack + repository: dashboard + tag: v0.25.0 + digest: "sha256:81e7b625c667bce5fc339eb97c8e115eafb82f66df4501550b3677ac53f6e234" + {{- $wlConfigmap := lookup "v1" "ConfigMap" "cozy-dashboard" "white-label" }} + {{- $locale := dig "data" "locale" "" $wlConfigmap }} + {{- if $locale }} + customLocale: + "Kubeapps": {{ $locale }} + {{- end }} + customStyle: | + {{- $logoImage := dig "data" "logo" "" $wlConfigmap }} + {{- if $logoImage }} + .kubeapps-logo { + background-image: {{ $logoImage }} + } + {{- end }} + #serviceaccount-selector { + display: none; + } + .login-moreinfo { + display: none; + } + a[href="#/docs"] { + display: none; + } + .login-group .clr-form-control .clr-control-label { + display: none; + } + .appview-separator div.appview-first-row div.center { + display: none; + } + .appview-separator div.appview-first-row section[aria-labelledby="app-secrets"] { + display: none; + } + .appview-first-row section[aria-labelledby="access-urls-title"] { + width: 100%; + } + {{- $dashboardKCconfig := lookup "v1" "ConfigMap" "cozy-dashboard" "kubeapps-auth-config" }} + {{- $dashboardKCValues := dig "data" "values.yaml" "" $dashboardKCconfig }} + {{- if $dashboardKCValues }} + valuesFrom: + - kind: ConfigMap + name: kubeapps-auth-config + valuesKey: values.yaml + {{- end }} {{- if eq $oidcEnabled "true" }} dependsOn: [keycloak-configure] diff --git a/packages/core/platform/bundles/paas-hosted.yaml b/packages/core/platform/bundles/paas-hosted.yaml index 82edc2ab7..4185fc16b 100644 --- a/packages/core/platform/bundles/paas-hosted.yaml +++ b/packages/core/platform/bundles/paas-hosted.yaml @@ -155,9 +155,9 @@ releases: chart: cozy-dashboard namespace: cozy-dashboard values: + kubeapps: {{- if .Capabilities.APIVersions.Has "source.toolkit.fluxcd.io/v1" }} {{- with (lookup "source.toolkit.fluxcd.io/v1" "HelmRepository" "cozy-public" "").items }} - kubeapps: redis: master: podAnnotations: @@ -168,12 +168,54 @@ releases: {{- end }} {{- end }} {{- end }} - - {{- $dashboardKCconfig := lookup "v1" "ConfigMap" "cozy-dashboard" "kubeapps-auth-config" }} - {{- $dashboardKCValues := dig "data" "values.yaml" "" $dashboardKCconfig }} - {{- if $dashboardKCValues }} - {{- $dashboardKCValues | nindent 4 }} - {{- end }} + dashboard: + image: + registry: ghcr.io/aenix-io/cozystack + repository: dashboard + tag: v0.25.0 + digest: "sha256:81e7b625c667bce5fc339eb97c8e115eafb82f66df4501550b3677ac53f6e234" + {{- $wlConfigmap := lookup "v1" "ConfigMap" "cozy-dashboard" "white-label" }} + {{- $locale := dig "data" "locale" "" $wlConfigmap }} + {{- if $locale }} + customLocale: + "Kubeapps": {{ $locale }} + {{- end }} + customStyle: | + {{- $logoImage := dig "data" "logo" "" $wlConfigmap }} + {{- if $logoImage }} + .kubeapps-logo { + background-image: {{ $logoImage }} + } + {{- end }} + #serviceaccount-selector { + display: none; + } + .login-moreinfo { + display: none; + } + a[href="#/docs"] { + display: none; + } + .login-group .clr-form-control .clr-control-label { + display: none; + } + .appview-separator div.appview-first-row div.center { + display: none; + } + .appview-separator div.appview-first-row section[aria-labelledby="app-secrets"] { + display: none; + } + .appview-first-row section[aria-labelledby="access-urls-title"] { + width: 100%; + } + {{- $dashboardKCconfig := lookup "v1" "ConfigMap" "cozy-dashboard" "kubeapps-auth-config" }} + {{- $dashboardKCValues := dig "data" "values.yaml" "" $dashboardKCconfig }} + {{- if $dashboardKCValues }} + valuesFrom: + - kind: ConfigMap + name: kubeapps-auth-config + valuesKey: values.yaml + {{- end }} {{- if eq $oidcEnabled "true" }} dependsOn: [keycloak-configure] diff --git a/packages/system/keycloak-configure/templates/configure-kk.yaml b/packages/system/keycloak-configure/templates/configure-kk.yaml index ef6e44e3a..c37382617 100644 --- a/packages/system/keycloak-configure/templates/configure-kk.yaml +++ b/packages/system/keycloak-configure/templates/configure-kk.yaml @@ -29,6 +29,9 @@ {{- $cookieSecret = randAlphaNum 16 }} {{- end }} +{{- $wlConfigmap := lookup "v1" "ConfigMap" "cozy-dashboard" "white-label" }} +{{- $locale := index $wlConfigmap.data "locale" }} + --- apiVersion: v1 @@ -83,6 +86,9 @@ metadata: spec: realmName: cozy clusterKeycloakRef: keycloak-cozy + {{- if $locale }} + displayNameHtml: {{ $locale }} + {{- end }} --- From a31c3a57965ff8d4590c1efbbb8a2422aa4186c4 Mon Sep 17 00:00:00 2001 From: Timofei Larkin Date: Tue, 18 Feb 2025 10:52:13 +0300 Subject: [PATCH 17/25] Update kamaji version * Stripped port number from KamajiControlPlane hostname due to clastix/kamaji#679 * Bumped versions for kamaji and dependent charts --- packages/apps/kubernetes/templates/cluster.yaml | 2 +- packages/system/kamaji/charts/kamaji/Chart.lock | 6 +++--- packages/system/kamaji/images/kamaji/Dockerfile | 4 ++-- packages/system/kamaji/values.yaml | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/apps/kubernetes/templates/cluster.yaml b/packages/apps/kubernetes/templates/cluster.yaml index a6d596c34..b8fd1a254 100644 --- a/packages/apps/kubernetes/templates/cluster.yaml +++ b/packages/apps/kubernetes/templates/cluster.yaml @@ -118,7 +118,7 @@ spec: ingress: extraAnnotations: nginx.ingress.kubernetes.io/ssl-passthrough: "true" - hostname: {{ .Values.host | default (printf "%s.%s" .Release.Name $host) }}:443 + hostname: {{ .Values.host | default (printf "%s.%s" .Release.Name $host) }} className: "{{ $ingress }}" deployment: podAdditionalMetadata: diff --git a/packages/system/kamaji/charts/kamaji/Chart.lock b/packages/system/kamaji/charts/kamaji/Chart.lock index de6049484..285e57360 100644 --- a/packages/system/kamaji/charts/kamaji/Chart.lock +++ b/packages/system/kamaji/charts/kamaji/Chart.lock @@ -1,6 +1,6 @@ dependencies: - name: kamaji-etcd repository: https://clastix.github.io/charts - version: 0.8.0 -digest: sha256:525b0eb2b5bae709d62de9328312d42c54b5219c6df67061de0da79eeca04fb3 -generated: "2024-08-25T08:44:24.92211307+02:00" + version: 0.9.1 +digest: sha256:522ec6321e2e394bd89f88a59446b39d6871838c63583346fdca10db36f1bbdb +generated: "2025-02-17T09:27:31.011938073+03:00" diff --git a/packages/system/kamaji/images/kamaji/Dockerfile b/packages/system/kamaji/images/kamaji/Dockerfile index a5f2d2f52..00d9b7a84 100644 --- a/packages/system/kamaji/images/kamaji/Dockerfile +++ b/packages/system/kamaji/images/kamaji/Dockerfile @@ -1,7 +1,7 @@ # Build the manager binary FROM golang:1.23 as builder -ARG VERSION=edge-24.9.2 +ARG VERSION=edge-24.12.1 ARG TARGETOS TARGETARCH WORKDIR /workspace @@ -9,7 +9,7 @@ WORKDIR /workspace RUN curl -sSL https://github.com/clastix/kamaji/archive/refs/tags/${VERSION}.tar.gz | tar -xzvf- --strip=1 COPY patches /patches -RUN git apply /patches/disable-datastore-check.diff +RUN git apply /patches/*.diff RUN CGO_ENABLED=0 GOOS=linux GOARCH=$TARGETARCH go build \ -ldflags "-X github.com/clastix/kamaji/internal.GitRepo=$GIT_REPO -X github.com/clastix/kamaji/internal.GitTag=$GIT_LAST_TAG -X github.com/clastix/kamaji/internal.GitCommit=$GIT_HEAD_COMMIT -X github.com/clastix/kamaji/internal.GitDirty=$GIT_MODIFIED -X github.com/clastix/kamaji/internal.BuildTime=$BUILD_DATE" \ diff --git a/packages/system/kamaji/values.yaml b/packages/system/kamaji/values.yaml index c1dcd1dea..1109dadf2 100644 --- a/packages/system/kamaji/values.yaml +++ b/packages/system/kamaji/values.yaml @@ -3,7 +3,7 @@ kamaji: deploy: false image: pullPolicy: IfNotPresent - tag: v0.25.1@sha256:b148aa417fa190e64f69ddc51a8aea542d74b7b0f4f67f9f01eaa9c3225cc70d + tag: latest@sha256:04aaf9acb6f49e0315295cd0c24655f28b74c6cf628fc6721758842a41d2deef repository: ghcr.io/aenix-io/cozystack/kamaji resources: limits: From bd90eb267f39e911b0b91584959a79ef87e46e81 Mon Sep 17 00:00:00 2001 From: Timofei Larkin Date: Tue, 18 Feb 2025 17:22:41 +0300 Subject: [PATCH 18/25] Prepare release v0.25.2 --- packages/system/dashboard/images/dashboard/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/system/dashboard/images/dashboard/Dockerfile b/packages/system/dashboard/images/dashboard/Dockerfile index 59073e2e7..d474872e2 100644 --- a/packages/system/dashboard/images/dashboard/Dockerfile +++ b/packages/system/dashboard/images/dashboard/Dockerfile @@ -1,7 +1,7 @@ FROM bitnami/node:20.15.1 AS build WORKDIR /app -ARG COMMIT_REF=dd02680d796c962b8dcc4e5ea70960a846c1acdc +ARG COMMIT_REF=190ea544aeb0be74bb6d1aa4bb474910559e7ecd RUN wget -O- https://github.com/aenix-io/kubeapps/archive/${COMMIT_REF}.tar.gz | tar xzf - --strip-components=2 kubeapps-${COMMIT_REF}/dashboard RUN yarn install --frozen-lockfile From 9a5574788541cc892f333c5002085628f8a9723a Mon Sep 17 00:00:00 2001 From: Floppy Disk Date: Tue, 18 Feb 2025 17:40:54 +0300 Subject: [PATCH 19/25] add more resources --- packages/system/capi-providers/templates/providers.yaml | 7 +++++++ packages/system/keycloak-operator/values.yaml | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/packages/system/capi-providers/templates/providers.yaml b/packages/system/capi-providers/templates/providers.yaml index 06a605f2b..0c2f1b2a1 100644 --- a/packages/system/capi-providers/templates/providers.yaml +++ b/packages/system/capi-providers/templates/providers.yaml @@ -14,6 +14,13 @@ metadata: spec: # https://github.com/clastix/cluster-api-control-plane-provider-kamaji version: v0.11.0 + deployment: + containers: + - name: manager + resources: + limits: + cpu: 1024m + memory: 1024Mi --- apiVersion: operator.cluster.x-k8s.io/v1alpha2 kind: BootstrapProvider diff --git a/packages/system/keycloak-operator/values.yaml b/packages/system/keycloak-operator/values.yaml index 573e5b208..fc61c51f8 100644 --- a/packages/system/keycloak-operator/values.yaml +++ b/packages/system/keycloak-operator/values.yaml @@ -1,2 +1,8 @@ keycloak-operator: clusterReconciliationEnabled: true + resources: + limits: + memory: 512Mi + requests: + cpu: 50m + memory: 64Mi From 6c73e3f3ae841ad144fa18aa28a7d231b3ab63cd Mon Sep 17 00:00:00 2001 From: Floppy Disk Date: Thu, 20 Feb 2025 15:23:54 +0300 Subject: [PATCH 20/25] feature/mv-kubeconfig --- packages/apps/tenant/Chart.yaml | 2 +- packages/apps/tenant/templates/info.yaml | 27 +++++++++++++++++++ packages/apps/tenant/templates/tenant.yaml | 1 + packages/apps/versions_map | 3 ++- packages/extra/info/.helmignore | 2 ++ packages/extra/info/Chart.yaml | 6 +++++ packages/extra/info/Makefile | 3 +++ packages/extra/info/README.md | 18 +++++++++++++ packages/extra/info/logos/info.svg | 13 +++++++++ .../templates/dashboard-resourcemap.yaml | 5 ++-- .../info}/templates/kubeconfig.yaml | 9 +++---- packages/extra/info/values.schema.json | 1 + packages/extra/info/values.yaml | 0 packages/extra/versions_map | 1 + .../cozystack-api/templates/configmap.yaml | 14 ++++++++++ packages/system/dashboard/values.yaml | 14 ++++++++++ 16 files changed, 109 insertions(+), 10 deletions(-) create mode 100644 packages/apps/tenant/templates/info.yaml create mode 100644 packages/extra/info/.helmignore create mode 100644 packages/extra/info/Chart.yaml create mode 100644 packages/extra/info/Makefile create mode 100644 packages/extra/info/README.md create mode 100644 packages/extra/info/logos/info.svg rename packages/{apps/tenant => extra/info}/templates/dashboard-resourcemap.yaml (53%) rename packages/{apps/tenant => extra/info}/templates/kubeconfig.yaml (87%) create mode 100644 packages/extra/info/values.schema.json create mode 100644 packages/extra/info/values.yaml diff --git a/packages/apps/tenant/Chart.yaml b/packages/apps/tenant/Chart.yaml index dfaabd5a3..d8f2853ad 100644 --- a/packages/apps/tenant/Chart.yaml +++ b/packages/apps/tenant/Chart.yaml @@ -4,4 +4,4 @@ description: Separated tenant namespace icon: /logos/tenant.svg type: application -version: 1.6.8 +version: 1.7.0 diff --git a/packages/apps/tenant/templates/info.yaml b/packages/apps/tenant/templates/info.yaml new file mode 100644 index 000000000..08e323298 --- /dev/null +++ b/packages/apps/tenant/templates/info.yaml @@ -0,0 +1,27 @@ +{{- $cozyConfig := lookup "v1" "ConfigMap" "cozy-system" "cozystack" }} +{{- $oidcEnabled := index $cozyConfig.data "oidc-enabled" }} +{{- if $oidcEnabled }} +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: info + namespace: {{ include "tenant.name" . }} + annotations: + helm.sh/resource-policy: keep + labels: + cozystack.io/ui: "true" + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/managed-by: {{ .Release.Service }} +spec: + chart: + spec: + chart: info + reconcileStrategy: Revision + sourceRef: + kind: HelmRepository + name: cozystack-extra + namespace: cozy-public + version: "*" + interval: 1m0s + timeout: 5m0s +{{- end }} diff --git a/packages/apps/tenant/templates/tenant.yaml b/packages/apps/tenant/templates/tenant.yaml index 7aecc7935..b9e1e497d 100644 --- a/packages/apps/tenant/templates/tenant.yaml +++ b/packages/apps/tenant/templates/tenant.yaml @@ -272,6 +272,7 @@ rules: - virtualmachines - vmdisks - vminstances + - infos verbs: - get - list diff --git a/packages/apps/versions_map b/packages/apps/versions_map index b86592124..cd962870a 100644 --- a/packages/apps/versions_map +++ b/packages/apps/versions_map @@ -102,7 +102,8 @@ tenant 1.6.4 3c9e50a4 tenant 1.6.5 f1e11451 tenant 1.6.6 d4634797 tenant 1.6.7 06afcf27 -tenant 1.6.8 HEAD +tenant 1.6.8 4cc48e6f +tenant 1.7.0 HEAD virtual-machine 0.1.4 f2015d6 virtual-machine 0.1.5 7cd7de7 virtual-machine 0.2.0 5ca8823 diff --git a/packages/extra/info/.helmignore b/packages/extra/info/.helmignore new file mode 100644 index 000000000..62e0c0512 --- /dev/null +++ b/packages/extra/info/.helmignore @@ -0,0 +1,2 @@ +.helmignore +/logos diff --git a/packages/extra/info/Chart.yaml b/packages/extra/info/Chart.yaml new file mode 100644 index 000000000..2865c6df8 --- /dev/null +++ b/packages/extra/info/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +name: info +description: Info +icon: /logos/info.svg +type: application +version: 1.0.0 diff --git a/packages/extra/info/Makefile b/packages/extra/info/Makefile new file mode 100644 index 000000000..86ce0edea --- /dev/null +++ b/packages/extra/info/Makefile @@ -0,0 +1,3 @@ +NAME=etcd + +include ../../../scripts/package.mk diff --git a/packages/extra/info/README.md b/packages/extra/info/README.md new file mode 100644 index 000000000..e361cfe61 --- /dev/null +++ b/packages/extra/info/README.md @@ -0,0 +1,18 @@ +# Info + +### Kubeconfig for tenant + +### Kubelogin + +For using kubeconfig need install kubelogin. + +```bash +# Homebrew (macOS and Linux) +brew install int128/kubelogin/kubelogin + +# Krew (macOS, Linux, Windows and ARM) +kubectl krew install oidc-login + +# Chocolatey (Windows) +choco install kubelogin +``` diff --git a/packages/extra/info/logos/info.svg b/packages/extra/info/logos/info.svg new file mode 100644 index 000000000..c5edee825 --- /dev/null +++ b/packages/extra/info/logos/info.svg @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/packages/apps/tenant/templates/dashboard-resourcemap.yaml b/packages/extra/info/templates/dashboard-resourcemap.yaml similarity index 53% rename from packages/apps/tenant/templates/dashboard-resourcemap.yaml rename to packages/extra/info/templates/dashboard-resourcemap.yaml index 9020b8a0e..e0dccc232 100644 --- a/packages/apps/tenant/templates/dashboard-resourcemap.yaml +++ b/packages/extra/info/templates/dashboard-resourcemap.yaml @@ -1,13 +1,12 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: - name: {{ include "tenant.name" . }}-dashboard-resources - namespace: {{ .Release.namespace }} + name: info-dashboard-resources rules: - apiGroups: - "" resources: - secrets resourceNames: - - kubeconfig-{{ include "tenant.name" . }} + - kubeconfig-{{ .Release.Namespace }} verbs: ["get", "list", "watch"] diff --git a/packages/apps/tenant/templates/kubeconfig.yaml b/packages/extra/info/templates/kubeconfig.yaml similarity index 87% rename from packages/apps/tenant/templates/kubeconfig.yaml rename to packages/extra/info/templates/kubeconfig.yaml index 85a2acd16..ff8127d2e 100644 --- a/packages/apps/tenant/templates/kubeconfig.yaml +++ b/packages/extra/info/templates/kubeconfig.yaml @@ -15,8 +15,7 @@ apiVersion: v1 kind: Secret metadata: - name: kubeconfig-{{ include "tenant.name" . }} - namespace: tenant-root + name: kubeconfig-{{ .Release.Namespace }} stringData: kubeconfig: | apiVersion: v1 @@ -28,10 +27,10 @@ stringData: contexts: - context: cluster: cluster - namespace: {{ include "tenant.name" . }} + namespace: {{ .Release.Namespace }} user: keycloak - name: {{ include "tenant.name" . }} - current-context: {{ include "tenant.name" . }} + name: {{ .Release.Namespace }} + current-context: {{ .Release.Namespace }} users: - name: keycloak user: diff --git a/packages/extra/info/values.schema.json b/packages/extra/info/values.schema.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/packages/extra/info/values.schema.json @@ -0,0 +1 @@ +{} diff --git a/packages/extra/info/values.yaml b/packages/extra/info/values.yaml new file mode 100644 index 000000000..e69de29bb diff --git a/packages/extra/versions_map b/packages/extra/versions_map index a2cf6af8c..bc18c57e4 100644 --- a/packages/extra/versions_map +++ b/packages/extra/versions_map @@ -7,6 +7,7 @@ etcd 2.2.0 5ca8823 etcd 2.3.0 b908400d etcd 2.4.0 cb7b8158 etcd 2.5.0 HEAD +info 1.0.0 HEAD ingress 1.0.0 f642698 ingress 1.1.0 838bee5d ingress 1.2.0 ced8e5b diff --git a/packages/system/cozystack-api/templates/configmap.yaml b/packages/system/cozystack-api/templates/configmap.yaml index f8514d00b..8fccd4270 100644 --- a/packages/system/cozystack-api/templates/configmap.yaml +++ b/packages/system/cozystack-api/templates/configmap.yaml @@ -314,3 +314,17 @@ data: kind: HelmRepository name: cozystack-extra namespace: cozy-public + - application: + kind: Info + plural: infos + singular: info + release: + prefix: "" + labels: + cozystack.io/ui: "true" + chart: + name: info + sourceRef: + kind: HelmRepository + name: cozystack-extra + namespace: cozy-public diff --git a/packages/system/dashboard/values.yaml b/packages/system/dashboard/values.yaml index 7a0840aab..c1252dc54 100644 --- a/packages/system/dashboard/values.yaml +++ b/packages/system/dashboard/values.yaml @@ -361,3 +361,17 @@ kubeapps: kind: HelmRepository name: cozystack-extra namespace: cozy-public + - application: + kind: Info + plural: infos + singular: info + release: + prefix: "" + labels: + cozystack.io/ui: "true" + chart: + name: info + sourceRef: + kind: HelmRepository + name: cozystack-extra + namespace: cozy-public From 0211c57bed6350f08c3b4a2630043ce8d8000ab3 Mon Sep 17 00:00:00 2001 From: Timofei Larkin Date: Sat, 22 Feb 2025 10:33:32 +0300 Subject: [PATCH 21/25] Prepare release v0.25.3 --- manifests/cozystack-installer.yaml | 4 ++-- packages/apps/kubernetes/images/cluster-autoscaler.tag | 2 +- packages/core/installer/values.yaml | 2 +- packages/core/testing/values.yaml | 2 +- packages/extra/bootbox/images/matchbox.tag | 2 +- packages/extra/monitoring/images/grafana.tag | 2 +- packages/system/cozystack-api/values.yaml | 2 +- packages/system/cozystack-controller/values.yaml | 4 ++-- .../charts/kubeapps/templates/dashboard/configmap.yaml | 2 +- packages/system/dashboard/values.yaml | 4 ++-- packages/system/kamaji/values.yaml | 2 +- 11 files changed, 14 insertions(+), 14 deletions(-) diff --git a/manifests/cozystack-installer.yaml b/manifests/cozystack-installer.yaml index 69b2501a5..cd2d4f2ab 100644 --- a/manifests/cozystack-installer.yaml +++ b/manifests/cozystack-installer.yaml @@ -68,7 +68,7 @@ spec: serviceAccountName: cozystack containers: - name: cozystack - image: "ghcr.io/aenix-io/cozystack/cozystack:v0.25.1" + image: "ghcr.io/aenix-io/cozystack/cozystack:v0.25.3" env: - name: KUBERNETES_SERVICE_HOST value: localhost @@ -87,7 +87,7 @@ spec: fieldRef: fieldPath: metadata.name - name: assets - image: "ghcr.io/aenix-io/cozystack/cozystack:v0.25.1" + image: "ghcr.io/aenix-io/cozystack/cozystack:v0.25.3" command: - /usr/bin/cozystack-assets-server - "-dir=/cozystack/assets" diff --git a/packages/apps/kubernetes/images/cluster-autoscaler.tag b/packages/apps/kubernetes/images/cluster-autoscaler.tag index 5e9f0886f..421619b10 100644 --- a/packages/apps/kubernetes/images/cluster-autoscaler.tag +++ b/packages/apps/kubernetes/images/cluster-autoscaler.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/cluster-autoscaler:0.15.0@sha256:50efa0d1e807c50d10e8fcece332e4eb7de464e98b23db6e3be02a1ef740821f +ghcr.io/aenix-io/cozystack/cluster-autoscaler:0.15.0@sha256:fa37449761fefd2e04385be505cb669b0f1efcddc2f1ba42c4fcd38af4ea4361 diff --git a/packages/core/installer/values.yaml b/packages/core/installer/values.yaml index 516ba1719..205627706 100644 --- a/packages/core/installer/values.yaml +++ b/packages/core/installer/values.yaml @@ -1,2 +1,2 @@ cozystack: - image: ghcr.io/aenix-io/cozystack/cozystack:v0.25.2@sha256:5b70cd5a01d1c32f9072e37d3f5ae91f2a52516ff11dd25325c7da7ddba73c8b + image: ghcr.io/aenix-io/cozystack/cozystack:v0.25.3@sha256:d0d3739f2ffd8edca7a143d48bc4cf7c3e4f84910fb76c340e1e8a43bf303c7c diff --git a/packages/core/testing/values.yaml b/packages/core/testing/values.yaml index 61b5756b8..699e52c77 100755 --- a/packages/core/testing/values.yaml +++ b/packages/core/testing/values.yaml @@ -1,2 +1,2 @@ e2e: - image: ghcr.io/aenix-io/cozystack/e2e-sandbox:v0.25.2@sha256:3c505ef20030ee4ff9412553c7ecc2077c01fb2785ff48991c404e09cd0db69f + image: ghcr.io/aenix-io/cozystack/e2e-sandbox:v0.25.3@sha256:3c505ef20030ee4ff9412553c7ecc2077c01fb2785ff48991c404e09cd0db69f diff --git a/packages/extra/bootbox/images/matchbox.tag b/packages/extra/bootbox/images/matchbox.tag index e8fe34b84..4285277d4 100644 --- a/packages/extra/bootbox/images/matchbox.tag +++ b/packages/extra/bootbox/images/matchbox.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/matchbox:v0.25.2@sha256:32350617412bf29d4a8f29364e95f9814506522f98d31acab0ab19967613eef7 +ghcr.io/aenix-io/cozystack/matchbox:v0.25.3@sha256:2e5c6e4530f3421f8133485d2bb092374ec10ae198a4b685aef61ff1e7fa9aff diff --git a/packages/extra/monitoring/images/grafana.tag b/packages/extra/monitoring/images/grafana.tag index 6c2e9856b..4948a2ec5 100644 --- a/packages/extra/monitoring/images/grafana.tag +++ b/packages/extra/monitoring/images/grafana.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/grafana:1.8.0@sha256:0377abd3cb2c6e27b12ac297f1859aa4d550f1aa14989f824f2315d0dfd1a5b2 +ghcr.io/aenix-io/cozystack/grafana:1.8.0@sha256:1a484f970903cc38745251f3fbc1d4737065f2d0a8a08c0adccc8972aa25aa59 diff --git a/packages/system/cozystack-api/values.yaml b/packages/system/cozystack-api/values.yaml index fab6fd938..0f53e3b76 100644 --- a/packages/system/cozystack-api/values.yaml +++ b/packages/system/cozystack-api/values.yaml @@ -1,2 +1,2 @@ cozystackAPI: - image: ghcr.io/aenix-io/cozystack/cozystack-api:v0.25.2@sha256:ade847d803ffe9538fc063a8427d7ca87187ac9eb18a584104dfce741be0d0cf + image: ghcr.io/aenix-io/cozystack/cozystack-api:v0.25.3@sha256:5a37def468ce2356d933c80efa71e2eb2608b549602be2f5f07c7a63df4c79cd diff --git a/packages/system/cozystack-controller/values.yaml b/packages/system/cozystack-controller/values.yaml index 6be8cbe92..2fead153d 100644 --- a/packages/system/cozystack-controller/values.yaml +++ b/packages/system/cozystack-controller/values.yaml @@ -1,5 +1,5 @@ cozystackController: - image: ghcr.io/aenix-io/cozystack/cozystack-controller:v0.25.2@sha256:310df1af9d6feb1604b56eab57ee43c82b080f9103d229b3f1cebf9525a04501 + image: ghcr.io/aenix-io/cozystack/cozystack-controller:v0.25.3@sha256:15ef459bac44b5fedadb4bef987b5236a23bfbc3066156e87e5d13b0d7d60063 debug: false disableTelemetry: false - cozystackVersion: "v0.25.2" + cozystackVersion: "v0.25.3" diff --git a/packages/system/dashboard/charts/kubeapps/templates/dashboard/configmap.yaml b/packages/system/dashboard/charts/kubeapps/templates/dashboard/configmap.yaml index a9cd6f068..5695fe95c 100644 --- a/packages/system/dashboard/charts/kubeapps/templates/dashboard/configmap.yaml +++ b/packages/system/dashboard/charts/kubeapps/templates/dashboard/configmap.yaml @@ -76,7 +76,7 @@ data: "kubeappsNamespace": {{ .Release.Namespace | quote }}, "helmGlobalNamespace": {{ include "kubeapps.helmGlobalPackagingNamespace" . | quote }}, "carvelGlobalNamespace": {{ .Values.kubeappsapis.pluginConfig.kappController.packages.v1alpha1.globalPackagingNamespace | quote }}, - "appVersion": "v0.25.2", + "appVersion": "v0.25.3", "authProxyEnabled": {{ .Values.authProxy.enabled }}, "oauthLoginURI": {{ .Values.authProxy.oauthLoginURI | quote }}, "oauthLogoutURI": {{ .Values.authProxy.oauthLogoutURI | quote }}, diff --git a/packages/system/dashboard/values.yaml b/packages/system/dashboard/values.yaml index c1252dc54..5572da62f 100644 --- a/packages/system/dashboard/values.yaml +++ b/packages/system/dashboard/values.yaml @@ -40,13 +40,13 @@ kubeapps: image: registry: ghcr.io/aenix-io/cozystack repository: dashboard - tag: v0.25.2 + tag: v0.25.3 digest: "sha256:4a5dab471c358f826920693591d153dacb81ff7d499daa19edd1f74109f12224" kubeappsapis: image: registry: ghcr.io/aenix-io/cozystack repository: kubeapps-apis - tag: v0.25.2 + tag: v0.25.3 digest: "sha256:69e16490aff84e9084748011b7ae212679b8916cb882032436df450202aea37b" pluginConfig: flux: diff --git a/packages/system/kamaji/values.yaml b/packages/system/kamaji/values.yaml index 4e4abb600..588c5eb87 100644 --- a/packages/system/kamaji/values.yaml +++ b/packages/system/kamaji/values.yaml @@ -3,7 +3,7 @@ kamaji: deploy: false image: pullPolicy: IfNotPresent - tag: v0.25.2@sha256:229646a728b58dd0c55dae7abd721ab23e3feecd61f55fa3ad24bb3a614d558f + tag: v0.25.3@sha256:229646a728b58dd0c55dae7abd721ab23e3feecd61f55fa3ad24bb3a614d558f repository: ghcr.io/aenix-io/cozystack/kamaji resources: limits: From b32106484f6e8fdc62deb27d9818600ead0cbd84 Mon Sep 17 00:00:00 2001 From: Timofei Larkin Date: Mon, 24 Feb 2025 16:31:30 +0300 Subject: [PATCH 22/25] New schema version 10 BREAKING: all kuberneteses will be upgraded to chart version 0.15.1 --- packages/apps/kubernetes/Chart.yaml | 2 +- packages/apps/versions_map | 3 ++- packages/system/kamaji/values.yaml | 2 +- scripts/installer.sh | 2 +- scripts/migrations/8 | 2 +- scripts/migrations/9 | 8 ++++++++ 6 files changed, 14 insertions(+), 5 deletions(-) create mode 100755 scripts/migrations/9 diff --git a/packages/apps/kubernetes/Chart.yaml b/packages/apps/kubernetes/Chart.yaml index 1a1a73afe..7a1dacf35 100644 --- a/packages/apps/kubernetes/Chart.yaml +++ b/packages/apps/kubernetes/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.15.0 +version: 0.15.1 # 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/versions_map b/packages/apps/versions_map index cd962870a..3dc95bf16 100644 --- a/packages/apps/versions_map +++ b/packages/apps/versions_map @@ -44,7 +44,8 @@ kubernetes 0.12.1 28fca4e kubernetes 0.13.0 ced8e5b9 kubernetes 0.14.0 bfbde07c kubernetes 0.14.1 fde4bcfa -kubernetes 0.15.0 HEAD +kubernetes 0.15.0 cb7b8158 +kubernetes 0.15.1 HEAD mysql 0.1.0 f642698 mysql 0.2.0 8b975ff0 mysql 0.3.0 5ca8823 diff --git a/packages/system/kamaji/values.yaml b/packages/system/kamaji/values.yaml index 1109dadf2..588c5eb87 100644 --- a/packages/system/kamaji/values.yaml +++ b/packages/system/kamaji/values.yaml @@ -3,7 +3,7 @@ kamaji: deploy: false image: pullPolicy: IfNotPresent - tag: latest@sha256:04aaf9acb6f49e0315295cd0c24655f28b74c6cf628fc6721758842a41d2deef + tag: v0.25.3@sha256:229646a728b58dd0c55dae7abd721ab23e3feecd61f55fa3ad24bb3a614d558f repository: ghcr.io/aenix-io/cozystack/kamaji resources: limits: diff --git a/scripts/installer.sh b/scripts/installer.sh index 5130fc3ed..e3032145c 100755 --- a/scripts/installer.sh +++ b/scripts/installer.sh @@ -3,7 +3,7 @@ set -o pipefail set -e BUNDLE=$(set -x; kubectl get configmap -n cozy-system cozystack -o 'go-template={{index .data "bundle-name"}}') -VERSION=9 +VERSION=10 run_migrations() { if ! kubectl get configmap -n cozy-system cozystack-version; then diff --git a/scripts/migrations/8 b/scripts/migrations/8 index bdff30cf3..c7d7350c9 100755 --- a/scripts/migrations/8 +++ b/scripts/migrations/8 @@ -1,5 +1,5 @@ #!/bin/sh -# Migration 7 --> 9 +# Migration 8 --> 9 if kubectl get clusterrolebinding kubeapps-admin-group; then kubectl delete clusterrolebinding kubeapps-admin-group diff --git a/scripts/migrations/9 b/scripts/migrations/9 new file mode 100755 index 000000000..de3b75c81 --- /dev/null +++ b/scripts/migrations/9 @@ -0,0 +1,8 @@ +#!/bin/sh +# Migration 9 --> 10 + +# Upgrade kubernetes.apps to new chart version +kubectl get kuberneteses.apps.cozystack.io -A -o yaml | sed -r -e 's/^ appVersion: [0-9.]+$/ appVersion: 0.15.1/' | kubectl apply -f- + +# Write version to cozystack-version config +kubectl create configmap -n cozy-system cozystack-version --from-literal=version=10 --dry-run=client -o yaml | kubectl apply -f- From 392cd862e95862d6f1358202b7d33b53921ea944 Mon Sep 17 00:00:00 2001 From: Timofei Larkin Date: Tue, 25 Feb 2025 10:38:17 +0300 Subject: [PATCH 23/25] Update scripts/migrations/9 Co-authored-by: Andrei Kvapil --- scripts/migrations/9 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/migrations/9 b/scripts/migrations/9 index de3b75c81..cf6643afe 100755 --- a/scripts/migrations/9 +++ b/scripts/migrations/9 @@ -2,7 +2,9 @@ # Migration 9 --> 10 # Upgrade kubernetes.apps to new chart version -kubectl get kuberneteses.apps.cozystack.io -A -o yaml | sed -r -e 's/^ appVersion: [0-9.]+$/ appVersion: 0.15.1/' | kubectl apply -f- +kubectl get kuberneteses.apps.cozystack.io -A --no-headers --output=custom-columns='NAMESPACE:.metadata.namespace,NAME:.metadata.name' | while read NAMESPACE NAME; do + kubectl patch kuberneteses.apps.cozystack.io -n "$NAMESPACE" "$NAME" --type merge -p '{"appVersion":"0.15.1"}' +done # Write version to cozystack-version config kubectl create configmap -n cozy-system cozystack-version --from-literal=version=10 --dry-run=client -o yaml | kubectl apply -f- From 439381e474467ad61ae61c7da5adbc35f64f6bf9 Mon Sep 17 00:00:00 2001 From: xy2 Date: Tue, 25 Feb 2025 11:54:18 +0300 Subject: [PATCH 24/25] Allow lookup function in 'make diff'. (#647) Many applications require the lookup function on the live server. Allow its usage as well as in `make show`. ## Summary by CodeRabbit - **Chores** - Updated the release diff operation to simulate the upgrade process on the server side, ensuring a safer preview without applying changes. --- scripts/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/package.mk b/scripts/package.mk index ad1813e81..ca5372135 100644 --- a/scripts/package.mk +++ b/scripts/package.mk @@ -15,7 +15,7 @@ apply: check suspend ## Apply Helm release to a Kubernetes cluster diff: check ## Diff Helm release against objects in a Kubernetes cluster kubectl get hr -n $(NAMESPACE) $(NAME) -o jsonpath='{.spec.values}' | NAMESPACE=$(NAMESPACE) NAME=$(NAME) \ - helm diff upgrade --show-secrets --allow-unreleased --post-renderer ../../../scripts/fluxcd-kustomize.sh -n $(NAMESPACE) $(NAME) . $(.VALUES_FILES) + helm diff upgrade --dry-run=server --show-secrets --allow-unreleased --post-renderer ../../../scripts/fluxcd-kustomize.sh -n $(NAMESPACE) $(NAME) . $(.VALUES_FILES) suspend: check ## Suspend reconciliation for an existing Helm release kubectl patch hr -n $(NAMESPACE) $(NAME) -p '{"spec": {"suspend": true}}' --type=merge --field-manager=flux-client-side-apply From d0d62e88475f1d704953b2d7d3ccf013fdcfe9d6 Mon Sep 17 00:00:00 2001 From: klinch0 <68821526+klinch0@users.noreply.github.com> Date: Tue, 25 Feb 2025 12:08:08 +0300 Subject: [PATCH 25/25] feature/add-goldpinger (#648) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary by CodeRabbit - **New Features** - Introduced a comprehensive Grafana dashboard for Goldpinger, offering real-time insights into node health, error occurrences, and response times with intuitive filtering. - Expanded deployment configurations to include Goldpinger across environments, streamlining release management and dependency handling. - Launched a dedicated deployment package featuring customizable templates for secure, efficient Kubernetes deployments—including workloads, services, ingress, and monitoring integrations. --- dashboards/goldpinger/goldpinger.json | 1206 +++++++++++++++++ hack/download-dashboards.sh | 1 + packages/core/platform/bundles/paas-full.yaml | 7 + .../core/platform/bundles/paas-hosted.yaml | 7 + packages/extra/monitoring/dashboards.list | 1 + packages/system/goldpinger/Chart.yaml | 3 + packages/system/goldpinger/Makefile | 7 + .../goldpinger/charts/goldpinger/.helmignore | 23 + .../goldpinger/charts/goldpinger/Chart.yaml | 9 + .../charts/goldpinger/templates/_helpers.tpl | 62 + .../goldpinger/templates/clusterrole.yaml | 12 + .../templates/clusterrolebinding.yaml | 16 + .../goldpinger/templates/configmap.yaml | 8 + .../goldpinger/templates/daemonset.yaml | 103 ++ .../charts/goldpinger/templates/ingress.yaml | 61 + .../goldpinger/templates/prometheusrule.yaml | 19 + .../charts/goldpinger/templates/role.yaml | 20 + .../goldpinger/templates/rolebinding.yaml | 16 + .../charts/goldpinger/templates/service.yaml | 26 + .../goldpinger/templates/serviceaccount.yaml | 8 + .../goldpinger/templates/servicemonitor.yaml | 32 + .../goldpinger/charts/goldpinger/values.yaml | 166 +++ packages/system/goldpinger/values.yaml | 5 + 23 files changed, 1818 insertions(+) create mode 100644 dashboards/goldpinger/goldpinger.json create mode 100644 packages/system/goldpinger/Chart.yaml create mode 100644 packages/system/goldpinger/Makefile create mode 100644 packages/system/goldpinger/charts/goldpinger/.helmignore create mode 100644 packages/system/goldpinger/charts/goldpinger/Chart.yaml create mode 100644 packages/system/goldpinger/charts/goldpinger/templates/_helpers.tpl create mode 100644 packages/system/goldpinger/charts/goldpinger/templates/clusterrole.yaml create mode 100644 packages/system/goldpinger/charts/goldpinger/templates/clusterrolebinding.yaml create mode 100644 packages/system/goldpinger/charts/goldpinger/templates/configmap.yaml create mode 100644 packages/system/goldpinger/charts/goldpinger/templates/daemonset.yaml create mode 100644 packages/system/goldpinger/charts/goldpinger/templates/ingress.yaml create mode 100644 packages/system/goldpinger/charts/goldpinger/templates/prometheusrule.yaml create mode 100644 packages/system/goldpinger/charts/goldpinger/templates/role.yaml create mode 100644 packages/system/goldpinger/charts/goldpinger/templates/rolebinding.yaml create mode 100644 packages/system/goldpinger/charts/goldpinger/templates/service.yaml create mode 100644 packages/system/goldpinger/charts/goldpinger/templates/serviceaccount.yaml create mode 100644 packages/system/goldpinger/charts/goldpinger/templates/servicemonitor.yaml create mode 100644 packages/system/goldpinger/charts/goldpinger/values.yaml create mode 100644 packages/system/goldpinger/values.yaml diff --git a/dashboards/goldpinger/goldpinger.json b/dashboards/goldpinger/goldpinger.json new file mode 100644 index 000000000..179e5fb05 --- /dev/null +++ b/dashboards/goldpinger/goldpinger.json @@ -0,0 +1,1206 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "goldpinger", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 224, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 21, + "panels": [], + "title": "Overall Health", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(55, 174, 50, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 31 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 32 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 4, + "x": 0, + "y": 1 + }, + "id": 9, + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "expr": "(count(goldpinger_nodes_health_total{status='healthy'}) + count(goldpinger_nodes_health_total{status='unhealthy'})) /2", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "metric": "goldpinger_nodes_health", + "refId": "A", + "step": 600 + } + ], + "title": "Goldpinger Nodes", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(55, 174, 50, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 1 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 2 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 4, + "x": 4, + "y": 1 + }, + "id": 20, + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "expr": "sum(increase(goldpinger_errors_total{goldpinger_instance=~\"$instance\"}[30m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "metric": "goldpinger_nodes_health", + "refId": "A", + "step": 600 + } + ], + "title": "Increase in # Errors [30m]", + "type": "stat" + }, + { + "columns": [ + { + "text": "Current", + "value": "current" + }, + { + "text": "Max", + "value": "max" + }, + { + "text": "Avg", + "value": "avg" + } + ], + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "editable": true, + "error": false, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fontSize": "100%", + "gridPos": { + "h": 8, + "w": 16, + "x": 8, + "y": 1 + }, + "id": 11, + "options": {}, + "pluginVersion": "11.4.0", + "scroll": true, + "showHeader": true, + "sort": { + "desc": false + }, + "styles": [ + { + "align": "auto", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "date" + }, + { + "align": "auto", + "colorMode": "value", + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "decimals": 2, + "link": false, + "pattern": "/.*/", + "thresholds": [ + "1", + "2" + ], + "type": "number", + "unit": "short" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "expr": "sum(goldpinger_nodes_health_total{status='unhealthy'}) by (goldpinger_instance)", + "format": "table", + "intervalFactor": 2, + "legendFormat": "{{ goldpinger_instance }}", + "refId": "A", + "step": 40 + } + ], + "title": "Unhealthy seen by instance", + "transform": "table", + "type": "table-old" + }, + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "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": true, + "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": 9 + }, + "id": 12, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "expr": "sum(increase(goldpinger_nodes_health_total{goldpinger_instance=~\"$instance\", status=\"unhealthy\"}[30m])) by (goldpinger_instance)", + "format": "time_series", + "interval": "5m", + "intervalFactor": 1, + "legendFormat": "{{ goldpinger_instance }}", + "metric": "goldpinger_nodes_health", + "refId": "A", + "step": 300 + } + ], + "title": "Unhealthy nodes increase [30m]", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "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": 6, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "always", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 10, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "expr": "sum(increase(goldpinger_nodes_health_total{goldpinger_instance=~\"$instance\",status=\"unhealthy\"}[30m])) by (goldpinger_instance) / (sum(increase(goldpinger_nodes_health_total{goldpinger_instance=~\"$instance\",status=\"healthy\"}[30m])) by (goldpinger_instance) + sum(increase(goldpinger_nodes_health_total{goldpinger_instance=~\"$instance\",status=\"unhealthy\"}[30m])) by (goldpinger_instance))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "{{ goldpinger_instance }}", + "metric": "goldpinger_nodes_health", + "refId": "A", + "step": 60 + } + ], + "title": "% Unhealthy nodes reported", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 17 + }, + "id": 22, + "panels": [], + "title": "Connections to peers", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "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": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 8, + "x": 0, + "y": 18 + }, + "id": 6, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "expr": "histogram_quantile(0.99, sum(rate(goldpinger_peers_response_time_s_bucket{goldpinger_instance=~\"$instance\",call_type=~\"$call_type\"}[30m])) by (goldpinger_instance, le))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 2, + "legendFormat": "{{ goldpinger_instance }}", + "refId": "A", + "step": 120 + } + ], + "title": "99% response time from node [30m]", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "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": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 8, + "x": 8, + "y": 18 + }, + "id": 16, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "expr": "histogram_quantile(0.95, sum(rate(goldpinger_peers_response_time_s_bucket{goldpinger_instance=~\"$instance\",call_type=~\"$call_type\"}[30m])) by (goldpinger_instance, le))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 2, + "legendFormat": "{{ goldpinger_instance }}", + "refId": "A", + "step": 120 + } + ], + "title": "95% response time from node [30m]", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "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": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 8, + "x": 16, + "y": 18 + }, + "id": 17, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "expr": "histogram_quantile(0.50, sum(rate(goldpinger_peers_response_time_s_bucket{goldpinger_instance=~\"$instance\",call_type=~\"$call_type\"}[30m])) by (goldpinger_instance, le))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 2, + "legendFormat": "{{ goldpinger_instance }}", + "refId": "A", + "step": 120 + } + ], + "title": "50% response time from node [30m]", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 28 + }, + "id": 23, + "panels": [], + "title": "Connections to Kubernetes API", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "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": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 8, + "x": 0, + "y": 29 + }, + "id": 13, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "expr": "histogram_quantile(0.99, sum(rate(goldpinger_kube_master_response_time_s_bucket{goldpinger_instance=~\"$instance\"}[30m])) by (goldpinger_instance, le))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 2, + "legendFormat": "{{ goldpinger_instance }}", + "refId": "A", + "step": 120 + } + ], + "title": "99% response time from k8s api [30m]", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "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": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 8, + "x": 8, + "y": 29 + }, + "id": 18, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "expr": "histogram_quantile(0.95, sum(rate(goldpinger_kube_master_response_time_s_bucket{goldpinger_instance=~\"$instance\"}[30m])) by (goldpinger_instance, le))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 2, + "legendFormat": "{{ goldpinger_instance }}", + "refId": "A", + "step": 120 + } + ], + "title": "95% response time from k8s api [30m]", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "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": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 8, + "x": 16, + "y": 29 + }, + "id": 19, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "24b0d575-0cea-474c-a4eb-c225d250858d" + }, + "expr": "histogram_quantile(0.50, sum(rate(goldpinger_kube_master_response_time_s_bucket{goldpinger_instance=~\"$instance\"}[30m])) by (goldpinger_instance, le))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 2, + "legendFormat": "{{ goldpinger_instance }}", + "refId": "A", + "step": 120 + } + ], + "title": "50% response time from k8s api [30m]", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "5m", + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [ + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": "24b0d575-0cea-474c-a4eb-c225d250858d", + "definition": "", + "includeAll": true, + "label": "Instance", + "multi": true, + "name": "instance", + "options": [], + "query": "label_values(goldpinger_instance)", + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": "24b0d575-0cea-474c-a4eb-c225d250858d", + "definition": "", + "includeAll": true, + "label": "Call Type", + "multi": true, + "name": "call_type", + "options": [], + "query": "label_values(call_type)", + "refresh": 1, + "regex": "", + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Cluster: Goldpinger", + "uid": "8eYxJNhZk", + "version": 2, + "weekStart": "" + } diff --git a/hack/download-dashboards.sh b/hack/download-dashboards.sh index 61d2ad5d3..ade7ca0ba 100755 --- a/hack/download-dashboards.sh +++ b/hack/download-dashboards.sh @@ -81,6 +81,7 @@ modules/340-monitoring-kubernetes/monitoring/grafana-dashboards//main/capacity-p 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 +modules/340-monitoring-kubernetes/monitoring/grafana-dashboards//goldpinger/goldpinger.json EOT diff --git a/packages/core/platform/bundles/paas-full.yaml b/packages/core/platform/bundles/paas-full.yaml index fdf0db75a..13b4f0d68 100644 --- a/packages/core/platform/bundles/paas-full.yaml +++ b/packages/core/platform/bundles/paas-full.yaml @@ -364,3 +364,10 @@ releases: cozystack: configHash: {{ $cozyConfig | toJson | sha256sum }} {{- end }} + +- name: goldpinger + releaseName: goldpinger + chart: cozy-goldpinger + namespace: cozy-goldpinger + privileged: true + dependsOn: [monitoring-agents] diff --git a/packages/core/platform/bundles/paas-hosted.yaml b/packages/core/platform/bundles/paas-hosted.yaml index 4185fc16b..6b54ff443 100644 --- a/packages/core/platform/bundles/paas-hosted.yaml +++ b/packages/core/platform/bundles/paas-hosted.yaml @@ -245,3 +245,10 @@ releases: cozystack: configHash: {{ $cozyConfig | toJson | sha256sum }} {{- end }} + +- name: goldpinger + releaseName: goldpinger + chart: cozy-goldpinger + namespace: cozy-goldpinger + privileged: true + dependsOn: [monitoring-agents] diff --git a/packages/extra/monitoring/dashboards.list b/packages/extra/monitoring/dashboards.list index 0de7bfd65..e84a8caa7 100644 --- a/packages/extra/monitoring/dashboards.list +++ b/packages/extra/monitoring/dashboards.list @@ -35,3 +35,4 @@ kubevirt/kubevirt-control-plane flux/flux-control-plane flux/flux-stats kafka/strimzi-kafka +goldpinger/goldpinger diff --git a/packages/system/goldpinger/Chart.yaml b/packages/system/goldpinger/Chart.yaml new file mode 100644 index 000000000..db7c25e3b --- /dev/null +++ b/packages/system/goldpinger/Chart.yaml @@ -0,0 +1,3 @@ +apiVersion: v2 +name: cozy-goldpinger +version: 0.0.0 # Placeholder, the actual version will be automatically set during the build process diff --git a/packages/system/goldpinger/Makefile b/packages/system/goldpinger/Makefile new file mode 100644 index 000000000..3ddd79ba4 --- /dev/null +++ b/packages/system/goldpinger/Makefile @@ -0,0 +1,7 @@ +include ../../../scripts/package.mk + +update: + rm -rf charts + helm repo add goldpinger https://bloomberg.github.io/goldpinger + helm repo update goldpinger + helm pull goldpinger/goldpinger --untar --untardir charts diff --git a/packages/system/goldpinger/charts/goldpinger/.helmignore b/packages/system/goldpinger/charts/goldpinger/.helmignore new file mode 100644 index 000000000..825c00779 --- /dev/null +++ b/packages/system/goldpinger/charts/goldpinger/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj + +OWNERS diff --git a/packages/system/goldpinger/charts/goldpinger/Chart.yaml b/packages/system/goldpinger/charts/goldpinger/Chart.yaml new file mode 100644 index 000000000..932c0425b --- /dev/null +++ b/packages/system/goldpinger/charts/goldpinger/Chart.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +appVersion: 3.10.2 +description: Goldpinger is a tool to help debug, troubleshoot and visualize network + connectivity and slowness issues. +home: https://github.com/bloomberg/goldpinger +name: goldpinger +sources: +- https://github.com/bloomberg/goldpinger +version: 1.0.1 diff --git a/packages/system/goldpinger/charts/goldpinger/templates/_helpers.tpl b/packages/system/goldpinger/charts/goldpinger/templates/_helpers.tpl new file mode 100644 index 000000000..c9a0eb673 --- /dev/null +++ b/packages/system/goldpinger/charts/goldpinger/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "goldpinger.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "goldpinger.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "goldpinger.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "goldpinger.labels" -}} +helm.sh/chart: {{ include "goldpinger.chart" . }} +{{ include "goldpinger.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "goldpinger.selectorLabels" -}} +app.kubernetes.io/name: {{ include "goldpinger.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "goldpinger.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "goldpinger.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/packages/system/goldpinger/charts/goldpinger/templates/clusterrole.yaml b/packages/system/goldpinger/charts/goldpinger/templates/clusterrole.yaml new file mode 100644 index 000000000..8404c6487 --- /dev/null +++ b/packages/system/goldpinger/charts/goldpinger/templates/clusterrole.yaml @@ -0,0 +1,12 @@ +{{- if and .Values.rbac.create .Values.rbac.clusterscoped }} +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: {{ include "goldpinger.fullname" . }}-clusterrole + labels: + {{- include "goldpinger.labels" . | nindent 4 }} +rules: + - apiGroups: [""] + resources: ["pods"] + verbs: ["list"] +{{- end }} diff --git a/packages/system/goldpinger/charts/goldpinger/templates/clusterrolebinding.yaml b/packages/system/goldpinger/charts/goldpinger/templates/clusterrolebinding.yaml new file mode 100644 index 000000000..3ba52c35a --- /dev/null +++ b/packages/system/goldpinger/charts/goldpinger/templates/clusterrolebinding.yaml @@ -0,0 +1,16 @@ +{{- if and .Values.rbac.create .Values.rbac.clusterscoped }} +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: {{ include "goldpinger.fullname" . }}-clusterrolebinding + labels: + {{- include "goldpinger.labels" . | nindent 4 }} +subjects: + - kind: ServiceAccount + name: {{ include "goldpinger.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} +roleRef: + kind: ClusterRole + name: {{ include "goldpinger.fullname" . }}-clusterrole + apiGroup: rbac.authorization.k8s.io +{{- end }} diff --git a/packages/system/goldpinger/charts/goldpinger/templates/configmap.yaml b/packages/system/goldpinger/charts/goldpinger/templates/configmap.yaml new file mode 100644 index 000000000..a0a618b7f --- /dev/null +++ b/packages/system/goldpinger/charts/goldpinger/templates/configmap.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "goldpinger.fullname" . }}-zap + labels: + {{- include "goldpinger.labels" . | nindent 4 }} +data: + zap.json: {{ .Values.goldpinger.zapConfig | toJson }} diff --git a/packages/system/goldpinger/charts/goldpinger/templates/daemonset.yaml b/packages/system/goldpinger/charts/goldpinger/templates/daemonset.yaml new file mode 100644 index 000000000..54034a649 --- /dev/null +++ b/packages/system/goldpinger/charts/goldpinger/templates/daemonset.yaml @@ -0,0 +1,103 @@ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: {{ include "goldpinger.fullname" . }} + labels: + {{- include "goldpinger.labels" . | nindent 4 }} +spec: + {{- with .Values.updateStrategy }} + updateStrategy: + {{- toYaml . | nindent 4 }} + {{- end }} + selector: + matchLabels: + {{- include "goldpinger.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{ toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "goldpinger.selectorLabels" . | nindent 8 }} + {{- with .Values.podLabels }} + {{ toYaml . | nindent 8 }} + {{- end }} + spec: + priorityClassName: {{ .Values.priorityClassName }} + serviceAccountName: {{ include "goldpinger.serviceAccountName" . }} + {{- if .Values.image.pullSecrets }} + imagePullSecrets: + {{- range .Values.image.pullSecrets }} + - name: {{ . }} + {{- end }} + {{- end }} + containers: + - name: goldpinger-daemon + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + volumeMounts: + - name: zap + mountPath: /config + env: + - name: HOSTNAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: HOST + value: "0.0.0.0" + - name: PORT + value: "{{ .Values.goldpinger.port }}" + - name: LABEL_SELECTOR + value: "app.kubernetes.io/name={{ include "goldpinger.name" . }}" + {{- if .Values.extraEnv -}} + {{ toYaml .Values.extraEnv | nindent 12 }} + {{- end }} + {{- with .Values.containerSecurityContext }} + securityContext: + {{- toYaml . | nindent 12 }} + {{- end }} + ports: + - name: http + containerPort: {{ .Values.goldpinger.port }} + protocol: TCP + {{- range $k := .Values.extraEnv }} + {{- if and (eq $k.name "USE_HOST_IP") (eq $k.value "true") }} + hostPort: {{ $.Values.goldpinger.port }} + {{- end }} + {{- end }} + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: + {{- toYaml .Values.resources | nindent 12 }} + volumes: + - name: zap + configMap: + name: {{ include "goldpinger.fullname" . }}-zap + {{- range $k := .Values.extraEnv }} + {{- if and (eq $k.name "USE_HOST_IP") (eq $k.value "true") }} + hostNetwork: true + {{- end }} + {{- end }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.podSecurityContext }} + securityContext: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/packages/system/goldpinger/charts/goldpinger/templates/ingress.yaml b/packages/system/goldpinger/charts/goldpinger/templates/ingress.yaml new file mode 100644 index 000000000..899b2c5f1 --- /dev/null +++ b/packages/system/goldpinger/charts/goldpinger/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "goldpinger.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "goldpinger.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/packages/system/goldpinger/charts/goldpinger/templates/prometheusrule.yaml b/packages/system/goldpinger/charts/goldpinger/templates/prometheusrule.yaml new file mode 100644 index 000000000..54a840f58 --- /dev/null +++ b/packages/system/goldpinger/charts/goldpinger/templates/prometheusrule.yaml @@ -0,0 +1,19 @@ +{{- if .Values.prometheusRule.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: PrometheusRule +metadata: + name: {{ template "goldpinger.fullname" . }} + {{- if .Values.prometheusRule.namespace }} + namespace: {{ .Values.prometheusRule.namespace }} + {{- else }} + namespace: {{ .Release.Namespace | quote }} + {{- end }} + labels: + {{- include "goldpinger.labels" . | nindent 4 }} +spec: + {{- with .Values.prometheusRule.rules }} + groups: + - name: {{ template "goldpinger.name" $ }} + rules: {{- tpl (toYaml .) $ | nindent 8 }} + {{- end }} +{{- end }} diff --git a/packages/system/goldpinger/charts/goldpinger/templates/role.yaml b/packages/system/goldpinger/charts/goldpinger/templates/role.yaml new file mode 100644 index 000000000..0b85f3f10 --- /dev/null +++ b/packages/system/goldpinger/charts/goldpinger/templates/role.yaml @@ -0,0 +1,20 @@ +{{- if or .Values.podSecurityPolicy.enabled (not .Values.rbac.clusterscoped) }} +kind: Role +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: {{ include "goldpinger.fullname" . }}-pod-security-policy + labels: + {{- include "goldpinger.labels" . | nindent 4 }} +rules: +{{- if not .Values.rbac.clusterscoped }} + - apiGroups: [""] + resources: ["pods"] + verbs: ["list"] +{{- end }} +{{- if .Values.podSecurityPolicy.enabled }} + - apiGroups: ["extensions"] + resources: ["podsecuritypolicies"] + resourceNames: [{{ .Values.podSecurityPolicy.policyName | quote }}] + verbs: ["use"] +{{- end }} +{{- end }} diff --git a/packages/system/goldpinger/charts/goldpinger/templates/rolebinding.yaml b/packages/system/goldpinger/charts/goldpinger/templates/rolebinding.yaml new file mode 100644 index 000000000..34c0bc447 --- /dev/null +++ b/packages/system/goldpinger/charts/goldpinger/templates/rolebinding.yaml @@ -0,0 +1,16 @@ +{{- if or .Values.podSecurityPolicy.enabled (not .Values.rbac.clusterscoped) }} +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: {{ include "goldpinger.fullname" . }}-pod-security-policy + labels: + {{- include "goldpinger.labels" . | nindent 4 }} +roleRef: + kind: Role + name: {{ include "goldpinger.fullname" . }}-pod-security-policy + apiGroup: rbac.authorization.k8s.io +subjects: + - kind: ServiceAccount + name: {{ include "goldpinger.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} +{{- end }} diff --git a/packages/system/goldpinger/charts/goldpinger/templates/service.yaml b/packages/system/goldpinger/charts/goldpinger/templates/service.yaml new file mode 100644 index 000000000..43a3e85da --- /dev/null +++ b/packages/system/goldpinger/charts/goldpinger/templates/service.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "goldpinger.fullname" . }} + labels: + {{- include "goldpinger.labels" . | nindent 4 }} +{{- with .Values.service.labels }} +{{ toYaml . | indent 4 }} +{{- end }} +{{- with .Values.service.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: {{ .Values.goldpinger.port }} + protocol: TCP + name: http + selector: + {{- include "goldpinger.selectorLabels" . | nindent 4 }} + {{- if .Values.service.loadBalancerSourceRanges }} + loadBalancerSourceRanges: + {{- toYaml .Values.service.loadBalancerSourceRanges | nindent 4 }} + {{- end }} diff --git a/packages/system/goldpinger/charts/goldpinger/templates/serviceaccount.yaml b/packages/system/goldpinger/charts/goldpinger/templates/serviceaccount.yaml new file mode 100644 index 000000000..555643310 --- /dev/null +++ b/packages/system/goldpinger/charts/goldpinger/templates/serviceaccount.yaml @@ -0,0 +1,8 @@ +{{- if .Values.serviceAccount.create }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "goldpinger.serviceAccountName" . }} + labels: + {{- include "goldpinger.labels" . | nindent 4 }} +{{- end }} diff --git a/packages/system/goldpinger/charts/goldpinger/templates/servicemonitor.yaml b/packages/system/goldpinger/charts/goldpinger/templates/servicemonitor.yaml new file mode 100644 index 000000000..6e2463ec4 --- /dev/null +++ b/packages/system/goldpinger/charts/goldpinger/templates/servicemonitor.yaml @@ -0,0 +1,32 @@ +{{- if .Values.serviceMonitor.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ include "goldpinger.fullname" . }} + {{- if .Values.serviceMonitor.namespace }} + namespace: {{ .Values.serviceMonitor.namespace }} + {{- end }} + labels: + {{- include "goldpinger.labels" . | nindent 4 }} + {{- range $key, $value := .Values.serviceMonitor.selector }} + {{ $key }}: {{ $value | quote }} + {{- end }} +spec: + endpoints: + - port: http + interval: {{ .Values.serviceMonitor.interval }} + {{- if .Values.serviceMonitor.honorLabels }} + honorLabels: true + {{- end }} + {{- with .Values.serviceMonitor.metricRelabelings }} + metricRelabelings: + {{- toYaml . | nindent 8 }} + {{- end }} + jobLabel: name + namespaceSelector: + matchNames: + - {{ .Release.Namespace }} + selector: + matchLabels: + {{- include "goldpinger.selectorLabels" . | nindent 6 }} +{{- end -}} diff --git a/packages/system/goldpinger/charts/goldpinger/values.yaml b/packages/system/goldpinger/charts/goldpinger/values.yaml new file mode 100644 index 000000000..1c80a1b11 --- /dev/null +++ b/packages/system/goldpinger/charts/goldpinger/values.yaml @@ -0,0 +1,166 @@ +# Default values for goldpinger. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. +image: + repository: bloomberg/goldpinger + # Overrides the image tag whose default is the chart appVersion. + tag: "" + pullPolicy: IfNotPresent + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## + # pullSecrets: + # - myRegistryKeySecretName + +rbac: + create: true + clusterscoped: true + +serviceAccount: + create: true + name: + +goldpinger: + port: 8080 + zapConfig: | + { + "level": "info", + "encoding": "json", + "outputPaths": [ + "stdout" + ], + "errorOutputPaths": [ + "stderr" + ], + "initialFields": { + }, + "encoderConfig": { + "messageKey": "message", + "levelKey": "level", + "levelEncoder": "lowercase", + "timeKey": "ts", + "timeEncoder": "ISO8601", + "callerKey": "caller", + "callerEncoder": "Short" + } + } + +extraEnv: [] + +service: + type: ClusterIP + port: 8081 + annotations: {} + labels: {} + loadBalancerSourceRanges: {} + +ingress: + enabled: false + className: "" + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: chart-example.local + paths: + - path: / + pathType: ImplementationSpecific + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +## Set a priorityClassName for the pod. If left blank a default priority will be set. +priorityClassName: + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +podAnnotations: {} + +podLabels: {} + +updateStrategy: {} + # type: RollingUpdate + # rollingUpdate: + # maxUnavailable: 1 + +## Node labels for pod assignment +## Ref: https://kubernetes.io/docs/user-guide/node-selection/ +## +nodeSelector: {} + +## Tolerations for pod assignment +## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ +## +tolerations: [] + +## Affinity for pod assignment +## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity +## +affinity: {} + +## Enable this if pod security policy enabled in your cluster +## It will bind ServiceAccount with unrestricted podSecurityPolicy +## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/ +podSecurityPolicy: + enabled: false + policyName: unrestricted-psp + +## Set security context of the goldpinger container +## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ +containerSecurityContext: + capabilities: + drop: + - ALL + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + runAsNonRoot: true + +## Set security context of the pod +## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ +podSecurityContext: + runAsNonRoot: true + runAsUser: 1000 + fsGroup: 2000 + seccompProfile: + type: RuntimeDefault + +serviceMonitor: + enabled: false + selector: + prometheus: "kube-prometheus" + # namespace: monitoring + interval: 30s + # honorLabels: true + metricRelabelings: [] + # - action: drop + # source_labels: [__name__] + # regex: goldpinger_peers_response_time_s_bucket + +## Custom PrometheusRule to be defined +## ref: https://github.com/coreos/prometheus-operator#customresourcedefinitions +prometheusRule: + enabled: false + rules: + - alert: goldpinger_nodes_unhealthy + expr: | + sum(goldpinger_nodes_health_total{job="{{ template "goldpinger.fullname" . }}", status="unhealthy"}) + BY (instance, goldpinger_instance) > 0 + for: 5m + annotations: + description: | + Goldpinger instance {{ "{{ $labels.goldpinger_instance }}" }} has been reporting unhealthy nodes for at least 5 minutes. + summary: Instance {{ "{{ $labels.instance }}" }} down + labels: + severity: warning diff --git a/packages/system/goldpinger/values.yaml b/packages/system/goldpinger/values.yaml new file mode 100644 index 000000000..fb535206c --- /dev/null +++ b/packages/system/goldpinger/values.yaml @@ -0,0 +1,5 @@ +goldpinger: + serviceMonitor: + enabled: true + prometheusRule: + enabled: true