Deploy Pulse with Helm

This page describes how to deploy Pulse by using Helm.


Overview

This umbrella chart consists of three subcharts:

Subchart

Description

Default

pulse-core

Core components: RBAC, Manager Server, Operator

Enabled

optimizer

Optimizer components: Calculator, Webhook

Enabled

pulselogs

Log collection: DaemonSet, ConfigMap

Disabled


Prerequisites

  • Kubernetes 1.19 or later

  • Helm 3.x

  • kubectl configured to communicate with your cluster

  • Cluster admin permissions, required for CRDs and ClusterRoles


Quick start

  1. Create Docker registry secret

Before installing, create the image pull secret.

# Create namespace kubectl create ns pulse-system # Create docker registry secret kubectl create secret docker-registry pulse-registry \ --docker-server=https://191579300362.dkr.ecr.us-east-1.amazonaws.com \ --docker-username=AWS \ --docker-password=<AWS_ECR_PASSWORD> \ -n pulse-system
  1. Install the chart

# Basic installation helm install pulse ./helm \ --namespace pulse-system \ --set pulse-core.manager.pulseHostname=pulse.example.com \ --set pulse-core.manager.adstreamUrl=http://pulse.example.com:31206/streaming # Or use a values file helm install pulse ./helm -f my-values.yaml --namespace pulse-system
  1. Verify installation

# Check pods kubectl get pods -n pulse-system # Expected output: # NAME READY STATUS RESTARTS AGE # accelo-manager-xxxx 1/1 Running 0 2m # controller-manager-xxxx 1/1 Running 0 2m

Configuration

Global values

These values are shared across all subcharts.

Parameter

Description

Default

global.namespace

Target namespace

pulse-system

global.image.registry

Docker registry

191579300362.dkr.ecr.us-east-1.amazonaws.com/acceldata

global.image.tag

Default image tag for all services

latest

global.imagePullSecrets

Image pull secrets

[{name: pulse-registry}]


Image configuration

The chart uses a global image configuration pattern. Set the tag once, and it applies to all services.

# Set global tag for all images helm install pulse ./helm --set global.image.tag=v2.0.0 # Override specific service tag helm install pulse ./helm \ --set global.image.tag=v2.0.0 \ --set pulse-core.operator.image.tag=v2.1.0

Pulse-Core Values

Parameter

Description

Default

pulse-core.enabled

Enable pulse-core subchart

true

pulse-core.manager.image.repository

Manager image name

ad-accelo

pulse-core.manager.image.tag

Manager image tag (empty = use global)

""

pulse-core.manager.pulseHostname

Pulse hostname (required)

""

pulse-core.manager.adstreamUrl

AD Stream URL (required)

""

pulse-core.manager.hydraServerUrl

Hydra server URL

http://ad-hydra:19072

pulse-core.manager.hydraBaseUrl

Hydra base URL

""

pulse-core.manager.axnserverUrl

AXN server URL

""

pulse-core.manager.resources

Manager resource limits

See values.yaml

pulse-core.operator.image.repository

Operator image name

ad-pulse-operator

pulse-core.operator.image.tag

Operator image tag (empty = use global)

""

pulse-core.operator.resources

Operator resource limits

See values.yaml

pulse-core.hostAliases

Host aliases for DNS resolution

[]


Optimizer Values

Parameter

Description

Default

optimizer.enabled

Enable optimizer subchart

false

optimizer.calculator.enabled

Enable calculator component

false

optimizer.calculator.image.repository

Calculator image name

ad-pulse-optikube

optimizer.calculator.image.tag

Calculator image tag

""

optimizer.webhook.enabled

Enable webhook component

false

optimizer.webhook.image.repository

Webhook image name

ad-pulse-webhook

optimizer.webhook.image.tag

Webhook image tag

""

optimizer.webhook.tls.crt

Base64-encoded TLS certificate

""

optimizer.webhook.tls.key

Base64-encoded TLS key

""

optimizer.webhook.tls.caBundle

Base64-encoded CA bundle

""


Pulselogs Values

Parameter

Description

Default

pulselogs.enabled

Enable pulselogs subchart

false

pulselogs.namespace

Pulselogs namespace

pulselogs

pulselogs.image.repository

Pulselogs image name

pulselogs

pulselogs.image.tag

Pulselogs image tag

""

pulselogs.elasticsearch.host

