[bitnami/kafka] feat: Add autoscaling support (experimental) (#24929)

* [bitnami/kafka] feat:  Add autoscaling support (experimental)

Signed-off-by: Javier Salmeron Garcia <jsalmeron@vmware.com>

* chore: 🔧 Bump chart version

Signed-off-by: Javier J. Salmerón-García <jsalmeron@vmware.com>

---------

Signed-off-by: Javier Salmeron Garcia <jsalmeron@vmware.com>
Signed-off-by: Javier J. Salmerón-García <jsalmeron@vmware.com>
This commit is contained in:
Javier J. Salmerón-García
2024-04-25 16:35:05 +02:00
committed by GitHub
parent 77c4c6f541
commit e0c0d63020
7 changed files with 521 additions and 211 deletions

View File

@@ -42,4 +42,4 @@ maintainers:
name: kafka name: kafka
sources: sources:
- https://github.com/bitnami/charts/tree/main/bitnami/kafka - https://github.com/bitnami/charts/tree/main/bitnami/kafka
version: 28.0.4 version: 28.1.0

View File

@@ -553,219 +553,251 @@ You can enable this initContainer by setting `volumePermissions.enabled` to `tru
### Controller-eligible statefulset parameters ### Controller-eligible statefulset parameters
| Name | Description | Value | | Name | Description | Value |
| -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | | -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- |
| `controller.replicaCount` | Number of Kafka controller-eligible nodes | `3` | | `controller.replicaCount` | Number of Kafka controller-eligible nodes | `3` |
| `controller.controllerOnly` | If set to true, controller nodes will be deployed as dedicated controllers, instead of controller+broker processes. | `false` | | `controller.controllerOnly` | If set to true, controller nodes will be deployed as dedicated controllers, instead of controller+broker processes. | `false` |
| `controller.minId` | Minimal node.id values for controller-eligible nodes. Do not change after first initialization. | `0` | | `controller.minId` | Minimal node.id values for controller-eligible nodes. Do not change after first initialization. | `0` |
| `controller.zookeeperMigrationMode` | Set to true to deploy cluster controller quorum | `false` | | `controller.zookeeperMigrationMode` | Set to true to deploy cluster controller quorum | `false` |
| `controller.config` | Configuration file for Kafka controller-eligible nodes, rendered as a template. Auto-generated based on chart values when not specified. | `""` | | `controller.config` | Configuration file for Kafka controller-eligible nodes, rendered as a template. Auto-generated based on chart values when not specified. | `""` |
| `controller.existingConfigmap` | ConfigMap with Kafka Configuration for controller-eligible nodes. | `""` | | `controller.existingConfigmap` | ConfigMap with Kafka Configuration for controller-eligible nodes. | `""` |
| `controller.extraConfig` | Additional configuration to be appended at the end of the generated Kafka controller-eligible nodes configuration file. | `""` | | `controller.extraConfig` | Additional configuration to be appended at the end of the generated Kafka controller-eligible nodes configuration file. | `""` |
| `controller.secretConfig` | Additional configuration to be appended at the end of the generated Kafka controller-eligible nodes configuration file. | `""` | | `controller.secretConfig` | Additional configuration to be appended at the end of the generated Kafka controller-eligible nodes configuration file. | `""` |
| `controller.existingSecretConfig` | Secret with additonal configuration that will be appended to the end of the generated Kafka controller-eligible nodes configuration file | `""` | | `controller.existingSecretConfig` | Secret with additonal configuration that will be appended to the end of the generated Kafka controller-eligible nodes configuration file | `""` |
| `controller.heapOpts` | Kafka Java Heap size for controller-eligible nodes | `-Xmx1024m -Xms1024m` | | `controller.heapOpts` | Kafka Java Heap size for controller-eligible nodes | `-Xmx1024m -Xms1024m` |
| `controller.command` | Override Kafka container command | `[]` | | `controller.command` | Override Kafka container command | `[]` |
| `controller.args` | Override Kafka container arguments | `[]` | | `controller.args` | Override Kafka container arguments | `[]` |
| `controller.extraEnvVars` | Extra environment variables to add to Kafka pods | `[]` | | `controller.extraEnvVars` | Extra environment variables to add to Kafka pods | `[]` |
| `controller.extraEnvVarsCM` | ConfigMap with extra environment variables | `""` | | `controller.extraEnvVarsCM` | ConfigMap with extra environment variables | `""` |
| `controller.extraEnvVarsSecret` | Secret with extra environment variables | `""` | | `controller.extraEnvVarsSecret` | Secret with extra environment variables | `""` |
| `controller.extraContainerPorts` | Kafka controller-eligible extra containerPorts. | `[]` | | `controller.extraContainerPorts` | Kafka controller-eligible extra containerPorts. | `[]` |
| `controller.livenessProbe.enabled` | Enable livenessProbe on Kafka containers | `true` | | `controller.livenessProbe.enabled` | Enable livenessProbe on Kafka containers | `true` |
| `controller.livenessProbe.initialDelaySeconds` | Initial delay seconds for livenessProbe | `10` | | `controller.livenessProbe.initialDelaySeconds` | Initial delay seconds for livenessProbe | `10` |
| `controller.livenessProbe.periodSeconds` | Period seconds for livenessProbe | `10` | | `controller.livenessProbe.periodSeconds` | Period seconds for livenessProbe | `10` |
| `controller.livenessProbe.timeoutSeconds` | Timeout seconds for livenessProbe | `5` | | `controller.livenessProbe.timeoutSeconds` | Timeout seconds for livenessProbe | `5` |
| `controller.livenessProbe.failureThreshold` | Failure threshold for livenessProbe | `3` | | `controller.livenessProbe.failureThreshold` | Failure threshold for livenessProbe | `3` |
| `controller.livenessProbe.successThreshold` | Success threshold for livenessProbe | `1` | | `controller.livenessProbe.successThreshold` | Success threshold for livenessProbe | `1` |
| `controller.readinessProbe.enabled` | Enable readinessProbe on Kafka containers | `true` | | `controller.readinessProbe.enabled` | Enable readinessProbe on Kafka containers | `true` |
| `controller.readinessProbe.initialDelaySeconds` | Initial delay seconds for readinessProbe | `5` | | `controller.readinessProbe.initialDelaySeconds` | Initial delay seconds for readinessProbe | `5` |
| `controller.readinessProbe.periodSeconds` | Period seconds for readinessProbe | `10` | | `controller.readinessProbe.periodSeconds` | Period seconds for readinessProbe | `10` |
| `controller.readinessProbe.timeoutSeconds` | Timeout seconds for readinessProbe | `5` | | `controller.readinessProbe.timeoutSeconds` | Timeout seconds for readinessProbe | `5` |
| `controller.readinessProbe.failureThreshold` | Failure threshold for readinessProbe | `6` | | `controller.readinessProbe.failureThreshold` | Failure threshold for readinessProbe | `6` |
| `controller.readinessProbe.successThreshold` | Success threshold for readinessProbe | `1` | | `controller.readinessProbe.successThreshold` | Success threshold for readinessProbe | `1` |
| `controller.startupProbe.enabled` | Enable startupProbe on Kafka containers | `false` | | `controller.startupProbe.enabled` | Enable startupProbe on Kafka containers | `false` |
| `controller.startupProbe.initialDelaySeconds` | Initial delay seconds for startupProbe | `30` | | `controller.startupProbe.initialDelaySeconds` | Initial delay seconds for startupProbe | `30` |
| `controller.startupProbe.periodSeconds` | Period seconds for startupProbe | `10` | | `controller.startupProbe.periodSeconds` | Period seconds for startupProbe | `10` |
| `controller.startupProbe.timeoutSeconds` | Timeout seconds for startupProbe | `1` | | `controller.startupProbe.timeoutSeconds` | Timeout seconds for startupProbe | `1` |
| `controller.startupProbe.failureThreshold` | Failure threshold for startupProbe | `15` | | `controller.startupProbe.failureThreshold` | Failure threshold for startupProbe | `15` |
| `controller.startupProbe.successThreshold` | Success threshold for startupProbe | `1` | | `controller.startupProbe.successThreshold` | Success threshold for startupProbe | `1` |
| `controller.customLivenessProbe` | Custom livenessProbe that overrides the default one | `{}` | | `controller.customLivenessProbe` | Custom livenessProbe that overrides the default one | `{}` |
| `controller.customReadinessProbe` | Custom readinessProbe that overrides the default one | `{}` | | `controller.customReadinessProbe` | Custom readinessProbe that overrides the default one | `{}` |
| `controller.customStartupProbe` | Custom startupProbe that overrides the default one | `{}` | | `controller.customStartupProbe` | Custom startupProbe that overrides the default one | `{}` |
| `controller.lifecycleHooks` | lifecycleHooks for the Kafka container to automate configuration before or after startup | `{}` | | `controller.lifecycleHooks` | lifecycleHooks for the Kafka container to automate configuration before or after startup | `{}` |
| `controller.initContainerResources.limits` | The resources limits for the init container | `{}` | | `controller.initContainerResources.limits` | The resources limits for the init container | `{}` |
| `controller.initContainerResources.requests` | The requested resources for the init container | `{}` | | `controller.initContainerResources.requests` | The requested resources for the init container | `{}` |
| `controller.resourcesPreset` | Set container resources according to one common preset (allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge). This is ignored if controller.resources is set (controller.resources is recommended for production). | `small` | | `controller.resourcesPreset` | Set container resources according to one common preset (allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge). This is ignored if controller.resources is set (controller.resources is recommended for production). | `small` |
| `controller.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` | | `controller.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` |
| `controller.podSecurityContext.enabled` | Enable security context for the pods | `true` | | `controller.podSecurityContext.enabled` | Enable security context for the pods | `true` |
| `controller.podSecurityContext.fsGroupChangePolicy` | Set filesystem group change policy | `Always` | | `controller.podSecurityContext.fsGroupChangePolicy` | Set filesystem group change policy | `Always` |
| `controller.podSecurityContext.sysctls` | Set kernel settings using the sysctl interface | `[]` | | `controller.podSecurityContext.sysctls` | Set kernel settings using the sysctl interface | `[]` |
| `controller.podSecurityContext.supplementalGroups` | Set filesystem extra groups | `[]` | | `controller.podSecurityContext.supplementalGroups` | Set filesystem extra groups | `[]` |
| `controller.podSecurityContext.fsGroup` | Set Kafka pod's Security Context fsGroup | `1001` | | `controller.podSecurityContext.fsGroup` | Set Kafka pod's Security Context fsGroup | `1001` |
| `controller.podSecurityContext.seccompProfile.type` | Set Kafka pods's Security Context seccomp profile | `RuntimeDefault` | | `controller.podSecurityContext.seccompProfile.type` | Set Kafka pods's Security Context seccomp profile | `RuntimeDefault` |
| `controller.containerSecurityContext.enabled` | Enable Kafka containers' Security Context | `true` | | `controller.containerSecurityContext.enabled` | Enable Kafka containers' Security Context | `true` |
| `controller.containerSecurityContext.seLinuxOptions` | Set SELinux options in container | `{}` | | `controller.containerSecurityContext.seLinuxOptions` | Set SELinux options in container | `{}` |
| `controller.containerSecurityContext.runAsUser` | Set containers' Security Context runAsUser | `1001` | | `controller.containerSecurityContext.runAsUser` | Set containers' Security Context runAsUser | `1001` |
| `controller.containerSecurityContext.runAsGroup` | Set containers' Security Context runAsGroup | `1001` | | `controller.containerSecurityContext.runAsGroup` | Set containers' Security Context runAsGroup | `1001` |
| `controller.containerSecurityContext.runAsGroup` | Set Kafka containers' Security Context runAsGroup | `1001` | | `controller.containerSecurityContext.runAsGroup` | Set Kafka containers' Security Context runAsGroup | `1001` |
| `controller.containerSecurityContext.runAsNonRoot` | Set Kafka containers' Security Context runAsNonRoot | `true` | | `controller.containerSecurityContext.runAsNonRoot` | Set Kafka containers' Security Context runAsNonRoot | `true` |
| `controller.containerSecurityContext.allowPrivilegeEscalation` | Force the child process to be run as non-privileged | `false` | | `controller.containerSecurityContext.allowPrivilegeEscalation` | Force the child process to be run as non-privileged | `false` |
| `controller.containerSecurityContext.readOnlyRootFilesystem` | Allows the pod to mount the RootFS as ReadOnly only | `true` | | `controller.containerSecurityContext.readOnlyRootFilesystem` | Allows the pod to mount the RootFS as ReadOnly only | `true` |
| `controller.containerSecurityContext.capabilities.drop` | Set Kafka containers' server Security Context capabilities to be dropped | `["ALL"]` | | `controller.containerSecurityContext.capabilities.drop` | Set Kafka containers' server Security Context capabilities to be dropped | `["ALL"]` |
| `controller.automountServiceAccountToken` | Mount Service Account token in pod | `false` | | `controller.automountServiceAccountToken` | Mount Service Account token in pod | `false` |
| `controller.hostAliases` | Kafka pods host aliases | `[]` | | `controller.hostAliases` | Kafka pods host aliases | `[]` |
| `controller.hostNetwork` | Specify if host network should be enabled for Kafka pods | `false` | | `controller.hostNetwork` | Specify if host network should be enabled for Kafka pods | `false` |
| `controller.hostIPC` | Specify if host IPC should be enabled for Kafka pods | `false` | | `controller.hostIPC` | Specify if host IPC should be enabled for Kafka pods | `false` |
| `controller.podLabels` | Extra labels for Kafka pods | `{}` | | `controller.podLabels` | Extra labels for Kafka pods | `{}` |
| `controller.podAnnotations` | Extra annotations for Kafka pods | `{}` | | `controller.podAnnotations` | Extra annotations for Kafka pods | `{}` |
| `controller.podAffinityPreset` | Pod affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard` | `""` | | `controller.podAffinityPreset` | Pod affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `controller.podAntiAffinityPreset` | Pod anti-affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard` | `soft` | | `controller.podAntiAffinityPreset` | Pod anti-affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard` | `soft` |
| `controller.nodeAffinityPreset.type` | Node affinity preset type. Ignored if `affinity` is set. Allowed values: `soft` or `hard` | `""` | | `controller.nodeAffinityPreset.type` | Node affinity preset type. Ignored if `affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `controller.nodeAffinityPreset.key` | Node label key to match Ignored if `affinity` is set. | `""` | | `controller.nodeAffinityPreset.key` | Node label key to match Ignored if `affinity` is set. | `""` |
| `controller.nodeAffinityPreset.values` | Node label values to match. Ignored if `affinity` is set. | `[]` | | `controller.nodeAffinityPreset.values` | Node label values to match. Ignored if `affinity` is set. | `[]` |
| `controller.affinity` | Affinity for pod assignment | `{}` | | `controller.affinity` | Affinity for pod assignment | `{}` |
| `controller.nodeSelector` | Node labels for pod assignment | `{}` | | `controller.nodeSelector` | Node labels for pod assignment | `{}` |
| `controller.tolerations` | Tolerations for pod assignment | `[]` | | `controller.tolerations` | Tolerations for pod assignment | `[]` |
| `controller.topologySpreadConstraints` | Topology Spread Constraints for pod assignment spread across your cluster among failure-domains. Evaluated as a template | `[]` | | `controller.topologySpreadConstraints` | Topology Spread Constraints for pod assignment spread across your cluster among failure-domains. Evaluated as a template | `[]` |
| `controller.terminationGracePeriodSeconds` | Seconds the pod needs to gracefully terminate | `""` | | `controller.terminationGracePeriodSeconds` | Seconds the pod needs to gracefully terminate | `""` |
| `controller.podManagementPolicy` | StatefulSet controller supports relax its ordering guarantees while preserving its uniqueness and identity guarantees. There are two valid pod management policies: OrderedReady and Parallel | `Parallel` | | `controller.podManagementPolicy` | StatefulSet controller supports relax its ordering guarantees while preserving its uniqueness and identity guarantees. There are two valid pod management policies: OrderedReady and Parallel | `Parallel` |
| `controller.minReadySeconds` | How many seconds a pod needs to be ready before killing the next, during update | `0` | | `controller.minReadySeconds` | How many seconds a pod needs to be ready before killing the next, during update | `0` |
| `controller.priorityClassName` | Name of the existing priority class to be used by kafka pods | `""` | | `controller.priorityClassName` | Name of the existing priority class to be used by kafka pods | `""` |
| `controller.runtimeClassName` | Name of the runtime class to be used by pod(s) | `""` | | `controller.runtimeClassName` | Name of the runtime class to be used by pod(s) | `""` |
| `controller.enableServiceLinks` | Whether information about services should be injected into pod's environment variable | `true` | | `controller.enableServiceLinks` | Whether information about services should be injected into pod's environment variable | `true` |
| `controller.schedulerName` | Name of the k8s scheduler (other than default) | `""` | | `controller.schedulerName` | Name of the k8s scheduler (other than default) | `""` |
| `controller.updateStrategy.type` | Kafka statefulset strategy type | `RollingUpdate` | | `controller.updateStrategy.type` | Kafka statefulset strategy type | `RollingUpdate` |
| `controller.extraVolumes` | Optionally specify extra list of additional volumes for the Kafka pod(s) | `[]` | | `controller.extraVolumes` | Optionally specify extra list of additional volumes for the Kafka pod(s) | `[]` |
| `controller.extraVolumeMounts` | Optionally specify extra list of additional volumeMounts for the Kafka container(s) | `[]` | | `controller.extraVolumeMounts` | Optionally specify extra list of additional volumeMounts for the Kafka container(s) | `[]` |
| `controller.sidecars` | Add additional sidecar containers to the Kafka pod(s) | `[]` | | `controller.sidecars` | Add additional sidecar containers to the Kafka pod(s) | `[]` |
| `controller.initContainers` | Add additional Add init containers to the Kafka pod(s) | `[]` | | `controller.initContainers` | Add additional Add init containers to the Kafka pod(s) | `[]` |
| `controller.pdb.create` | Deploy a pdb object for the Kafka pod | `false` |
| `controller.pdb.minAvailable` | Maximum number/percentage of unavailable Kafka replicas | `""` | ### Experimental: Kafka Controller Autoscaling configuration
| `controller.pdb.maxUnavailable` | Maximum number/percentage of unavailable Kafka replicas | `1` |
| `controller.persistence.enabled` | Enable Kafka data persistence using PVC, note that ZooKeeper persistence is unaffected | `true` | | Name | Description | Value |
| `controller.persistence.existingClaim` | A manually managed Persistent Volume and Claim | `""` | | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- |
| `controller.persistence.storageClass` | PVC Storage Class for Kafka data volume | `""` | | `controller.autoscaling.vpa.enabled` | Enable VPA | `false` |
| `controller.persistence.accessModes` | Persistent Volume Access Modes | `["ReadWriteOnce"]` | | `controller.autoscaling.vpa.annotations` | Annotations for VPA resource | `{}` |
| `controller.persistence.size` | PVC Storage Request for Kafka data volume | `8Gi` | | `controller.autoscaling.vpa.controlledResources` | VPA List of resources that the vertical pod autoscaler can control. Defaults to cpu and memory | `[]` |
| `controller.persistence.annotations` | Annotations for the PVC | `{}` | | `controller.autoscaling.vpa.maxAllowed` | VPA Max allowed resources for the pod | `{}` |
| `controller.persistence.labels` | Labels for the PVC | `{}` | | `controller.autoscaling.vpa.minAllowed` | VPA Min allowed resources for the pod | `{}` |
| `controller.persistence.selector` | Selector to match an existing Persistent Volume for Kafka data PVC. If set, the PVC can't have a PV dynamically provisioned for it | `{}` | | `controller.autoscaling.vpa.updatePolicy.updateMode` | Autoscaling update policy Specifies whether recommended updates are applied when a Pod is started and whether recommended updates are applied during the life of a Pod | `Auto` |
| `controller.persistence.mountPath` | Mount path of the Kafka data volume | `/bitnami/kafka` | | `controller.autoscaling.hpa.enabled` | Enable HPA for Kafka Controller | `false` |
| `controller.logPersistence.enabled` | Enable Kafka logs persistence using PVC, note that ZooKeeper persistence is unaffected | `false` | | `controller.autoscaling.hpa.minReplicas` | Minimum number of Kafka Controller replicas | `""` |
| `controller.logPersistence.existingClaim` | A manually managed Persistent Volume and Claim | `""` | | `controller.autoscaling.hpa.maxReplicas` | Maximum number of Kafka Controller replicas | `""` |
| `controller.logPersistence.storageClass` | PVC Storage Class for Kafka logs volume | `""` | | `controller.autoscaling.hpa.targetCPU` | Target CPU utilization percentage | `""` |
| `controller.logPersistence.accessModes` | Persistent Volume Access Modes | `["ReadWriteOnce"]` | | `controller.autoscaling.hpa.targetMemory` | Target Memory utilization percentage | `""` |
| `controller.logPersistence.size` | PVC Storage Request for Kafka logs volume | `8Gi` | | `controller.pdb.create` | Deploy a pdb object for the Kafka pod | `false` |
| `controller.logPersistence.annotations` | Annotations for the PVC | `{}` | | `controller.pdb.minAvailable` | Maximum number/percentage of unavailable Kafka replicas | `""` |
| `controller.logPersistence.selector` | Selector to match an existing Persistent Volume for Kafka log data PVC. If set, the PVC can't have a PV dynamically provisioned for it | `{}` | | `controller.pdb.maxUnavailable` | Maximum number/percentage of unavailable Kafka replicas | `1` |
| `controller.logPersistence.mountPath` | Mount path of the Kafka logs volume | `/opt/bitnami/kafka/logs` | | `controller.persistence.enabled` | Enable Kafka data persistence using PVC, note that ZooKeeper persistence is unaffected | `true` |
| `controller.persistence.existingClaim` | A manually managed Persistent Volume and Claim | `""` |
| `controller.persistence.storageClass` | PVC Storage Class for Kafka data volume | `""` |
| `controller.persistence.accessModes` | Persistent Volume Access Modes | `["ReadWriteOnce"]` |
| `controller.persistence.size` | PVC Storage Request for Kafka data volume | `8Gi` |
| `controller.persistence.annotations` | Annotations for the PVC | `{}` |
| `controller.persistence.labels` | Labels for the PVC | `{}` |
| `controller.persistence.selector` | Selector to match an existing Persistent Volume for Kafka data PVC. If set, the PVC can't have a PV dynamically provisioned for it | `{}` |
| `controller.persistence.mountPath` | Mount path of the Kafka data volume | `/bitnami/kafka` |
| `controller.logPersistence.enabled` | Enable Kafka logs persistence using PVC, note that ZooKeeper persistence is unaffected | `false` |
| `controller.logPersistence.existingClaim` | A manually managed Persistent Volume and Claim | `""` |
| `controller.logPersistence.storageClass` | PVC Storage Class for Kafka logs volume | `""` |
| `controller.logPersistence.accessModes` | Persistent Volume Access Modes | `["ReadWriteOnce"]` |
| `controller.logPersistence.size` | PVC Storage Request for Kafka logs volume | `8Gi` |
| `controller.logPersistence.annotations` | Annotations for the PVC | `{}` |
| `controller.logPersistence.selector` | Selector to match an existing Persistent Volume for Kafka log data PVC. If set, the PVC can't have a PV dynamically provisioned for it | `{}` |
| `controller.logPersistence.mountPath` | Mount path of the Kafka logs volume | `/opt/bitnami/kafka/logs` |
### Broker-only statefulset parameters ### Broker-only statefulset parameters
| Name | Description | Value | | Name | Description | Value |
| ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- |
| `broker.replicaCount` | Number of Kafka broker-only nodes | `0` | | `broker.replicaCount` | Number of Kafka broker-only nodes | `0` |
| `broker.minId` | Minimal node.id values for broker-only nodes. Do not change after first initialization. | `100` | | `broker.minId` | Minimal node.id values for broker-only nodes. Do not change after first initialization. | `100` |
| `broker.zookeeperMigrationMode` | Set to true to deploy cluster controller quorum | `false` | | `broker.zookeeperMigrationMode` | Set to true to deploy cluster controller quorum | `false` |
| `broker.config` | Configuration file for Kafka broker-only nodes, rendered as a template. Auto-generated based on chart values when not specified. | `""` | | `broker.config` | Configuration file for Kafka broker-only nodes, rendered as a template. Auto-generated based on chart values when not specified. | `""` |
| `broker.existingConfigmap` | ConfigMap with Kafka Configuration for broker-only nodes. | `""` | | `broker.existingConfigmap` | ConfigMap with Kafka Configuration for broker-only nodes. | `""` |
| `broker.extraConfig` | Additional configuration to be appended at the end of the generated Kafka broker-only nodes configuration file. | `""` | | `broker.extraConfig` | Additional configuration to be appended at the end of the generated Kafka broker-only nodes configuration file. | `""` |
| `broker.secretConfig` | Additional configuration to be appended at the end of the generated Kafka broker-only nodes configuration file. | `""` | | `broker.secretConfig` | Additional configuration to be appended at the end of the generated Kafka broker-only nodes configuration file. | `""` |
| `broker.existingSecretConfig` | Secret with additonal configuration that will be appended to the end of the generated Kafka broker-only nodes configuration file | `""` | | `broker.existingSecretConfig` | Secret with additonal configuration that will be appended to the end of the generated Kafka broker-only nodes configuration file | `""` |
| `broker.heapOpts` | Kafka Java Heap size for broker-only nodes | `-Xmx1024m -Xms1024m` | | `broker.heapOpts` | Kafka Java Heap size for broker-only nodes | `-Xmx1024m -Xms1024m` |
| `broker.command` | Override Kafka container command | `[]` | | `broker.command` | Override Kafka container command | `[]` |
| `broker.args` | Override Kafka container arguments | `[]` | | `broker.args` | Override Kafka container arguments | `[]` |
| `broker.extraEnvVars` | Extra environment variables to add to Kafka pods | `[]` | | `broker.extraEnvVars` | Extra environment variables to add to Kafka pods | `[]` |
| `broker.extraEnvVarsCM` | ConfigMap with extra environment variables | `""` | | `broker.extraEnvVarsCM` | ConfigMap with extra environment variables | `""` |
| `broker.extraEnvVarsSecret` | Secret with extra environment variables | `""` | | `broker.extraEnvVarsSecret` | Secret with extra environment variables | `""` |
| `broker.extraContainerPorts` | Kafka broker-only extra containerPorts. | `[]` | | `broker.extraContainerPorts` | Kafka broker-only extra containerPorts. | `[]` |
| `broker.livenessProbe.enabled` | Enable livenessProbe on Kafka containers | `true` | | `broker.livenessProbe.enabled` | Enable livenessProbe on Kafka containers | `true` |
| `broker.livenessProbe.initialDelaySeconds` | Initial delay seconds for livenessProbe | `10` | | `broker.livenessProbe.initialDelaySeconds` | Initial delay seconds for livenessProbe | `10` |
| `broker.livenessProbe.periodSeconds` | Period seconds for livenessProbe | `10` | | `broker.livenessProbe.periodSeconds` | Period seconds for livenessProbe | `10` |
| `broker.livenessProbe.timeoutSeconds` | Timeout seconds for livenessProbe | `5` | | `broker.livenessProbe.timeoutSeconds` | Timeout seconds for livenessProbe | `5` |
| `broker.livenessProbe.failureThreshold` | Failure threshold for livenessProbe | `3` | | `broker.livenessProbe.failureThreshold` | Failure threshold for livenessProbe | `3` |
| `broker.livenessProbe.successThreshold` | Success threshold for livenessProbe | `1` | | `broker.livenessProbe.successThreshold` | Success threshold for livenessProbe | `1` |
| `broker.readinessProbe.enabled` | Enable readinessProbe on Kafka containers | `true` | | `broker.readinessProbe.enabled` | Enable readinessProbe on Kafka containers | `true` |
| `broker.readinessProbe.initialDelaySeconds` | Initial delay seconds for readinessProbe | `5` | | `broker.readinessProbe.initialDelaySeconds` | Initial delay seconds for readinessProbe | `5` |
| `broker.readinessProbe.periodSeconds` | Period seconds for readinessProbe | `10` | | `broker.readinessProbe.periodSeconds` | Period seconds for readinessProbe | `10` |
| `broker.readinessProbe.timeoutSeconds` | Timeout seconds for readinessProbe | `5` | | `broker.readinessProbe.timeoutSeconds` | Timeout seconds for readinessProbe | `5` |
| `broker.readinessProbe.failureThreshold` | Failure threshold for readinessProbe | `6` | | `broker.readinessProbe.failureThreshold` | Failure threshold for readinessProbe | `6` |
| `broker.readinessProbe.successThreshold` | Success threshold for readinessProbe | `1` | | `broker.readinessProbe.successThreshold` | Success threshold for readinessProbe | `1` |
| `broker.startupProbe.enabled` | Enable startupProbe on Kafka containers | `false` | | `broker.startupProbe.enabled` | Enable startupProbe on Kafka containers | `false` |
| `broker.startupProbe.initialDelaySeconds` | Initial delay seconds for startupProbe | `30` | | `broker.startupProbe.initialDelaySeconds` | Initial delay seconds for startupProbe | `30` |
| `broker.startupProbe.periodSeconds` | Period seconds for startupProbe | `10` | | `broker.startupProbe.periodSeconds` | Period seconds for startupProbe | `10` |
| `broker.startupProbe.timeoutSeconds` | Timeout seconds for startupProbe | `1` | | `broker.startupProbe.timeoutSeconds` | Timeout seconds for startupProbe | `1` |
| `broker.startupProbe.failureThreshold` | Failure threshold for startupProbe | `15` | | `broker.startupProbe.failureThreshold` | Failure threshold for startupProbe | `15` |
| `broker.startupProbe.successThreshold` | Success threshold for startupProbe | `1` | | `broker.startupProbe.successThreshold` | Success threshold for startupProbe | `1` |
| `broker.customLivenessProbe` | Custom livenessProbe that overrides the default one | `{}` | | `broker.customLivenessProbe` | Custom livenessProbe that overrides the default one | `{}` |
| `broker.customReadinessProbe` | Custom readinessProbe that overrides the default one | `{}` | | `broker.customReadinessProbe` | Custom readinessProbe that overrides the default one | `{}` |
| `broker.customStartupProbe` | Custom startupProbe that overrides the default one | `{}` | | `broker.customStartupProbe` | Custom startupProbe that overrides the default one | `{}` |
| `broker.lifecycleHooks` | lifecycleHooks for the Kafka container to automate configuration before or after startup | `{}` | | `broker.lifecycleHooks` | lifecycleHooks for the Kafka container to automate configuration before or after startup | `{}` |
| `broker.initContainerResources.limits` | The resources limits for the container | `{}` | | `broker.initContainerResources.limits` | The resources limits for the container | `{}` |
| `broker.initContainerResources.requests` | The requested resources for the container | `{}` | | `broker.initContainerResources.requests` | The requested resources for the container | `{}` |
| `broker.resourcesPreset` | Set container resources according to one common preset (allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge). This is ignored if broker.resources is set (broker.resources is recommended for production). | `small` | | `broker.resourcesPreset` | Set container resources according to one common preset (allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge). This is ignored if broker.resources is set (broker.resources is recommended for production). | `small` |
| `broker.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` | | `broker.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` |
| `broker.podSecurityContext.enabled` | Enable security context for the pods | `true` | | `broker.podSecurityContext.enabled` | Enable security context for the pods | `true` |
| `broker.podSecurityContext.fsGroupChangePolicy` | Set filesystem group change policy | `Always` | | `broker.podSecurityContext.fsGroupChangePolicy` | Set filesystem group change policy | `Always` |
| `broker.podSecurityContext.sysctls` | Set kernel settings using the sysctl interface | `[]` | | `broker.podSecurityContext.sysctls` | Set kernel settings using the sysctl interface | `[]` |
| `broker.podSecurityContext.supplementalGroups` | Set filesystem extra groups | `[]` | | `broker.podSecurityContext.supplementalGroups` | Set filesystem extra groups | `[]` |
| `broker.podSecurityContext.fsGroup` | Set Kafka pod's Security Context fsGroup | `1001` | | `broker.podSecurityContext.fsGroup` | Set Kafka pod's Security Context fsGroup | `1001` |
| `broker.podSecurityContext.seccompProfile.type` | Set Kafka pod's Security Context seccomp profile | `RuntimeDefault` | | `broker.podSecurityContext.seccompProfile.type` | Set Kafka pod's Security Context seccomp profile | `RuntimeDefault` |
| `broker.containerSecurityContext.enabled` | Enable Kafka containers' Security Context | `true` | | `broker.containerSecurityContext.enabled` | Enable Kafka containers' Security Context | `true` |
| `broker.containerSecurityContext.seLinuxOptions` | Set SELinux options in container | `{}` | | `broker.containerSecurityContext.seLinuxOptions` | Set SELinux options in container | `{}` |
| `broker.containerSecurityContext.runAsUser` | Set containers' Security Context runAsUser | `1001` | | `broker.containerSecurityContext.runAsUser` | Set containers' Security Context runAsUser | `1001` |
| `broker.containerSecurityContext.runAsGroup` | Set containers' Security Context runAsGroup | `1001` | | `broker.containerSecurityContext.runAsGroup` | Set containers' Security Context runAsGroup | `1001` |
| `broker.containerSecurityContext.runAsNonRoot` | Set Kafka containers' Security Context runAsNonRoot | `true` | | `broker.containerSecurityContext.runAsNonRoot` | Set Kafka containers' Security Context runAsNonRoot | `true` |
| `broker.containerSecurityContext.allowPrivilegeEscalation` | Force the child process to be run as non-privileged | `false` | | `broker.containerSecurityContext.allowPrivilegeEscalation` | Force the child process to be run as non-privileged | `false` |
| `broker.containerSecurityContext.readOnlyRootFilesystem` | Allows the pod to mount the RootFS as ReadOnly only | `true` | | `broker.containerSecurityContext.readOnlyRootFilesystem` | Allows the pod to mount the RootFS as ReadOnly only | `true` |
| `broker.containerSecurityContext.capabilities.drop` | Set Kafka containers' server Security Context capabilities to be dropped | `["ALL"]` | | `broker.containerSecurityContext.capabilities.drop` | Set Kafka containers' server Security Context capabilities to be dropped | `["ALL"]` |
| `broker.automountServiceAccountToken` | Mount Service Account token in pod | `false` | | `broker.automountServiceAccountToken` | Mount Service Account token in pod | `false` |
| `broker.hostAliases` | Kafka pods host aliases | `[]` | | `broker.hostAliases` | Kafka pods host aliases | `[]` |
| `broker.hostNetwork` | Specify if host network should be enabled for Kafka pods | `false` | | `broker.hostNetwork` | Specify if host network should be enabled for Kafka pods | `false` |
| `broker.hostIPC` | Specify if host IPC should be enabled for Kafka pods | `false` | | `broker.hostIPC` | Specify if host IPC should be enabled for Kafka pods | `false` |
| `broker.podLabels` | Extra labels for Kafka pods | `{}` | | `broker.podLabels` | Extra labels for Kafka pods | `{}` |
| `broker.podAnnotations` | Extra annotations for Kafka pods | `{}` | | `broker.podAnnotations` | Extra annotations for Kafka pods | `{}` |
| `broker.podAffinityPreset` | Pod affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard` | `""` | | `broker.podAffinityPreset` | Pod affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `broker.podAntiAffinityPreset` | Pod anti-affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard` | `soft` | | `broker.podAntiAffinityPreset` | Pod anti-affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard` | `soft` |
| `broker.nodeAffinityPreset.type` | Node affinity preset type. Ignored if `affinity` is set. Allowed values: `soft` or `hard` | `""` | | `broker.nodeAffinityPreset.type` | Node affinity preset type. Ignored if `affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `broker.nodeAffinityPreset.key` | Node label key to match Ignored if `affinity` is set. | `""` | | `broker.nodeAffinityPreset.key` | Node label key to match Ignored if `affinity` is set. | `""` |
| `broker.nodeAffinityPreset.values` | Node label values to match. Ignored if `affinity` is set. | `[]` | | `broker.nodeAffinityPreset.values` | Node label values to match. Ignored if `affinity` is set. | `[]` |
| `broker.affinity` | Affinity for pod assignment | `{}` | | `broker.affinity` | Affinity for pod assignment | `{}` |
| `broker.nodeSelector` | Node labels for pod assignment | `{}` | | `broker.nodeSelector` | Node labels for pod assignment | `{}` |
| `broker.tolerations` | Tolerations for pod assignment | `[]` | | `broker.tolerations` | Tolerations for pod assignment | `[]` |
| `broker.topologySpreadConstraints` | Topology Spread Constraints for pod assignment spread across your cluster among failure-domains. Evaluated as a template | `[]` | | `broker.topologySpreadConstraints` | Topology Spread Constraints for pod assignment spread across your cluster among failure-domains. Evaluated as a template | `[]` |
| `broker.terminationGracePeriodSeconds` | Seconds the pod needs to gracefully terminate | `""` | | `broker.terminationGracePeriodSeconds` | Seconds the pod needs to gracefully terminate | `""` |
| `broker.podManagementPolicy` | StatefulSet controller supports relax its ordering guarantees while preserving its uniqueness and identity guarantees. There are two valid pod management policies: OrderedReady and Parallel | `Parallel` | | `broker.podManagementPolicy` | StatefulSet controller supports relax its ordering guarantees while preserving its uniqueness and identity guarantees. There are two valid pod management policies: OrderedReady and Parallel | `Parallel` |
| `broker.minReadySeconds` | How many seconds a pod needs to be ready before killing the next, during update | `0` | | `broker.minReadySeconds` | How many seconds a pod needs to be ready before killing the next, during update | `0` |
| `broker.priorityClassName` | Name of the existing priority class to be used by kafka pods | `""` | | `broker.priorityClassName` | Name of the existing priority class to be used by kafka pods | `""` |
| `broker.runtimeClassName` | Name of the runtime class to be used by pod(s) | `""` | | `broker.runtimeClassName` | Name of the runtime class to be used by pod(s) | `""` |
| `broker.enableServiceLinks` | Whether information about services should be injected into pod's environment variable | `true` | | `broker.enableServiceLinks` | Whether information about services should be injected into pod's environment variable | `true` |
| `broker.schedulerName` | Name of the k8s scheduler (other than default) | `""` | | `broker.schedulerName` | Name of the k8s scheduler (other than default) | `""` |
| `broker.updateStrategy.type` | Kafka statefulset strategy type | `RollingUpdate` | | `broker.updateStrategy.type` | Kafka statefulset strategy type | `RollingUpdate` |
| `broker.extraVolumes` | Optionally specify extra list of additional volumes for the Kafka pod(s) | `[]` | | `broker.extraVolumes` | Optionally specify extra list of additional volumes for the Kafka pod(s) | `[]` |
| `broker.extraVolumeMounts` | Optionally specify extra list of additional volumeMounts for the Kafka container(s) | `[]` | | `broker.extraVolumeMounts` | Optionally specify extra list of additional volumeMounts for the Kafka container(s) | `[]` |
| `broker.sidecars` | Add additional sidecar containers to the Kafka pod(s) | `[]` | | `broker.sidecars` | Add additional sidecar containers to the Kafka pod(s) | `[]` |
| `broker.initContainers` | Add additional Add init containers to the Kafka pod(s) | `[]` | | `broker.initContainers` | Add additional Add init containers to the Kafka pod(s) | `[]` |
| `broker.pdb.create` | Deploy a pdb object for the Kafka pod | `false` | | `broker.pdb.create` | Deploy a pdb object for the Kafka pod | `false` |
| `broker.pdb.minAvailable` | Maximum number/percentage of unavailable Kafka replicas | `""` | | `broker.pdb.minAvailable` | Maximum number/percentage of unavailable Kafka replicas | `""` |
| `broker.pdb.maxUnavailable` | Maximum number/percentage of unavailable Kafka replicas | `1` | | `broker.pdb.maxUnavailable` | Maximum number/percentage of unavailable Kafka replicas | `1` |
| `broker.persistence.enabled` | Enable Kafka data persistence using PVC, note that ZooKeeper persistence is unaffected | `true` |
| `broker.persistence.existingClaim` | A manually managed Persistent Volume and Claim | `""` | ### Experimental: Kafka Broker Autoscaling configuration
| `broker.persistence.storageClass` | PVC Storage Class for Kafka data volume | `""` |
| `broker.persistence.accessModes` | Persistent Volume Access Modes | `["ReadWriteOnce"]` | | Name | Description | Value |
| `broker.persistence.size` | PVC Storage Request for Kafka data volume | `8Gi` | | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- |
| `broker.persistence.annotations` | Annotations for the PVC | `{}` | | `broker.autoscaling.vpa.enabled` | Enable VPA | `false` |
| `broker.persistence.labels` | Labels for the PVC | `{}` | | `broker.autoscaling.vpa.annotations` | Annotations for VPA resource | `{}` |
| `broker.persistence.selector` | Selector to match an existing Persistent Volume for Kafka data PVC. If set, the PVC can't have a PV dynamically provisioned for it | `{}` | | `broker.autoscaling.vpa.controlledResources` | VPA List of resources that the vertical pod autoscaler can control. Defaults to cpu and memory | `[]` |
| `broker.persistence.mountPath` | Mount path of the Kafka data volume | `/bitnami/kafka` | | `broker.autoscaling.vpa.maxAllowed` | VPA Max allowed resources for the pod | `{}` |
| `broker.logPersistence.enabled` | Enable Kafka logs persistence using PVC, note that ZooKeeper persistence is unaffected | `false` | | `broker.autoscaling.vpa.minAllowed` | VPA Min allowed resources for the pod | `{}` |
| `broker.logPersistence.existingClaim` | A manually managed Persistent Volume and Claim | `""` | | `broker.autoscaling.vpa.updatePolicy.updateMode` | Autoscaling update policy Specifies whether recommended updates are applied when a Pod is started and whether recommended updates are applied during the life of a Pod | `Auto` |
| `broker.logPersistence.storageClass` | PVC Storage Class for Kafka logs volume | `""` | | `broker.autoscaling.hpa.enabled` | Enable HPA for Kafka Broker | `false` |
| `broker.logPersistence.accessModes` | Persistent Volume Access Modes | `["ReadWriteOnce"]` | | `broker.autoscaling.hpa.minReplicas` | Minimum number of Kafka Broker replicas | `""` |
| `broker.logPersistence.size` | PVC Storage Request for Kafka logs volume | `8Gi` | | `broker.autoscaling.hpa.maxReplicas` | Maximum number of Kafka Broker replicas | `""` |
| `broker.logPersistence.annotations` | Annotations for the PVC | `{}` | | `broker.autoscaling.hpa.targetCPU` | Target CPU utilization percentage | `""` |
| `broker.logPersistence.selector` | Selector to match an existing Persistent Volume for Kafka log data PVC. If set, the PVC can't have a PV dynamically provisioned for it | `{}` | | `broker.autoscaling.hpa.targetMemory` | Target Memory utilization percentage | `""` |
| `broker.logPersistence.mountPath` | Mount path of the Kafka logs volume | `/opt/bitnami/kafka/logs` | | `broker.persistence.enabled` | Enable Kafka data persistence using PVC, note that ZooKeeper persistence is unaffected | `true` |
| `broker.persistence.existingClaim` | A manually managed Persistent Volume and Claim | `""` |
| `broker.persistence.storageClass` | PVC Storage Class for Kafka data volume | `""` |
| `broker.persistence.accessModes` | Persistent Volume Access Modes | `["ReadWriteOnce"]` |
| `broker.persistence.size` | PVC Storage Request for Kafka data volume | `8Gi` |
| `broker.persistence.annotations` | Annotations for the PVC | `{}` |
| `broker.persistence.labels` | Labels for the PVC | `{}` |
| `broker.persistence.selector` | Selector to match an existing Persistent Volume for Kafka data PVC. If set, the PVC can't have a PV dynamically provisioned for it | `{}` |
| `broker.persistence.mountPath` | Mount path of the Kafka data volume | `/bitnami/kafka` |
| `broker.logPersistence.enabled` | Enable Kafka logs persistence using PVC, note that ZooKeeper persistence is unaffected | `false` |
| `broker.logPersistence.existingClaim` | A manually managed Persistent Volume and Claim | `""` |
| `broker.logPersistence.storageClass` | PVC Storage Class for Kafka logs volume | `""` |
| `broker.logPersistence.accessModes` | Persistent Volume Access Modes | `["ReadWriteOnce"]` |
| `broker.logPersistence.size` | PVC Storage Request for Kafka logs volume | `8Gi` |
| `broker.logPersistence.annotations` | Annotations for the PVC | `{}` |
| `broker.logPersistence.selector` | Selector to match an existing Persistent Volume for Kafka log data PVC. If set, the PVC can't have a PV dynamically provisioned for it | `{}` |
| `broker.logPersistence.mountPath` | Mount path of the Kafka logs volume | `/opt/bitnami/kafka/logs` |
### Traffic Exposure parameters ### Traffic Exposure parameters

View File

@@ -0,0 +1,51 @@
{{- /*
Copyright VMware, Inc.
SPDX-License-Identifier: APACHE-2.0
*/}}
{{- $replicaCount := int .Values.broker.replicaCount }}
{{- if and (gt $replicaCount 0) .Values.broker.autoscaling.hpa.enabled }}
apiVersion: {{ include "common.capabilities.hpa.apiVersion" ( dict "context" $ ) }}
kind: HorizontalPodAutoscaler
metadata:
name: {{ printf "%s-broker" (include "common.names.fullname" .) }}
namespace: {{ include "common.names.namespace" . | quote }}
labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
app.kubernetes.io/component: broker
app.kubernetes.io/part-of: kafka
{{- if or .Values.broker.autoscaling.hpa.annotations .Values.commonAnnotations }}
{{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.broker.autoscaling.hpa.annotations .Values.commonAnnotations ) "context" . ) }}
annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
{{- end }}
spec:
scaleTargetRef:
apiVersion: {{ template "common.capabilities.statefulset.apiVersion" . }}
kind: StatefulSet
name: {{ printf "%s-broker" (include "common.names.fullname" .) }}
minReplicas: {{ .Values.broker.autoscaling.hpa.minReplicas }}
maxReplicas: {{ .Values.broker.autoscaling.hpa.maxReplicas }}
metrics:
{{- if .Values.broker.autoscaling.hpa.targetCPU }}
- type: Resource
resource:
name: cpu
{{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }}
targetAverageUtilization: {{ .Values.broker.autoscaling.hpa.targetCPU }}
{{- else }}
target:
type: Utilization
averageUtilization: {{ .Values.broker.autoscaling.hpa.targetCPU }}
{{- end }}
{{- end }}
{{- if .Values.broker.autoscaling.hpa.targetMemory }}
- type: Resource
resource:
name: memory
{{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }}
targetAverageUtilization: {{ .Values.broker.autoscaling.hpa.targetMemory }}
{{- else }}
target:
type: Utilization
averageUtilization: {{ .Values.broker.autoscaling.hpa.targetMemory }}
{{- end }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,45 @@
{{- /*
Copyright VMware, Inc.
SPDX-License-Identifier: APACHE-2.0
*/}}
{{- $replicaCount := int .Values.broker.replicaCount }}
{{- if and (gt $replicaCount 0) (.Capabilities.APIVersions.Has "autoscaling.k8s.io/v1/VerticalPodAutoscaler") .Values.broker.autoscaling.vpa.enabled }}
apiVersion: {{ include "common.capabilities.vpa.apiVersion" . }}
kind: VerticalPodAutoscaler
metadata:
name: {{ printf "%s-broker" (include "common.names.fullname" .) }}
namespace: {{ include "common.names.namespace" . | quote }}
labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
app.kubernetes.io/component: broker
app.kubernetes.io/part-of: kafka
{{- if or .Values.broker.autoscaling.vpa.annotations .Values.commonAnnotations }}
{{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.broker.autoscaling.vpa.annotations .Values.commonAnnotations ) "context" . ) }}
annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
{{- end }}
spec:
resourcePolicy:
containerPolicies:
- containerName: kafka
{{- with .Values.broker.autoscaling.vpa.controlledResources }}
controlledResources:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.broker.autoscaling.vpa.maxAllowed }}
maxAllowed:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.broker.autoscaling.vpa.minAllowed }}
minAllowed:
{{- toYaml . | nindent 8 }}
{{- end }}
targetRef:
apiVersion: {{ (include "common.capabilities.statefulset.apiVersion" .) }}
kind: StatefulSet
name: {{ printf "%s-broker" (include "common.names.fullname" .) }}
{{- if .Values.broker.autoscaling.vpa.updatePolicy }}
updatePolicy:
{{- with .Values.broker.autoscaling.vpa.updatePolicy.updateMode }}
updateMode: {{ . }}
{{- end }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,51 @@
{{- /*
Copyright VMware, Inc.
SPDX-License-Identifier: APACHE-2.0
*/}}
{{- $replicaCount := int .Values.controller.replicaCount }}
{{- if and .Values.kraft.enabled (gt $replicaCount 0) .Values.controller.autoscaling.hpa.enabled }}
apiVersion: {{ include "common.capabilities.hpa.apiVersion" ( dict "context" $ ) }}
kind: HorizontalPodAutoscaler
metadata:
name: {{ printf "%s-controller" (include "common.names.fullname" .) }}
namespace: {{ include "common.names.namespace" . | quote }}
labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
app.kubernetes.io/component: controller
app.kubernetes.io/part-of: kafka
{{- if or .Values.controller.autoscaling.hpa.annotations .Values.commonAnnotations }}
{{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.controller.autoscaling.hpa.annotations .Values.commonAnnotations ) "context" . ) }}
annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
{{- end }}
spec:
scaleTargetRef:
apiVersion: {{ template "common.capabilities.statefulset.apiVersion" . }}
kind: StatefulSet
name: {{ printf "%s-controller" (include "common.names.fullname" .) }}
minReplicas: {{ .Values.controller.autoscaling.hpa.minReplicas }}
maxReplicas: {{ .Values.controller.autoscaling.hpa.maxReplicas }}
metrics:
{{- if .Values.controller.autoscaling.hpa.targetCPU }}
- type: Resource
resource:
name: cpu
{{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }}
targetAverageUtilization: {{ .Values.controller.autoscaling.hpa.targetCPU }}
{{- else }}
target:
type: Utilization
averageUtilization: {{ .Values.controller.autoscaling.hpa.targetCPU }}
{{- end }}
{{- end }}
{{- if .Values.controller.autoscaling.hpa.targetMemory }}
- type: Resource
resource:
name: memory
{{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }}
targetAverageUtilization: {{ .Values.controller.autoscaling.hpa.targetMemory }}
{{- else }}
target:
type: Utilization
averageUtilization: {{ .Values.controller.autoscaling.hpa.targetMemory }}
{{- end }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,45 @@
{{- /*
Copyright VMware, Inc.
SPDX-License-Identifier: APACHE-2.0
*/}}
{{- $replicaCount := int .Values.controller.replicaCount }}
{{- if and .Values.kraft.enabled (gt $replicaCount 0) (.Capabilities.APIVersions.Has "autoscaling.k8s.io/v1/VerticalPodAutoscaler") .Values.controller.autoscaling.vpa.enabled }}
apiVersion: {{ include "common.capabilities.vpa.apiVersion" . }}
kind: VerticalPodAutoscaler
metadata:
name: {{ printf "%s-controller" (include "common.names.fullname" .) }}
namespace: {{ include "common.names.namespace" . | quote }}
labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
app.kubernetes.io/component: controller
app.kubernetes.io/part-of: kafka
{{- if or .Values.controller.autoscaling.vpa.annotations .Values.commonAnnotations }}
{{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.controller.autoscaling.vpa.annotations .Values.commonAnnotations ) "context" . ) }}
annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
{{- end }}
spec:
resourcePolicy:
containerPolicies:
- containerName: kafka
{{- with .Values.controller.autoscaling.vpa.controlledResources }}
controlledResources:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.controller.autoscaling.vpa.maxAllowed }}
maxAllowed:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.controller.autoscaling.vpa.minAllowed }}
minAllowed:
{{- toYaml . | nindent 8 }}
{{- end }}
targetRef:
apiVersion: {{ (include "common.capabilities.statefulset.apiVersion" .) }}
kind: StatefulSet
name: {{ printf "%s-controller" (include "common.names.fullname" .) }}
{{- if .Values.controller.autoscaling.vpa.updatePolicy }}
updatePolicy:
{{- with .Values.controller.autoscaling.vpa.updatePolicy.updateMode }}
updateMode: {{ . }}
{{- end }}
{{- end }}
{{- end }}

View File

@@ -791,6 +791,49 @@ controller:
## containerPort: 1234 ## containerPort: 1234
## ##
initContainers: [] initContainers: []
## @section Experimental: Kafka Controller Autoscaling configuration
## ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
##
autoscaling:
vpa:
## @param controller.autoscaling.vpa.enabled Enable VPA
##
enabled: false
## @param controller.autoscaling.vpa.annotations Annotations for VPA resource
##
annotations: {}
## @param controller.autoscaling.vpa.controlledResources VPA List of resources that the vertical pod autoscaler can control. Defaults to cpu and memory
##
controlledResources: []
## @param controller.autoscaling.vpa.maxAllowed VPA Max allowed resources for the pod
## cpu: 200m
## memory: 100Mi
maxAllowed: {}
## @param controller.autoscaling.vpa.minAllowed VPA Min allowed resources for the pod
## cpu: 200m
## memory: 100Mi
minAllowed: {}
updatePolicy:
## @param controller.autoscaling.vpa.updatePolicy.updateMode Autoscaling update policy Specifies whether recommended updates are applied when a Pod is started and whether recommended updates are applied during the life of a Pod
## Possible values are "Off", "Initial", "Recreate", and "Auto".
##
updateMode: Auto
hpa:
## @param controller.autoscaling.hpa.enabled Enable HPA for Kafka Controller
##
enabled: false
## @param controller.autoscaling.hpa.minReplicas Minimum number of Kafka Controller replicas
##
minReplicas: ""
## @param controller.autoscaling.hpa.maxReplicas Maximum number of Kafka Controller replicas
##
maxReplicas: ""
## @param controller.autoscaling.hpa.targetCPU Target CPU utilization percentage
##
targetCPU: ""
## @param controller.autoscaling.hpa.targetMemory Target Memory utilization percentage
##
targetMemory: ""
## Kafka Pod Disruption Budget ## Kafka Pod Disruption Budget
## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/ ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
## @param controller.pdb.create Deploy a pdb object for the Kafka pod ## @param controller.pdb.create Deploy a pdb object for the Kafka pod
@@ -1211,6 +1254,49 @@ broker:
create: false create: false
minAvailable: "" minAvailable: ""
maxUnavailable: 1 maxUnavailable: 1
## @section Experimental: Kafka Broker Autoscaling configuration
## ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
##
autoscaling:
vpa:
## @param broker.autoscaling.vpa.enabled Enable VPA
##
enabled: false
## @param broker.autoscaling.vpa.annotations Annotations for VPA resource
##
annotations: {}
## @param broker.autoscaling.vpa.controlledResources VPA List of resources that the vertical pod autoscaler can control. Defaults to cpu and memory
##
controlledResources: []
## @param broker.autoscaling.vpa.maxAllowed VPA Max allowed resources for the pod
## cpu: 200m
## memory: 100Mi
maxAllowed: {}
## @param broker.autoscaling.vpa.minAllowed VPA Min allowed resources for the pod
## cpu: 200m
## memory: 100Mi
minAllowed: {}
updatePolicy:
## @param broker.autoscaling.vpa.updatePolicy.updateMode Autoscaling update policy Specifies whether recommended updates are applied when a Pod is started and whether recommended updates are applied during the life of a Pod
## Possible values are "Off", "Initial", "Recreate", and "Auto".
##
updateMode: Auto
hpa:
## @param broker.autoscaling.hpa.enabled Enable HPA for Kafka Broker
##
enabled: false
## @param broker.autoscaling.hpa.minReplicas Minimum number of Kafka Broker replicas
##
minReplicas: ""
## @param broker.autoscaling.hpa.maxReplicas Maximum number of Kafka Broker replicas
##
maxReplicas: ""
## @param broker.autoscaling.hpa.targetCPU Target CPU utilization percentage
##
targetCPU: ""
## @param broker.autoscaling.hpa.targetMemory Target Memory utilization percentage
##
targetMemory: ""
## Enable persistence using Persistent Volume Claims ## Enable persistence using Persistent Volume Claims
## ref: https://kubernetes.io/docs/concepts/storage/persistent-volumes/ ## ref: https://kubernetes.io/docs/concepts/storage/persistent-volumes/
## ##