# Spring Cloud Data Flow [Spring Cloud Data Flow](https://dataflow.spring.io/) is a microservices-based Streaming and Batch data processing pipeline in Cloud Foundry and Kubernetes. ## TL;DR; ```bash helm repo add bitnami https://charts.bitnami.com/bitnami helm install my-release bitnami/spring-cloud-dataflow ``` ## Introduction This chart bootstraps a [Spring Cloud Data Flow](https://github.com/bitnami/bitnami-docker-spring-cloud-dataflow) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. Bitnami charts can be used with [Kubeapps](https://kubeapps.com/) for deployment and management of Helm Charts in clusters. ## Prerequisites - Kubernetes 1.12+ - Helm 2.12+ or Helm 3.0-beta3+ - PV provisioner support in the underlying infrastructure ## Installing the Chart To install the chart with the release name `my-release`: ```bash helm repo add bitnami https://charts.bitnami.com/bitnami helm install my-release bitnami/spring-cloud-dataflow ``` These commands deploy Spring Cloud Data Flow on the Kubernetes cluster with the default configuration. The [parameters](#parameters) section lists the parameters that can be configured during installation. > **Tip**: List all releases using `helm list` ## Uninstalling the Chart To uninstall/delete the `my-release` chart: ```bash helm uninstall my-release ``` ## Parameters The following tables lists the configurable parameters of the Spring Cloud Data Flow chart and their default values per section/component: ### Global parameters | 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` | ### Common parameters | Parameter | Description | Default | |-------------------------------------------------|------------------------------------------------------------|---------------------------------------------------------| | `nameOverride` | String to partially override scdf.fullname | `nil` | | `fullnameOverride` | String to fully override scdf.fullname | `nil` | | `clusterDomain` | Default Kubernetes cluster domain | `cluster.local` | | `deployer.resources.limits` | Streaming applications resource limits | `{ cpu: "500m", memory: "1024Mi" }` | | `deployer.resources.requests` | Streaming applications resource requests | `{}` | | `deployer.resources.readinessProbe` | Streaming applications readiness probes requests | Check `values.yaml` file | | `deployer.resources.livenessProbe` | Streaming applications liveness probes requests | Check `values.yaml` file | ### Dataflow Server parameters | Parameter | Description | Default | |------------------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------| | `server.image.registry` | Spring Cloud Dataflow image registry | `docker.io` | | `server.image.repository` | Spring Cloud Dataflow image name | `bitnami/spring-cloud-dataflow` | | `server.image.tag` | Spring Cloud Dataflow image tag | `{TAG_NAME}` | | `server.image.pullPolicy` | Spring Cloud Dataflow image pull policy | `IfNotPresent` | | `server.image.pullSecrets` | Specify docker-registry secret names as an array | `[]` (does not add image pull secrets to deployed pods) | | `server.configuration.streamingEnabled` | Enables or disables streaming data processing | `true` | | `server.configuration.batchEnabled` | Enables or disables bath data (tasks and schedules) processing | `true` | | `server.configuration.accountName` | The name of the account to configure for the Kubernetes platform | `default` | | `server.configuration.trustK8sCerts` | Trust K8s certificates when querying the Kubernetes API | `false` | | `server.configuration.containerRegistries` | Container registries configuration | `{}` (check `values.yaml` for more information) | | `server.existingConfigmap` | Name of existing ConfigMap with Dataflow server configuration | `nil` | | `server.extraEnvVars` | Extra environment variables to be set on Dataflow server container | `{}` | | `server.extraEnvVarsCM` | Name of existing ConfigMap containing extra env vars | `nil` | | `server.extraEnvVarsSecret` | Name of existing Secret containing extra env vars | `nil` | | `server.replicaCount` | Number of Dataflow server replicas to deploy | `1` | | `server.strategyType` | Deployment Strategy Type | `RollingUpdate` | | `server.affinity` | Affinity for pod assignment | `{}` (evaluated as a template) | | `server.nodeSelector` | Node labels for pod assignment | `{}` (evaluated as a template) | | `server.tolerations` | Tolerations for pod assignment | `[]` (evaluated as a template) | | `server.priorityClassName` | Controller priorityClassName | `nil` | | `server.podSecurityContext` | Dataflow server pods' Security Context | `{ fsGroup: "1001" }` | | `server.containerSecurityContext` | Dataflow server containers' Security Context | `{ runAsUser: "1001" }` | | `server.resources.limits` | The resources limits for the Dataflow server container | `{}` | | `server.resources.requests` | The requested resources for the Dataflow server container | `{}` | | `server.podAnnotations` | Annotations for Dataflow server pods | `{}` | | `server.livenessProbe` | Liveness probe configuration for Dataflow server | Check `values.yaml` file | | `server.readinessProbe` | Readiness probe configuration for Dataflow server | Check `values.yaml` file | | `server.customLivenessProbe` | Override default liveness probe | `nil` | | `server.customReadinessProbe` | Override default readiness probe | `nil` | | `server.service.type` | Kubernetes service type | `ClusterIP` | | `server.service.port` | Service HTTP port | `8080` | | `server.service.nodePort` | Service HTTP node port | `nil` | | `server.service.clusterIP` | Dataflow server service clusterIP IP | `None` | | `server.service.externalTrafficPolicy` | Enable client source IP preservation | `Cluster` | | `server.service.loadBalancerIP` | loadBalancerIP if service type is `LoadBalancer` | `nil` | | `server.service.loadBalancerSourceRanges` | Address that are allowed when service is LoadBalancer | `[]` | | `server.service.annotations` | Annotations for Dataflow server service | `{}` | | `server.ingress.enabled` | Enable ingress controller resource | `false` | | `server.ingress.certManager` | Add annotations for cert-manager | `false` | | `server.ingress.hostname` | Default host for the ingress resource | `dataflow.local` | | `server.ingress.annotations` | Ingress annotations | `[]` | | `server.ingress.extraHosts[0].name` | Additional hostnames to be covered | `nil` | | `server.ingress.extraHosts[0].path` | Additional hostnames to be covered | `nil` | | `server.ingress.extraTls[0].hosts[0]` | TLS configuration for additional hostnames to be covered | `nil` | | `server.ingress.extraTls[0].secretName` | TLS configuration for additional hostnames to be covered | `nil` | | `server.ingress.secrets[0].name` | TLS Secret Name | `nil` | | `server.ingress.secrets[0].certificate` | TLS Secret Certificate | `nil` | | `server.ingress.secrets[0].key` | TLS Secret Key | `nil` | | `server.initContainers` | Add additional init containers to the Dataflow server pods | `{}` (evaluated as a template) | | `server.sidecars` | Add additional sidecar containers to the Dataflow server pods | `{}` (evaluated as a template) | | `server.pdb.create` | Enable/disable a Pod Disruption Budget creation | `false` | | `server.pdb.minAvailable` | Minimum number/percentage of pods that should remain scheduled | `1` | | `server.pdb.maxUnavailable` | Maximum number/percentage of pods that may be made unavailable | `nil` | | `server.autoscaling.enabled` | Enable autoscaling for Dataflow server | `false` | | `server.autoscaling.minReplicas` | Minimum number of Dataflow server replicas | `nil` | | `server.autoscaling.maxReplicas` | Maximum number of Dataflow server replicas | `nil` | | `server.autoscaling.targetCPU` | Target CPU utilization percentage | `nil` | | `server.autoscaling.targetMemory` | Target Memory utilization percentage | `nil` | | `server.jdwp.enabled` | Enable Java Debug Wire Protocol (JDWP) | `false` | | `server.jdwp.port` | JDWP TCP port | `5005` | ### Dataflow Skipper parameters | Parameter | Description | Default | |--------------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------| | `skipper.enabled` | Enable Spring Cloud Skipper component | `true` | | `skipper.image.registry` | Spring Cloud Skipper image registry | `docker.io` | | `skipper.image.repository` | Spring Cloud Skipper image name | `bitnami/spring-cloud-dataflow` | | `skipper.image.tag` | Spring Cloud Skipper image tag | `{TAG_NAME}` | | `skipper.image.pullPolicy` | Spring Cloud Skipper image pull policy | `IfNotPresent` | | `skipper.image.pullSecrets` | Specify docker-registry secret names as an array | `[]` (does not add image pull secrets to deployed pods) | | `skipper.configuration.accountName` | The name of the account to configure for the Kubernetes platform | `default` | | `skipper.configuration.trustK8sCerts` | Trust K8s certificates when querying the Kubernetes API | `false` | | `skipper.existingConfigmap` | Name of existing ConfigMap with Skipper server configuration | `nil` | | `skipper.extraEnvVars` | Extra environment variables to be set on Skipper server container | `{}` | | `skipper.extraEnvVarsCM` | Name of existing ConfigMap containing extra env vars | `nil` | | `skipper.extraEnvVarsSecret` | Name of existing Secret containing extra env vars | `nil` | | `skipper.replicaCount` | Number of Skipper server replicas to deploy | `1` | | `skipper.strategyType` | Deployment Strategy Type | `RollingUpdate` | | `skipper.affinity` | Affinity for pod assignment | `{}` (evaluated as a template) | | `skipper.nodeSelector` | Node labels for pod assignment | `{}` (evaluated as a template) | | `skipper.tolerations` | Tolerations for pod assignment | `[]` (evaluated as a template) | | `skipper.priorityClassName` | Controller priorityClassName | `nil` | | `skipper.podSecurityContext` | Skipper server pods' Security Context | `{ fsGroup: "1001" }` | | `skipper.containerSecurityContext` | Skipper server containers' Security Context | `{ runAsUser: "1001" }` | | `skipper.resources.limits` | The resources limits for the Skipper server container | `{}` | | `skipper.resources.requests` | The requested resources for the Skipper server container | `{}` | | `skipper.podAnnotations` | Annotations for Skipper server pods | `{}` | | `skipper.livenessProbe` | Liveness probe configuration for Skipper server | Check `values.yaml` file | | `skipper.readinessProbe` | Readiness probe configuration for Skipper server | Check `values.yaml` file | | `skipper.customLivenessProbe` | Override default liveness probe | `nil` | | `skipper.customReadinessProbe` | Override default readiness probe | `nil` | | `skipper.service.type` | Kubernetes service type | `ClusterIP` | | `skipper.service.port` | Service HTTP port | `8080` | | `skipper.service.nodePort` | Service HTTP node port | `nil` | | `skipper.service.clusterIP` | Skipper server service clusterIP IP | `None` | | `skipper.service.externalTrafficPolicy` | Enable client source IP preservation | `Cluster` | | `skipper.service.loadBalancerIP` | loadBalancerIP if service type is `LoadBalancer` | `nil` | | `skipper.service.loadBalancerSourceRanges` | Address that are allowed when service is LoadBalancer | `[]` | | `skipper.service.annotations` | Annotations for Skipper server service | `{}` | | `skipper.initContainers` | Add additional init containers to the Skipper pods | `{}` (evaluated as a template) | | `skipper.sidecars` | Add additional sidecar containers to the Skipper pods | `{}` (evaluated as a template) | | `skipper.pdb.create` | Enable/disable a Pod Disruption Budget creation | `false` | | `skipper.pdb.minAvailable` | Minimum number/percentage of pods that should remain scheduled | `1` | | `skipper.pdb.maxUnavailable` | Maximum number/percentage of pods that may be made unavailable | `nil` | | `skipper.autoscaling.enabled` | Enable autoscaling for Skipper server | `false` | | `skipper.autoscaling.minReplicas` | Minimum number of Skipper server replicas | `nil` | | `skipper.autoscaling.maxReplicas` | Maximum number of Skipper server replicas | `nil` | | `skipper.autoscaling.targetCPU` | Target CPU utilization percentage | `nil` | | `skipper.autoscaling.targetMemory` | Target Memory utilization percentage | `nil` | | `skipper.jdwp.enabled` | Enable Java Debug Wire Protocol (JDWP) | `false` | | `skipper.jdwp.port` | JDWP TCP port | `5005` | | `externalSkipper.host` | Host of a external Skipper Server | `localhost` | | `externalSkipper.port` | External Skipper Server port number | `7577` | ### RBAC parameters | Parameter | Description | Default | |------------------------- |--------------------------------------------------------------------------------------|---------------------------------------------- | | `serviceAccount.create` | Enable the creation of a ServiceAccount for Dataflow server and Skipper server pods | `true` | | `serviceAccount.name` | Name of the created serviceAccount | Generated using the `scdf.fullname` template | | `rbac.create` | Weather to create & use RBAC resources or not | `true` | ### Metrics parameters | Parameter | Description | Default | |-------------------------------------------------|--------------------------------------------------------------------------------------------------------|---------------------------------------------------------| | `metrics.metrics` | Enable the export of Prometheus metrics | `false` | | `metrics.image.registry` | Prometheus Rsocket Proxy image registry | `docker.io` | | `metrics.image.repository` | Prometheus Rsocket Proxy image name | `bitnami/prometheus-rsocket-proxy` | | `metrics.image.tag` | Prometheus Rsocket Proxy image tag | `{TAG_NAME}` | | `metrics.image.pullPolicy` | Prometheus Rsocket Proxy image pull policy | `IfNotPresent` | | `metrics.image.pullSecrets` | Specify docker-registry secret names as an array | `[]` (does not add image pull secrets to deployed pods) | | `metrics.kafka.service.httpPort` | Prometheus Rsocket Proxy HTTP port | `8080` | | `metrics.kafka.service.rsocketPort` | Prometheus Rsocket Proxy Rsocket port | `8080` | | `metrics.kafka.service.annotations` | Annotations for Prometheus Rsocket Proxy service | `Check values.yaml file` | | `metrics.serviceMonitor.enabled` | if `true`, creates a Prometheus Operator ServiceMonitor (also requires `metrics.enabled` to be `true`) | `false` | | `metrics.serviceMonitor.namespace` | Namespace in which Prometheus is running | `nil` | | `metrics.serviceMonitor.interval` | Interval at which metrics should be scraped. | `nil` (Prometheus Operator default value) | | `metrics.serviceMonitor.scrapeTimeout` | Timeout after which the scrape is ended | `nil` (Prometheus Operator default value) | ### Init Container parameters | Parameter | Description | Default | |-------------------------------------------------|--------------------------------------------------------------------------------------------------------|---------------------------------------------------------| | `waitForBackends.enabled` | Wait for the database and other services (such as Kafka or RabbitMQ) used when enabling streaming | `true` | | `waitForBackends.image.registry` | Init container wait-for-backend image registry | `docker.io` | | `waitForBackends.image.repository` | Init container wait-for-backend image name | `bitnami/kubectl` | | `waitForBackends.image.tag` | Init container wait-for-backend image tag | `{TAG_NAME}` | | `waitForBackends.image.pullPolicy` | Init container wait-for-backend image pull policy | `IfNotPresent` | | `waitForBackends.image.pullSecrets` | Specify docker-registry secret names as an array | `[]` (does not add image pull secrets to deployed pods) | | `waitForBackends.resources.limits` | Init container wait-for-backend resource limits | `{}` | | `waitForBackends.resources.requests` | Init container wait-for-backend resource requests | `{}` | ### Database parameters | Parameter | Description | Default | |-------------------------------------------------|-------------------------------------------------------------------------|-------------------------------------| | `mariadb.enabled` | Enable/disable MariaDB chart installation | `true` | | `mariadb.replication.enabled` | MariaDB replication enabled | `false` | | `mariadb.db.name` | Name for new database to create | `dataflow` | | `mariadb.db.user` | Username of new user to create | `dataflow` | | `mariadb.db.password` | Password for the new user | `change-me`_ | | `mariadb.initdbScripts` | Dictionary of initdb scripts | Check `values.yaml` file | | `externalDatabase.host` | Host of the external database | `localhost` | | `externalDatabase.port` | External database port number | `3306` | | `externalDatabase.password` | Password for the above username | `""` | | `externalDatabase.dataflow.user` | Existing username in the external db to be used by Dataflow server | `dataflow` | | `externalDatabase.dataflow.database` | Name of the existing database to be used by Dataflow server | `dataflow` | | `externalDatabase.skipper.user` | Existing username in the external db to be used by Skipper server | `skipper` | | `externalDatabase.skipper.database` | Name of the existing database to be used by Skipper server | `skipper` | | `externalDatabase.hibernateDialect` | Hibernate Dialect used by Dataflow/Skipper servers | `""` | ### RabbitMQ chart parameters | Parameter | Description | Default | |-------------------------------------------------|-------------------------------------------------------------------------|---------------------------------------------------------| | `rabbitmq.enabled` | Enable/disable RabbitMQ chart installation | `true` | | `rabbitmq.auth.username` | RabbitMQ username | `user` | | `rabbitmq.auth.password` | RabbitMQ password | _random 40 character alphanumeric string_ | | `externalRabbitmq.enabled` | Enable/disable external RabbitMQ | `false` | | `externalRabbitmq.host` | Host of the external RabbitMQ | `localhost` | | `externalRabbitmq.port` | External RabbitMQ port number | `5672` | | `externalRabbitmq.username` | External RabbitMQ username | `guest` | | `externalRabbitmq.password` | External RabbitMQ password | `guest` | ### Kafka chart parameters | Parameter | Description | Default | |-------------------------------------------------|-------------------------------------------------------------------------|---------------------------------------------------------| | `kafka.enabled` | Enable/disable Kafka chart installation | `false` | | `kafka.replicaCount` | Number of Kafka brokers | `1` | | `kafka.offsetsTopicReplicationFactor` | Kafka Secret Key | `1` | | `kafka.zookeeper.enabled` | Enable/disable Zookeeper chart installation | `nil` | | `kafka.zookeeper.replicaCount` | Number of Zookeeper replicas | `1` | Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example, ```bash helm install my-release --set server.replicaCount=2 bitnami/spring-cloud-dataflow ``` The above command install Spring Cloud Data Flow chart with 2 Dataflow server replicas. Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, ```bash helm install my-release -f values.yaml bitnami/spring-cloud-dataflow ``` > **Tip**: You can use the default [values.yaml](values.yaml) ## Configuration and installation details ### [Rolling VS Immutable tags](https://docs.bitnami.com/containers/how-to/understand-rolling-tags-containers/) It is strongly recommended to use immutable tags in a production environment. This ensures your deployment does not change automatically if the same tag is updated with a different image. Bitnami will release a new chart updating its containers if a new version of the main container, significant changes, or critical vulnerabilities exist. ### Production configuration This chart includes a `values-production.yaml` file where you can find some parameters oriented to production configuration in comparison to the regular `values.yaml`. You can use this file instead of the default one. - Enable Pod Disruption Budget for Server and Skipper: ```diff - server.pdb.create: false + server.pdb.create: true - skipper.pdb.create: false + skipper.pdb.create: true ``` - Enable exposing Prometheus Metrics via Prometheus Rsocket Proxy: ```diff - metrics.enabled: false + metrics.enabled: true ``` - Force users to specify a password and mount secrets as volumes instead of using environment variables on MariaDB: ```diff - mariadb.rootUser.forcePassword: false - mariadb.rootUser.injectSecretsAsVolume: false + mariadb.rootUser.forcePassword: true + mariadb.rootUser.injectSecretsAsVolume: true - mariadb.db.forcePassword: false - mariadb.db.injectSecretsAsVolume: false + mariadb.db.forcePassword: true + mariadb.db.injectSecretsAsVolume: true ``` ### Features If you only need to deploy tasks and schedules, streaming and Skipper can be disabled: ```console server.configuration.batchEnabled=true server.configuration.streamingEnabled=false skipper.enabled=false rabbitmq.enabled=false ``` If you only need to deploy streams, tasks and schedules can be disabled: ```console server.configuration.batchEnabled=false server.configuration.streamingEnabled=true skipper.enabled=true rabbitmq.enabled=true ``` NOTE: Both `server.configuration.batchEnabled` and `server.configuration.streamingEnabled` should not be set to `false` at the same time. ### Messaging solutions There are two supported messaging solutions in this chart: - RabbitMQ (default) - Kafka To change the messaging layer to Kafka, use the the following parameters: ```console rabbitmq.enabled=false kafka.enabled=true ``` Only one messaging layer can be used at a given time. ### Using an external database Sometimes you may want to have Spring Cloud components connect to an external database rather than installing one inside your cluster, e.g. to use a managed database service, or use run a single database server for all your applications. To do this, the chart allows you to specify credentials for an external database under the [`externalDatabase` parameter](#database-parameters). You should also disable the MariaDB installation with the `mariadb.enabled` option. For example with the following parameters: ```console mariadb.enabled=false externalDatabase.host=myexternalhost externalDatabase.port=3306 externalDatabase.password=mypassword externalDatabase.dataflow.user=mydataflowuser externalDatabase.dataflow.database=mydataflowdatabase externalDatabase.dataflow.user=myskipperuser externalDatabase.dataflow.database=myskipperdatabase ``` Note also if you disable MariaDB per above you MUST supply values for the `externalDatabase` connection. ### Adding extra flags In case you want to add extra environment variables to any Spring Cloud component, you can use `XXX.extraEnvs` parameter(s), where XXX is placeholder you need to replace with the actual component(s). For instance, to add extra flags to Spring Cloud Data Flow, use: ```yaml server: extraEnvs: - name: FOO value: BAR ``` ### Using custom Dataflow configuration This helm chart supports using custom configuration for Dataflow server. You can specify the configuration for Dataflow server setting the `server.existingConfigmap` parameter to an external ConfigMap with the configuration file. ### Using custom Skipper configuration This helm chart supports using custom configuration for Skipper server. You can specify the configuration for Skipper server setting the `skipper.existingConfigmap` parameter to an external ConfigMap with the configuration file. ### Sidecars and Init Containers If you have a need for additional containers to run within the same pod as Dataflow or Skipper components (e.g. an additional metrics or logging exporter), you can do so via the `XXX.sidecars` parameter(s), where XXX is placeholder you need to replace with the actual component(s). Simply define your container according to the Kubernetes container spec. ```yaml server: sidecars: - name: your-image-name image: your-image imagePullPolicy: Always ports: - name: portname containerPort: 1234 ``` Similarly, you can add extra init containers using the `XXX.initContainers` parameter(s). ```yaml server: initContainers: - name: your-image-name image: your-image imagePullPolicy: Always ports: - name: portname containerPort: 1234 ``` ### Ingress This chart provides support for ingress resources. If you have an ingress controller installed on your cluster, such as [nginx-ingress](https://kubeapps.com/charts/stable/nginx-ingress) or [traefik](https://kubeapps.com/charts/stable/traefik) you can utilize the ingress controller to serve your Spring Cloud Data Flow server. To enable ingress integration, please set `server.ingress.enabled` to `true` #### Hosts Most likely you will only want to have one hostname that maps to this Spring Cloud Data Flow installation. If that's your case, the property `server.ingress.hostname` will set it. However, it is possible to have more than one host. To facilitate this, the `server.ingress.extraHosts` object is can be specified as an array. You can also use `server.ingress.extraTLS` to add the TLS configuration for extra hosts. For each host indicated at `server.ingress.extraHosts`, please indicate a `name`, `path`, and any `annotations` that you may want the ingress controller to know about. For annotations, please see [this document](https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md). Not all annotations are supported by all ingress controllers, but this document does a good job of indicating which annotation is supported by many popular ingress controllers. ## Upgrading It's necessary to set the `mariadb.rootUser.password` parameter when upgrading for readiness/liveness probes to work properly. When you install this chart for the first time, unless you indicate set this parameter, a random value will be generated. Inspect the MariaDB secret to obtain the root password, then you can upgrade your chart using the command below: ```bash helm upgrade my-release bitnami/spring-cloud-dataflow --set mariadb.rootUser.password=[MARIADB_ROOT_PASSWORD] ``` If you enabled RabbitMQ chart to be used as the messaging solution for Skipper to manage streaming content, then it's necessary to set the `rabbitmq.auth.password` and `rabbitmq.auth.erlangCookie` parameters when upgrading for readiness/liveness probes to work properly. Inspect the RabbitMQ secret to obtain the password and the Erlang cookie, then you can upgrade your chart using the command below: ```bash helm upgrade my-release bitnami/spring-cloud-dataflow --set mariadb.rootUser.password=[MARIADB_ROOT_PASSWORD] --set rabbitmq.auth.password=[RABBITMQ_PASSWORD] --set rabbitmq.auth.erlangCookie=[RABBITMQ_ERLANG_COOKIE] ```