Elasticsearch host (required when enabled)

""

pulselogs.elasticsearch.port

Elasticsearch port

19013

pulselogs.elasticsearch.username

Elasticsearch username

pulse

pulselogs.elasticsearch.password

Elasticsearch password

""

pulselogs.pulseClusterName

Pulse cluster name (required when enabled)

""

pulselogs.sparkNamespace

Spark namespace to monitor

spark

pulselogs.resources

Pulselogs resource limits

See values.yaml


Usage Examples

Basic installation

helm install pulse ./helm \ --namespace pulse-system \ --create-namespace \ --set pulse-core.manager.pulseHostname=pulse.example.com \ --set pulse-core.manager.adstreamUrl=http://pulse.example.com:31206/streaming

Production installation with a custom image tag

helm install pulse ./helm \ --namespace pulse-prod \ --create-namespace \ --set global.image.tag=v2.5.0 \ --set pulse-core.manager.pulseHostname=pulse.prod.example.com \ --set pulse-core.manager.adstreamUrl=http://pulse.prod.example.com:31206/streaming \ --set pulse-core.manager.hydraBaseUrl=http://pulse.prod.example.com:31206/hydra \ --set pulse-core.manager.axnserverUrl=http://pulse.prod.example.com:31206/axnserver

With host aliases for DNS resolution

helm install pulse ./helm \ --namespace pulse-system \ --set pulse-core.manager.pulseHostname=pulse.example.com \ --set pulse-core.manager.adstreamUrl=http://pulse.example.com:31206/streaming \ --set 'pulse-core.hostAliases[0].ip=10.100.10.65' \ --set 'pulse-core.hostAliases[0].hostnames[0]=dbserver1.example.com' \ --set 'pulse-core.hostAliases[1].ip=10.100.10.66' \ --set 'pulse-core.hostAliases[1].hostnames[0]=dbserver2.example.com'

Enable Pulselogs

helm install pulse ./helm \ --namespace pulse-system \ --set pulse-core.manager.pulseHostname=pulse.example.com \ --set pulse-core.manager.adstreamUrl=http://pulse.example.com:31206/streaming \ --set pulselogs.enabled=true \ --set pulselogs.elasticsearch.host=elasticsearch.example.com \ --set pulselogs.elasticsearch.password=mypassword \ --set pulselogs.pulseClusterName=my-cluster

Disable Specific Components

# Disable optimizer webhook helm install pulse ./helm \ --namespace pulse-system \ --set optimizer.webhook.enabled=false \ --set pulse-core.manager.pulseHostname=pulse.example.com \ --set pulse-core.manager.adstreamUrl=http://pulse.example.com:31206/streaming # Disable entire optimizer subchart helm install pulse ./helm \ --namespace pulse-system \ --set optimizer.enabled=false \ --set pulse-core.manager.pulseHostname=pulse.example.com \ --set pulse-core.manager.adstreamUrl=http://pulse.example.com:31206/streaming

Using a Values File

Create a my-values.yaml file:

global: namespace: pulse openshift: true image: registry: <CONTAINER_REGISTRY> tag: 4.1.0-beta imagePullSecrets: - name: <IMAGE_PULL_SECRET> imageCredentials: create: true name: <IMAGE_PULL_SECRET> server: <CONTAINER_REGISTRY> username: <USERNAME> password: <PASSWORD> pulse-core: enabled: true manager: image: repository: ad-accelo pulseHostname: "" adstreamUrl: "" hydraServerUrl: "http://ad-hydra:19072" hydraBaseUrl: "" axnserverUrl: "" createAcceloManagerRoute: true resources: limits: cpu: 500m memory: 1024Mi requests: cpu: 10m memory: 64Mi replicas: 1 operator: image: repository: ad-pulse-operator resources: limits: cpu: 500m memory: 1024Mi requests: cpu: 10m memory: 64Mi reconcilerRequeueTimeSeconds: "300" maxBackoffTimeSeconds: "30" defaultMongodbZoneCount: "100" replicas: 1 ui: exposeUI: true targetPort: 4100 streaming: exposeRoute: true targetPort: 19005 hydra: exposeRoute: true targetPort: 19072 hostAliases: []

Then install:

helm install pulse ./helm -f my-values.yaml --namespace pulse-prod --create-namespace

Upgrading

