diff --git a/charts/deepgram-self-hosted/CHANGELOG.md b/charts/deepgram-self-hosted/CHANGELOG.md index c4e8fac..861c0a4 100644 --- a/charts/deepgram-self-hosted/CHANGELOG.md +++ b/charts/deepgram-self-hosted/CHANGELOG.md @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ## Unreleased +### Added + +- Added `topologySpreadConstraints`, which allows even distribution of pods from the same deployment across availability zones, among other criteria + ## [0.21.0] - 2025-09-29 ### Changed diff --git a/charts/deepgram-self-hosted/README.md b/charts/deepgram-self-hosted/README.md index 47a93e4..c5f5dff 100644 --- a/charts/deepgram-self-hosted/README.md +++ b/charts/deepgram-self-hosted/README.md @@ -293,6 +293,7 @@ If you encounter issues while deploying or using Deepgram, consider the followin | api.serviceAccount.create | bool | `true` | Specifies whether to create a default service account for the Deepgram API Deployment. | | api.serviceAccount.name | string | `nil` | Allows providing a custom service account name for the API component. If left empty, the default service account name will be used. If specified, and `api.serviceAccount.create = true`, this defines the name of the default service account. If specified, and `api.serviceAccount.create = false`, this provides the name of a preconfigured service account you wish to attach to the API deployment. | | api.tolerations | list | `[]` | [Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) to apply to API pods. | +| api.topologySpreadConstraints | list | `[]` | [Topology spread constraints](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#topologyspreadconstraints-field) to apply to API pods. | | api.updateStrategy.rollingUpdate.maxSurge | int | `1` | The maximum number of extra API pods that can be created during a rollingUpdate, relative to the number of replicas. See the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#max-surge) for more details. | | api.updateStrategy.rollingUpdate.maxUnavailable | int | `0` | The maximum number of API pods, relative to the number of replicas, that can go offline during a rolling update. See the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#max-unavailable) for more details. | | aura2 | object | `` | Aura-2 specific configuration options | @@ -362,6 +363,7 @@ If you encounter issues while deploying or using Deepgram, consider the followin | engine.startupProbe.failureThreshold | int | `60` | failureThreshold defines how many unsuccessful startup probe attempts are allowed before the container will be marked as Failed | | engine.startupProbe.periodSeconds | int | `10` | periodSeconds defines how often to execute the probe. | | engine.tolerations | list | `[]` | [Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) to apply to Engine pods. | +| engine.topologySpreadConstraints | list | `[]` | [Topology spread constraints](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#topologyspreadconstraints-field) to apply to Engine pods. | | engine.updateStrategy.rollingUpdate.maxSurge | int | `1` | The maximum number of extra Engine pods that can be created during a rollingUpdate, relative to the number of replicas. See the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#max-surge) for more details. | | engine.updateStrategy.rollingUpdate.maxUnavailable | int | `0` | The maximum number of Engine pods, relative to the number of replicas, that can go offline during a rolling update. See the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#max-unavailable) for more details. | | global.additionalLabels | object | `{}` | Additional labels to add to all Deepgram resources | @@ -406,6 +408,7 @@ If you encounter issues while deploying or using Deepgram, consider the followin | licenseProxy.serviceAccount.create | bool | `true` | Specifies whether to create a default service account for the Deepgram License Proxy Deployment. | | licenseProxy.serviceAccount.name | string | `nil` | Allows providing a custom service account name for the LicenseProxy component. If left empty, the default service account name will be used. If specified, and `licenseProxy.serviceAccount.create = true`, this defines the name of the default service account. If specified, and `licenseProxy.serviceAccount.create = false`, this provides the name of a preconfigured service account you wish to attach to the License Proxy deployment. | | licenseProxy.tolerations | list | `[]` | [Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) to apply to License Proxy pods. | +| licenseProxy.topologySpreadConstraints | list | `[]` | [Topology spread constraints](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#topologyspreadconstraints-field) to apply to License Proxy pods. | | licenseProxy.updateStrategy.rollingUpdate | object | `` | For the LicenseProxy, we only expose maxSurge and not maxUnavailable. This is to avoid accidentally having all LicenseProxy nodes go offline during upgrades, which could impact the entire cluster's connection to the Deepgram License Server. | | licenseProxy.updateStrategy.rollingUpdate.maxSurge | int | `1` | The maximum number of extra License Proxy pods that can be created during a rollingUpdate, relative to the number of replicas. See the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#max-surge) for more details. | | prometheus-adapter | object | `` | Passthrough values for [Prometheus Adapter Helm chart](https://github.com/prometheus-community/helm-charts/tree/main/charts/prometheus-adapter). Prometheus, and its adapter here, should be configured when scaling.auto is enabled. You may choose to use the installation/configuration bundled in this Helm chart, or you may configure an existing Prometheus installation in your cluster to expose the needed values. See source Helm chart for explanation of available values. Default values provided in this chart are used to provide pod autoscaling for Deepgram pods. | diff --git a/charts/deepgram-self-hosted/templates/api/api.deployment.yaml b/charts/deepgram-self-hosted/templates/api/api.deployment.yaml index d14b5d7..588d6a6 100644 --- a/charts/deepgram-self-hosted/templates/api/api.deployment.yaml +++ b/charts/deepgram-self-hosted/templates/api/api.deployment.yaml @@ -43,6 +43,8 @@ spec: {{- toYaml .Values.api.affinity | nindent 8 }} tolerations: {{- toYaml .Values.api.tolerations | nindent 8 }} + topologySpreadConstraints: + {{- toYaml .Values.api.topologySpreadConstraints | nindent 8 }} nodeSelector: {{- toYaml .Values.api.nodeSelector | nindent 8 }} securityContext: diff --git a/charts/deepgram-self-hosted/templates/engine/engine.deployment.yaml b/charts/deepgram-self-hosted/templates/engine/engine.deployment.yaml index 5da15bb..d60f485 100644 --- a/charts/deepgram-self-hosted/templates/engine/engine.deployment.yaml +++ b/charts/deepgram-self-hosted/templates/engine/engine.deployment.yaml @@ -61,6 +61,8 @@ spec: {{- toYaml $.Values.engine.affinity | nindent 8 }} tolerations: {{- toYaml $.Values.engine.tolerations | nindent 8 }} + topologySpreadConstraints: + {{- toYaml $.Values.engine.topologySpreadConstraints | nindent 8 }} nodeSelector: {{- toYaml $.Values.engine.nodeSelector | nindent 8 }} {{- with $.Values.engine.securityContext }} diff --git a/charts/deepgram-self-hosted/templates/license-proxy/license-proxy.deployment.yaml b/charts/deepgram-self-hosted/templates/license-proxy/license-proxy.deployment.yaml index fcb8cea..9c94360 100644 --- a/charts/deepgram-self-hosted/templates/license-proxy/license-proxy.deployment.yaml +++ b/charts/deepgram-self-hosted/templates/license-proxy/license-proxy.deployment.yaml @@ -41,6 +41,8 @@ spec: {{- toYaml .Values.licenseProxy.affinity | nindent 8 }} tolerations: {{- toYaml .Values.licenseProxy.tolerations | nindent 8 }} + topologySpreadConstraints: + {{- toYaml .Values.licenseProxy.topologySpreadConstraints | nindent 8 }} nodeSelector: {{- toYaml .Values.licenseProxy.nodeSelector | nindent 8 }} securityContext: diff --git a/charts/deepgram-self-hosted/values.yaml b/charts/deepgram-self-hosted/values.yaml index 3de45e7..b0aa38a 100644 --- a/charts/deepgram-self-hosted/values.yaml +++ b/charts/deepgram-self-hosted/values.yaml @@ -293,6 +293,10 @@ api: # to apply to API pods. nodeSelector: {} + # -- [Topology spread constraints](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#topologyspreadconstraints-field) + # to apply to API pods. + topologySpreadConstraints: [] + # -- [Pod-level security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod) for API pods. securityContext: {} @@ -505,6 +509,9 @@ engine: # -- [Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) # to apply to Engine pods. tolerations: [] + # -- [Topology spread constraints](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#topologyspreadconstraints-field) + # to apply to Engine pods. + topologySpreadConstraints: [] # -- [Node selector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) # to apply to Engine pods. @@ -770,6 +777,9 @@ licenseProxy: # -- [Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) # to apply to License Proxy pods. tolerations: [] + # -- [Topology spread constraints](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#topologyspreadconstraints-field) + # to apply to License Proxy pods. + topologySpreadConstraints: [] # -- [Node selector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) # to apply to License Proxy pods.