From 849f801df8a216aa6536eb503cce93665d78ea13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Cabrera=20Mi=C3=B1agorri?= Date: Thu, 14 Jan 2021 12:52:27 +0100 Subject: [PATCH] Add extraEnvVars and preExec to sentinel node (#4985) --- bitnami/redis/Chart.yaml | 2 +- bitnami/redis/README.md | 58 ++++++++++--------- .../redis/templates/configmap-scripts.yaml | 3 + .../templates/redis-node-statefulset.yaml | 14 +++++ bitnami/redis/values-production.yaml | 22 +++++++ bitnami/redis/values.yaml | 22 +++++++ 6 files changed, 93 insertions(+), 28 deletions(-) diff --git a/bitnami/redis/Chart.yaml b/bitnami/redis/Chart.yaml index 8ef8af36c..8a84b2278 100644 --- a/bitnami/redis/Chart.yaml +++ b/bitnami/redis/Chart.yaml @@ -25,4 +25,4 @@ name: redis sources: - https://github.com/bitnami/bitnami-docker-redis - http://redis.io/ -version: 12.4.0 +version: 12.5.0 diff --git a/bitnami/redis/README.md b/bitnami/redis/README.md index 4349fd259..c19a3c7ee 100644 --- a/bitnami/redis/README.md +++ b/bitnami/redis/README.md @@ -28,11 +28,11 @@ You can choose any of the two Redis Helm charts for deploying a Redis cluster. While [Redis Helm Chart](https://github.com/bitnami/charts/tree/master/bitnami/redis) will deploy a master-slave cluster using Redis Sentinel, the [Redis Cluster Helm Chart](https://github.com/bitnami/charts/tree/master/bitnami/redis-cluster) will deploy a Redis Cluster topology with sharding. The main features of each chart are the following: -| Redis | Redis Cluster | -|-----------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------| -| Supports multiple databases | Supports only one database. Better if you have a big dataset | -| Single write point (single master) | Multiple write points (multiple masters) | -| ![Redis Topology](img/redis-topology.png) | ![Redis Cluster Topology](img/redis-cluster-topology.png) | +| Redis | Redis Cluster | +|:------------------------------------------|:-------------------------------------------------------------| +| Supports multiple databases | Supports only one database. Better if you have a big dataset | +| Single write point (single master) | Multiple write points (multiple masters) | +| ![Redis Topology](img/redis-topology.png) | ![Redis Cluster Topology](img/redis-cluster-topology.png) | ## Prerequisites @@ -67,7 +67,7 @@ The command removes all the Kubernetes components associated with the chart and The following table lists the configurable parameters of the Redis chart and their default values. | Parameter | Description | Default | -|-----------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------| +|:----------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------|:--------------------------------------------------------| | `global.imageRegistry` | Global Docker image registry | `nil` | | `global.imagePullSecrets` | Global Docker registry secret names as an array | `[]` (does not add image pull secrets to deployed pods) | | `global.storageClass` | Global storage class for dynamic provisioning | `nil` | @@ -138,27 +138,27 @@ The following table lists the configurable parameters of the Redis chart and the | `master.persistence.size` | Size of data volume | `8Gi` | | `master.persistence.matchLabels` | matchLabels persistent volume selector | `{}` | | `master.persistence.matchExpressions` | matchExpressions persistent volume selector | `{}` | -| `master.persistence.volumes ` | Additional volumes without creating PVC | `{}` | +| `master.persistence.volumes ` | Additional volumes without creating PVC | `{}` | | `master.statefulset.labels` | Additional labels for redis master StatefulSet | `{}` | | `master.statefulset.annotations` | Additional annotations for redis master StatefulSet | `{}` | | `master.statefulset.updateStrategy` | Update strategy for StatefulSet | onDelete | | `master.statefulset.rollingUpdatePartition` | Partition update strategy | `nil` | | `master.podLabels` | Additional labels for Redis master pod | {} | | `master.podAnnotations` | Additional annotations for Redis master pod | {} | -| `master.extraEnvVars` | Additional Environment Variables passed to the pod of the master's stateful set set | `[]` -| `master.extraEnvVarCMs` | Additional Environment Variables ConfigMappassed to the pod of the master's stateful set set | `[]` -| `master.extraEnvVarsSecret` | Additional Environment Variables Secret passed to the master's stateful set | `[]` -| `podDisruptionBudget.enabled` | Pod Disruption Budget toggle | `false` | -| `podDisruptionBudget.minAvailable` | Minimum available pods | `1` | -| `podDisruptionBudget.maxUnavailable` | Maximum unavailable pods | `nil` | +| `master.extraEnvVars` | Additional Environment Variables passed to the pod of the master's stateful set set | `[]` | +| `master.extraEnvVarCMs` | Additional Environment Variables ConfigMappassed to the pod of the master's stateful set set | `[]` | +| `master.extraEnvVarsSecret` | Additional Environment Variables Secret passed to the master's stateful set | `[]` | +| `podDisruptionBudget.enabled` | Pod Disruption Budget toggle | `false` | +| `podDisruptionBudget.minAvailable` | Minimum available pods | `1` | +| `podDisruptionBudget.maxUnavailable` | Maximum unavailable pods | `nil` | | `redisPort` | Redis port (in both master and slaves) | `6379` | -| `tls.enabled` | Enable TLS support for replication traffic | `false` | -| `tls.authClients` | Require clients to authenticate or not | `true` | -| `tls.certificatesSecret` | Name of the secret that contains the certificates | `nil` | -| `tls.certFilename` | Certificate filename | `nil` | -| `tls.certKeyFilename` | Certificate key filename | `nil` | -| `tls.certCAFilename` | CA Certificate filename |`nil` | -| `tls.dhParamsFilename` | DH params (in order to support DH based ciphers) |`nil` | +| `tls.enabled` | Enable TLS support for replication traffic | `false` | +| `tls.authClients` | Require clients to authenticate or not | `true` | +| `tls.certificatesSecret` | Name of the secret that contains the certificates | `nil` | +| `tls.certFilename` | Certificate filename | `nil` | +| `tls.certKeyFilename` | Certificate key filename | `nil` | +| `tls.certCAFilename` | CA Certificate filename | `nil` | +| `tls.dhParamsFilename` | DH params (in order to support DH based ciphers) | `nil` | | `master.command` | Redis master entrypoint string. The command `redis-server` is executed if this is not provided. Note this is prepended with `exec` | `/run.sh` | | `master.preExecCmds` | Text to inset into the startup script immediately prior to `master.command`. Use this if you need to run other ad-hoc commands as part of startup | `nil` | | `master.configmap` | Additional Redis configuration for the master nodes (this value is evaluated as a template) | `nil` | @@ -169,7 +169,7 @@ The following table lists the configurable parameters of the Redis chart and the | `master.affinity` | Affinity settings for Redis master pod assignment | {} | | `master.schedulerName` | Name of an alternate scheduler | `nil` | | `master.service.type` | Kubernetes Service type (redis master) | `ClusterIP` | -| `master.service.externalTrafficPolicy` | External traffic policy (when service type is LoadBalancer) | `Cluster` | +| `master.service.externalTrafficPolicy` | External traffic policy (when service type is LoadBalancer) | `Cluster` | | `master.service.port` | Kubernetes Service port (redis master) | `6379` | | `master.service.nodePort` | Kubernetes Service nodePort (redis master) | `nil` | | `master.service.annotations` | annotations for redis master service | {} | @@ -200,7 +200,7 @@ The following table lists the configurable parameters of the Redis chart and the | `volumePermissions.securityContext.*` | Security context of the init container | `{}` | | `volumePermissions.securityContext.runAsUser` | UserID for the init container (when facing issues in OpenShift or uid unknown, try value "auto") | 0 | | `slave.service.type` | Kubernetes Service type (redis slave) | `ClusterIP` | -| `slave.service.externalTrafficPolicy` | External traffic policy (when service type is LoadBalancer) | `Cluster` | +| `slave.service.externalTrafficPolicy` | External traffic policy (when service type is LoadBalancer) | `Cluster` | | `slave.service.nodePort` | Kubernetes Service nodePort (redis slave) | `nil` | | `slave.service.annotations` | annotations for redis slave service | {} | | `slave.service.labels` | Additional labels for redis slave service | {} | @@ -237,15 +237,15 @@ The following table lists the configurable parameters of the Redis chart and the | `slave.statefulset.annotations` | Additional annotations for redis slave StatefulSet | `{}` | | `slave.statefulset.updateStrategy` | Update strategy for StatefulSet | onDelete | | `slave.statefulset.rollingUpdatePartition` | Partition update strategy | `nil` | -| `slave.extraEnvVars` | Additional Environment Variables passed to the pod of the slave's stateful set set | `[]` -| `slave.extraEnvVarCMs` | Additional Environment Variables ConfigMappassed to the pod of the slave's stateful set set | `[]` -| `masslaveter.extraEnvVarsSecret` | Additional Environment Variables Secret passed to the slave's stateful set | `[]` +| `slave.extraEnvVars` | Additional Environment Variables passed to the pod of the slave's stateful set set | `[]` | +| `slave.extraEnvVarCMs` | Additional Environment Variables ConfigMappassed to the pod of the slave's stateful set set | `[]` | +| `masslaveter.extraEnvVarsSecret` | Additional Environment Variables Secret passed to the slave's stateful set | `[]` | | `slave.podLabels` | Additional labels for Redis slave pod | `master.podLabels` | | `slave.podAnnotations` | Additional annotations for Redis slave pod | `master.podAnnotations` | | `slave.schedulerName` | Name of an alternate scheduler | `nil` | | `slave.resources` | Redis slave CPU/Memory resource requests/limits | `{}` | | `slave.affinity` | Enable node/pod affinity for slaves | {} | -| `slave.tolerations` | Toleration labels for Redis slave pod assignment | [] | +| `slave.tolerations` | Toleration labels for Redis slave pod assignment | [] | | `slave.spreadConstraints` | [Topology Spread Constraints](https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/) for Redis slave pod | {} | | `slave.priorityClassName` | Redis Slave pod priorityClassName | `nil` | | `sentinel.enabled` | Enable sentinel containers | `false` | @@ -260,7 +260,7 @@ The following table lists the configurable parameters of the Redis chart and the | `sentinel.configmap` | Additional Redis configuration for the sentinel nodes (this value is evaluated as a template) | `nil` | | `sentinel.staticID` | Enable static IDs for sentinel replicas (If disabled IDs will be randomly generated on startup) | `false` | | `sentinel.service.type` | Kubernetes Service type (redis sentinel) | `ClusterIP` | -| `sentinel.service.externalTrafficPolicy` | External traffic policy (when service type is LoadBalancer) | `Cluster` | +| `sentinel.service.externalTrafficPolicy` | External traffic policy (when service type is LoadBalancer) | `Cluster` | | `sentinel.service.nodePort` | Kubernetes Service nodePort (redis sentinel) | `nil` | | `sentinel.service.annotations` | annotations for redis sentinel service | {} | | `sentinel.service.labels` | Additional labels for redis sentinel service | {} | @@ -287,6 +287,10 @@ The following table lists the configurable parameters of the Redis chart and the | `sentinel.image.tag` | Redis Sentinel Image tag | `{TAG_NAME}` | | `sentinel.image.pullPolicy` | Image pull policy | `IfNotPresent` | | `sentinel.image.pullSecrets` | Specify docker-registry secret names as an array | `nil` | +| `sentinel.extraEnvVars` | Additional Environment Variables passed to the pod of the sentinel node stateful set set | `[]` | +| `sentinel.extraEnvVarCMs` | Additional Environment Variables ConfigMappassed to the pod of the sentinel node stateful set set | `[]` | +| `sentinel.extraEnvVarsSecret` | Additional Environment Variables Secret passed to the sentinel node statefulset | `[]` | +| `sentinel.preExecCmds` | Text to inset into the startup script immediately prior to `sentinel.command`. Use this if you need to run other ad-hoc commands as part of startup | `nil` | | `sysctlImage.enabled` | Enable an init container to modify Kernel settings | `false` | | `sysctlImage.command` | sysctlImage command to execute | [] | | `sysctlImage.registry` | sysctlImage Init container registry | `docker.io` | diff --git a/bitnami/redis/templates/configmap-scripts.yaml b/bitnami/redis/templates/configmap-scripts.yaml index f03274cc5..6285311ec 100644 --- a/bitnami/redis/templates/configmap-scripts.yaml +++ b/bitnami/redis/templates/configmap-scripts.yaml @@ -272,6 +272,9 @@ data: ARGS+=("--tls-dh-params-file" "${REDIS_SENTINEL_TLS_DH_PARAMS_FILE}") {{- end }} {{- end }} + {{- if .Values.sentinel.preExecCmds }} + {{ .Values.sentinel.preExecCmds | nindent 4 }} + {{- end }} exec redis-server /opt/bitnami/redis-sentinel/etc/sentinel.conf --sentinel {{- if .Values.tls.enabled }} "${ARGS[@]}" {{- end }} {{- else }} start-master.sh: | diff --git a/bitnami/redis/templates/redis-node-statefulset.yaml b/bitnami/redis/templates/redis-node-statefulset.yaml index 7724f4bce..2005bbc31 100644 --- a/bitnami/redis/templates/redis-node-statefulset.yaml +++ b/bitnami/redis/templates/redis-node-statefulset.yaml @@ -133,6 +133,20 @@ spec: {{- end }} - name: REDIS_DATA_DIR value: {{ .Values.slave.persistence.path }} + {{- if .Values.sentinel.extraEnvVars }} + {{- include "redis.tplValue" (dict "value" .Values.sentinel.extraEnvVars "context" $) | nindent 12 }} + {{- end }} + {{- if or .Values.sentinel.extraEnvVarsCM .Values.sentinel.extraEnvVarsSecret }} + envFrom: + {{- if .Values.sentinel.extraEnvVarsCM }} + - configMapRef: + name: {{ .Values.sentinel.extraEnvVarsCM }} + {{- end }} + {{- if .Values.sentinel.extraEnvVarsSecret }} + - secretRef: + name: {{ .Values.sentinel.extraEnvVarsSecret }} + {{- end }} + {{- end }} ports: - name: redis containerPort: {{ .Values.redisPort }} diff --git a/bitnami/redis/values-production.yaml b/bitnami/redis/values-production.yaml index 804ca2736..e4dd24a6e 100644 --- a/bitnami/redis/values-production.yaml +++ b/bitnami/redis/values-production.yaml @@ -137,6 +137,28 @@ sentinel: annotations: {} labels: {} loadBalancerIP: + ## Additional commands to run prior to starting Redis node with sentinel + ## + preExecCmds: "" + ## An array to add extra env var to the sentinel node configurations + ## For example: + ## extraEnvVars: + ## - name: name + ## value: value + ## - name: other_name + ## valueFrom: + ## fieldRef: + ## fieldPath: fieldPath + ## + extraEnvVars: [] + + ## ConfigMap with extra env vars: + ## + extraEnvVarsCM: [] + + ## Secret with extra env vars: + ## + extraEnvVarsSecret: [] ## Specifies the Kubernetes Cluster's Domain Name. ## diff --git a/bitnami/redis/values.yaml b/bitnami/redis/values.yaml index fa1c8b5c3..3fe67bd17 100644 --- a/bitnami/redis/values.yaml +++ b/bitnami/redis/values.yaml @@ -137,6 +137,28 @@ sentinel: annotations: {} labels: {} loadBalancerIP: + ## Additional commands to run prior to starting Redis node with sentinel + ## + preExecCmds: "" + ## An array to add extra env var to the sentinel node configurations + ## For example: + ## extraEnvVars: + ## - name: name + ## value: value + ## - name: other_name + ## valueFrom: + ## fieldRef: + ## fieldPath: fieldPath + ## + extraEnvVars: [] + + ## ConfigMap with extra env vars: + ## + extraEnvVarsCM: [] + + ## Secret with extra env vars: + ## + extraEnvVarsSecret: [] ## Specifies the Kubernetes Cluster's Domain Name. ##