# Upgrade with new values helm upgrade pulse ./helm \ --namespace pulse-system \ --set global.image.tag=v3.0.0 # Upgrade using values file helm upgrade pulse ./helm -f my-values.yaml --namespace pulse-system

Uninstalling

# Uninstall the release helm uninstall pulse --namespace pulse-system # Note: CRDs are not automatically deleted # To remove CRDs manually: kubectl delete crd pulseoperators.pulse.acceldata.com

Upgrading CRDs

CRDs are not automatically upgraded by Helm. To upgrade CRDs:

kubectl apply -f helm/crds/

Troubleshooting

Pods Not Starting

Check whether the image pull secret exists:

kubectl get secret pulse-registry -n pulse-system

CRD already exists

If you are upgrading from a kubectl-based installation:

kubectl delete crd pulseoperators.pulse.acceldata.com helm install pulse ./helm ...

Webhook certificates not configured

The webhook requires TLS certificates. Provide them with values:

helm install pulse ./helm \ --set optimizer.webhook.tls.crt=$(base64 -w0 cert.pem) \ --set optimizer.webhook.tls.key=$(base64 -w0 key.pem) \ --set optimizer.webhook.tls.caBundle=$(base64 -w0 ca.pem)

Helm Commands

helm install pulse ./helm \ --namespace pulse \ --create-namespace \ --set global.image.tag=testBuild-k8s \ --set global.namespace=pulse \ --set global.imagePullSecrets[0].name=adreg \ --set pulse-core.manager.pulseHostname=platk8s101.acceldata.dvl \ --set pulse-core.manager.adstreamUrl=http://platk8s101.acceldata.dvl:32382/streaming \ --set pulse-core.manager.mongoUrl="mongodb://accel:ACCELUSER_01082018@pulse-mongodb-mongos-svc.pulse-mongo.svc.cluster.local" \ --set pulse-core.manager.vminsertUrl="vminsert-pulse-victoriametrics.pulse-victoriametrics.svc.cluster.local" \ --set pulse-core.manager.vmselectUrl="vmselect-pulse-victoriametrics.pulse-victoriametrics.svc.cluster.local" \ --set pulse-core.manager.natsUrl="pulse-nats.pulse-nats.svc.cluster.local" \ --set pulse-core.manager.pgUrl="pulse-postgresql-rw.pulse-postgres.svc.cluster.local" \ --set pulse-core.manager.redisUrl="pulse-redis.pulse-redis.svc.cluster.local" \ --set pulse-core.manager.elasticUrl="pulse-elasticsearch-es-http.pulse-es.svc.cluster.local" \ --set pulse-core.manager.logstashUrl="pulse-logstash.pulse-logstash.svc.cluster.local" \ --set pulse-core.manager.enableK8sDb=true
helm install pulse ./helm \ --namespace pulse \ --create-namespace \ --set global.image.tag=testBuild-k8s \ --set global.namespace=pulse \ --set global.imagePullSecrets[0].name=adreg \ --set pulse-core.manager.pulseHostname=platk8s101.acceldata.dvl \ --set pulse-core.manager.adstreamUrl=http://platk8s101.acceldata.dvl:32382/streaming \ --set pulse-core.manager.mongoUrl="ZN4v8cuUTXYvdnDJIDp+R8Z+ZsVXXjv8zDOvh8UwQXr2INALLQK+w/QZ3st0+j/He9YL2c4u8dOeFadenflMrbs6VKHW5E8Yymo3LiGvqjEsCVwFX//DWWFBRhq8eMZA" \ --set pulse-core.manager.vminsertUrl="vminsert-pulse-victoriametrics.pulse-victoriametrics.svc.cluster.local:8480" \ --set pulse-core.manager.vmselectUrl="vmselect-pulse-victoriametrics.pulse-victoriametrics.svc.cluster.local:8481" \ --set pulse-core.manager.natsUrl="pulse-nats.pulse-nats.svc.cluster.local:4222" \ --set pulse-core.manager.pgUrl="pulse-postgresql-rw.pulse-postgres.svc.cluster.local:5432" \ --set pulse-core.manager.redisUrl="pulse-redis.pulse-redis.svc.cluster.local:6279" \ --set pulse-core.manager.elasticUrl="http://pulse-elasticsearch-es-http.pulse-es.svc.cluster.local:9200" \ --set pulse-core.manager.logstashUrl="pulse-logstash.pulse-logstash.svc.cluster.local" \ --set pulse-core.manager.enableK8sDb=true
helm install pulse ./helm-pulse \ --namespace pulse \ --create-namespace \ --set global.image.tag=testBuild-k8s \ --set global.namespace=pulse \ --set global.imagePullSecrets[0].name=adreg \ --set pulse-core.manager.mongoUrl="ZN4v8cuUTXYvdnDJIDp+R8Z+ZsVXXjv8zDOvh8UwQXr2INALLQK+w/QZ3st0+j/H7FXhrHvNTQaM3TlnkdFgq6OKxJMYQmZwEfJtlsL2CR6GFl1RVjKsafxfZVlqNOR8" \ --set pulse-core.manager.vminsertUrl="vminsert-pulse-victoriametrics.pulse-vm.svc.cluster.local:8480" \ --set pulse-core.manager.vmselectUrl="vmselect-pulse-victoriametrics.pulse-vm.svc.cluster.local:8481" \ --set pulse-core.manager.natsUrl="pulse-nats.pulse-nats.svc.cluster.local:4222" \ --set pulse-core.manager.pgUrl="pulse-postgresql-rw.pulse-pg.svc.cluster.local:5432" \ --set pulse-core.manager.redisUrl="redis" \ --set pulse-core.manager.elasticUrl="pulse-elasticsearch-es-http.pulse-es.svc.cluster.local" \ --set pulse-core.manager.logstashUrl="pulse-logstash.pulse-logstash.svc.cluster.local" \ --set pulse-core.manager.createAcceloManagerRoute=true \ --set pulse-core.ui.exposeUI=true \ --set pulse-core.streaming.exposeRoute=true \ --set pulse-core.hydra.exposeRoute=true \ --set loadBalancerServices.ad-logstash.enabled=true \ --set pulselogs.rbac.create=true \ --set pulselogs.scc.create=true \ --set pulselogs.namespace=pulse \ --set pulsenode.namespace=pulse \ --set pulsenode.rbac.create=true \ --set pulsenode.scc.create=true \ --set global.routeSuffix="apps.os-pnc.acceldata.tech" \ --set global.imageCredentials.password='eyJwYXlsb2FkIjoiZFF2RDlRM2RGR3BaVFNScThIb2ZpNW9xVzI4OC9nUjNLdHFaTFhQUllIUEs5N2o4bE55NGFhd1lhL2dzcjRCWWEvUER5VlVuYUp3L0NxUGRYRnY5eWcwNklNZHFNRE95VGd6OFBCaTFFVlY3Rm52NTRhOFhuazVTaXZPYnIrKzdvdFJuTlhOUkF5YVNtYzhHSlp6RWU1Tzl6WEl6ZGQrbWp2Y3VhZXJ5YS9mNExGREwwZ2N4NS9GSy9IcHVnU2cvNzVYc2Q5YStsRjlRZWdvUysvMUswcldBcDNrZDhwU0ZrcXZhU0hiNk1mYlBIYlpldUQ4M2x6YnQzcGxkNnFLdG80QWpJWG52ejluYW9OU1RFdFBNMmNkTVhsWjkySHozcGZsQ3ByT0Ryd29SdGpjV0lNd0kxMHBBUVF5Tmo3WGUyK2lyaFhGS0g2N3U5VGdPSHZlWmxHOXBIQmhFblRhOG5YeTNmOEt4ellEREoxWDlJdFIzVGFVd2o2OEdpMURjKzRudmpwZFdUQzdQL3ZWL1VNcFpCOUcyNWpHNlBrMmlYU3FVWjVoYXRKZFBkLzh4VVhqdVB6Mm5MQnkyY1hqbTZWaVM3eWZwcEd5N0VLN0VBdWNTS2ZpdmxvTVg5OEVtZWdCQi91d3JlTTdpWmxDaUVpKzU5akIraTZlN081MEFiaGdBZ0Z2Qllsc0l3VmdFNEFBdnRMeHpZOXlsTUV2dkxCOFhhSVd3MkZLM3JlTGRzanBlTXNxTVdUNlpUeHc5a0d3MFRxT3dEU0hDdW1IWCtGUHBYUVF2eHhDU05DTm1WdWw0bHVGNVU0UVNQc0dOdmR4YkdOSWo5WEdSd0MyTlJ0N1UycGJTMjEvZmxrU0NKQmhQaldsZ1hHd1AwOXpjRG4ydVl1ZFY0a2ROWTIzZFVSZEIwbno0cXNud2dsTG8xV3c1ZUNsUk1nY3RlM3dIaTZpTFZnVkovOExPdDRFbWlJU21sNFUvNVdIcUxmS2gvYlBmK3ozQ05FMWgvS2dVc0ZvRWhzVUpWR3A5RmgzKzZGaXY4azFlSGs1UXY2ZC9ZSnE5cGlRdWRyTkJqd09xQXYzMktGcnlGSkNScE5QVnV1VWxhVWpmckF5WjlzNTRGdWZud1RSYUhZWXhUSzNDN0piZW81djlGbzZPWXcvNkR2WlhxWmg5eWtOYzBiZEtzNitsVzAwaFQvblVuMnM2cktXdElmWXAyNXdBS09kWUxleU1NNVR0ZFprMzNKRlIxenFzL056a1ZpRVlOYUZEakVWK3RHZS9BU25YZ1VYR3lVcWpKelMzVkx4OUwrN2JhdDlua05qd1hxS3Q0R25NWTFWTzM1SnpESWJRNnl4dG9QNVlVbkd0bkovbSIsImRhdGFrZXkiOiJBUUVCQUhod20wWWFJU0plUnRKbTVuMUc2dXFlZWtYdW9YWFBlNVVGY2U5UnE4LzE0d0FBQUg0d2ZBWUpLb1pJaHZjTkFRY0dvRzh3YlFJQkFEQm9CZ2txaGtpRzl3MEJCd0V3SGdZSllJWklBV1VEQkFFdU1CRUVETGlyOG52VTBURjdKZi9JNndJQkVJQTc3N1V5ekNvV054S0g5TDU5eUpJU2ZtU1FqYngybkFwSm5Vc0syd1FvbU9VZGRtMFFPdWtyclNvSDRMUzlsa0NVVklRZWJRcWtuRkY4U3djPSIsInZlcnNpb24iOiIyIiwidHlwZSI6IkRBVEFfS0VZIiwiZXhwaXJhdGlvbiI6MTc3NDE2MjUwOX0=' \ --set pulse-core.manager.enableK8sDb=true
helm upgrade pulse ./helm-pulse \ --namespace pulse \ --create-namespace \ --set global.image.tag=testBuild-k8s \ --set global.namespace=pulse \ --set global.imagePullSecrets[0].name=adreg \ --set pulse-core.manager.pulseHostname=platk8s101.acceldata.dvl \ --set pulse-core.manager.adstreamUrl=http://platk8s101.acceldata.dvl:32382/streaming \ --set pulse-core.manager.mongoUrl="ZN4v8cuUTXYvdnDJIDp+R8Z+ZsVXXjv8zDOvh8UwQXr2INALLQK+w/QZ3st0+j/H7FXhrHvNTQaM3TlnkdFgq6OKxJMYQmZwEfJtlsL2CR6GFl1RVjKsafxfZVlqNOR8" \ --set pulse-core.manager.vminsertUrl="vminsert-pulse-victoriametrics.pulse-vm.svc.cluster.local:8480" \ --set pulse-core.manager.vmselectUrl="vmselect-pulse-victoriametrics.pulse-vm.svc.cluster.local:8481" \ --set pulse-core.manager.natsUrl="pulse-nats.pulse-nats.svc.cluster.local:4222" \ --set pulse-core.manager.pgUrl="pulse-postgresql-rw.pulse-pg.svc.cluster.local:5432" \ --set pulse-core.manager.redisUrl="redis" \ --set pulse-core.manager.elasticUrl="pulse-elasticsearch-es-http.pulse-es.svc.cluster.local" \ --set pulse-core.manager.logstashUrl="pulse-logstash.pulse-logstash.svc.cluster.local" \ --set pulse-core.manager.createAcceloManagerRoute=true \ --set pulse-core.ui.exposeUI=true \ --set global.imageCredentials.password='eyJwYXlsb2FkIjoiSVl4Y2JQQ0ljSVFVSkFwM2ZpRzVoWHgvY1RMU21NaWpyellyM0hSTkFBK2taZm9wR2tTeDZXVitGU3RmNXhDU0hHNThwaUdWZldjRVlhVUloTU9XczhRN3Vsd0NiWmZLQ1hMTjBWVzVJVlFuMmdrekl2b0VaQk5pd1NaN2RvL3J6R2ladlZFREtCZUF6QjJUbElpLzZoWWhncGR5RlpBWEs4N1JJUGUreVdDaTdTbGU3SzRTVXFaWFY5RGEwMlB3Ym1HN3BYaENiWTdTQWFhOXhBQkt1Y09LOVRuanY0NkgyVnlCbkVUMjlEV2dtN1hlb1lhcEFXUUVnTzdncU40ZTFlUTRuZjFGYkw2THBsSjh4R0dEejdJL2s1azFnV1J4aEVUUWVHOXkrUzBXYkt3MGIrTk0rS0dZdWNVaFVJK2xiUTM2T085anlvZlg3bzRCQzZ0akFsUkplUmhSK0UxSFdhYXkvRU9NNFVGRldQeWhNSld2Y09hM09Obk4xZGl4R2hySnhtVWNJWldCRzllRXRvVjZrdGF1U1ZUQTdVcXhHdDdKQXBTTUNveWtQTlA1RDJvSzd0djhQbnRPNTdyZGphaW9YL3Vpckw1UXdxVlRTM0hMdUFYMmJjS2tnb1B4TmJweXZvZk02eU44U3V3TjVLOUJtb3M1MlVObjR4WUtpTTFhOU1CaFNEZUtvSTlNMnJmaWRTalVhNjRJd2RFVUM4a1NBVWd0eFN2aS96dk1YaGd0YVZ4Q1pRYzRSa1RjTWZQMzFtQ2txdzQ1ZGdMVWlZejFibE5Qd21QZlZFZXNNRXV6WWhkeTc3L1M1Tmw1MXpHUko4YWE4eC9tYzVDRkQ2ajhxNTVSS2FOQWtLb1k2Z0lTTFJYcDJsRTVWR2JpMkNzUU42T2FsdVlaQU9rQXlLcGE4RmdRWVJoc3NTQmVwditIL3ZyK3UvSTZoRzhPMjNRNlVVOEtVNTBQVHJlRWJJSk1oaFFGY0prMnlHWkZURzQ0OFBIYzVDTVY5UkZnQjhrM1dFQlc3VldiSnk4c3cwdjQyaElTbXVHeXd1Ykduc3owNDJxSy9nazNqc2NSdWYyL1NDZFBkT2l4UkVSMHhPdWJIWHhHamppMlhrdCs0eWJaVzNUT2YxaWtvSXo2dlF6YjVyTmM2STRRaGdhTGthOUp0aHE4U2s5dlRhR2k4SE11MlprVit0eDVTUEl6SU84QTNaWDU5Nnp2U1pYaE9qenJmSldtc3hJaGxYTnVMbVgrTzYzZ3R3RHBHc0xJYTh2L2pyT1dKMDQ4cWN2cTMxNVliMmVhcVpHWEQ0eGZuWi81QTcxbm5KZUxHMzFkUjVnd1AwWWdxeWVvIiwiZGF0YWtleSI6IkFRRUJBSGh3bTBZYUlTSmVSdEptNW4xRzZ1cWVla1h1b1hYUGU1VUZjZTlScTgvMTR3QUFBSDR3ZkFZSktvWklodmNOQVFjR29HOHdiUUlCQURCb0Jna3Foa2lHOXcwQkJ3RXdIZ1lKWUlaSUFXVURCQUV1TUJFRURMR1VYL3ZSejl0eXFxQmN1UUlCRUlBN085cUFZZnNiVEhHUUk3VkhFYkQvYzhDOGdTK0pHK0U5WVh4Uk5QM1p2cWpMTHJDU2U2c1J3M3V3cVpiTnVweHRUUHhCR3ZkNkYyemtjMFU9IiwidmVyc2lvbiI6IjIiLCJ0eXBlIjoiREFUQV9LRVkiLCJleHBpcmF0aW9uIjoxNzczODAzMjgzfQ==' \ --set pulse-core.manager.enableK8sDb=true
helm upgrade pulse ./helm-pulse \ --namespace pulse \ --set global.imageCredentials.password='eyJwYXlsb2FkIjoiSHR6bzR3QUUweUw5MmIrdHFlVFM0cXRJb09BUDJ1bGYyM3ozM3NZVThyNWFZT3RueDhraFRjZGIweERpWGtjN1kybENVSStOT0ZPTDhQYmp5RmhJMWlGaDlwa05pd2RFREl0RmdVdGhhZ2dHay9Ld2ZiS2dHOUVyMzJNVUVJbFhRejlHb0UvV1lpcXNDZDBqSURhWERTditoSlduWHg5NktFNFd0R2JaalUzVFg4OVB4SW9hZ2swMXNqcTdoa3JXQ3U4K0RJMGs3aDVzbHhoTmxWSXRvWjRIOGpaZlJ3M3o1b1J1bi9HOVppWWZtdUFDdXVaUmFZUDVjalBqdktPQ2NQQlhra1BuUUhRcTdFU0JGSHlJaDFaQUh1YnVGSjJMWEx2aFpkYW9adTVSR3NmbDA1K0g5K3hQd3JsK1BUdk9TWTNsY2J1YkF3WjNCWkIzRnBUVDIzaWV5Sm1sdnRuRHdqZzQyYTRyZkdqTDV3Zmw4WVhBMXZMS2M4M3ByUnhsN1Y4ZHFYT0F4NWFyUUUydFZGem5OeEt6d2EvdXBrRkVQaW9QL3l4VDExeHh5UmFvZm9FYjdiVFk1eEFzSzlvekpXSW10bTRHVElUaGNVaENQYmVxcmM0Rk1pU1htWGpGckM0eFJpWXVJeEZZNlV4RDlOWHlGRmdaOGtpcE9BMEQwbWtQcHN5cWExR3BLcDBXYnFYYVROUElxLzVyQlNDSG4rU3NNcUdUNU9EdFp2TkZSZmI5MUJzVFYvdVlYVFVmajV1TWh0bHVoTklwcG1wcTdZQ3cxVkhIWkdlV2c5NWNhbDd3b2c4d1FrV2l2R1NQdkdCYjgvbktEaXN4TUJkTjBjYkhxbEw5b24xU2I2ZFRHclVjdHlhZWkvdzh5a0M0YnVpUHozalA3WDFhZkg5MjZvN1Bxa1hObXFCVnk4ayt6VnExd24zMGo1Y0ZZc3lFN0ZNQ1VIVXk2WnVvNW5JQVlwR1p4SHlFQ1ZBdm51SEVVNU9mVTlmdmpvcUxJNyt2YTZpWmlURjVzYTV5WjNQVWdqNGwwVlVRTWF5a0hMZW5MclBnclUrTXNSc01YZG1ocEJmSWtveFlBNWF1YnZRdk9BYzlEa2tKRXlrMDlNSmZxZGdhY2x5NUZiVTFERHFoQUg1Rjc0ZUw4T2N1MkRRbVBDZy9nRFV5NTgyNU1HOFI3UXZoZEp1aVN4ajdlb1NqYk9MaGpJdFdnTW1hNkdIdXdFdmJRWEE4V1dNRWNia2dzVTllenlvNWxkWEJmOUIwZHoraXFJK0VCNzd3USs4YmNTZkU5T1hQTlRsczB6UVpDMjl4QlF4NjJzL2tSNWJTdGptNFFqaEF0NE84IiwiZGF0YWtleSI6IkFRRUJBSGh3bTBZYUlTSmVSdEptNW4xRzZ1cWVla1h1b1hYUGU1VUZjZTlScTgvMTR3QUFBSDR3ZkFZSktvWklodmNOQVFjR29HOHdiUUlCQURCb0Jna3Foa2lHOXcwQkJ3RXdIZ1lKWUlaSUFXVURCQUV1TUJFRURDQUlYUlNXcGl0Vmt4bVZnd0lCRUlBN3Q2Qk02TERoSGRVMXlSaThhaXNpWW8wZS92R2FSNFgyRzlBV3B1cUhhaXZpOExML1BMalNKYy9BT2UxRXYxQnpNWkdtZitWVHRyeXVRRHM9IiwidmVyc2lvbiI6IjIiLCJ0eXBlIjoiREFUQV9LRVkiLCJleHBpcmF0aW9uIjoxNzczNzgwNzk0fQ==' \ --reuse-values
helm install pulse-nats ./helm-pulse -n pulse-nats --set loadBalancerServices.nats.enabled=true
helm upgrade --install pulse ./helm-pulse -n pulse \ --set global.namespace=pulse \ --set loadBalancerServices.ad-logstash.enabled=true \ --set loadBalancerServices.ad-streaming.enabled=true