Deploy Pulse Databases via Helm

This page describes how to install each database component of the helm-databases umbrella Helm chart on OpenShift.

Info

Note: All commands assume you are running from the repository root, which is the parent directory of helm-databases/.


Common Parameters

These parameters are shared across most or all database installations.

Parameter

Description

global.openshift

Enable OpenShift-specific configurations. Set to true for OpenShift clusters.

global.imagePullSecrets[0]

Name of the Kubernetes secret used to pull images from a private registry.

global.imagePullPolicy

Image pull policy. Valid values are Always, IfNotPresent, and Never.

global.storageClassName

StorageClass to use for persistent volume claims.

global.imageCredentials.password

Base64-encoded Docker registry credentials token.

mongodb.managedSecurityContext

Let the operator manage the security context. Required for OpenShift.

nats.global.image.pullSecretNames[0]

Image pull secret name for the NATS sub-chart.


1. MongoDB

Installation Command

helm install <RELEASE_NAME> ./helm-databases \ -n <NAMESPACE> --create-namespace \ -f helm-databases/values/mongo-only.yaml \ --set mongodb.cr.version="<MongoDB Version>" \ --set mongodb.cr.mongodImage="<MongoDB Image>" \ --set global.openshift=<true|false> \ --set mongodb.managedSecurityContext=<true|false> \ --set global.imagePullSecrets[0]=<Image Pull Secret Name> \ --set mongodb.registry.imagePullSecrets=<Image Pull Secret Name> \ --set global.imagePullPolicy=<Image Pull Policy> \ --set global.storageClassName='<Storage Class Name>' \ --set global.imageCredentials.password='<Base64 Encoded Registry Token>' \ --set mongodb.cr.storage.size=<Storage Size> \ --set mongodb.cr.resources.limits.cpu=<CPU Limit> \ --set mongodb.cr.resources.limits.memory=<Memory Limit> \ --set mongodb.cr.resources.requests.cpu=<CPU Request> \ --set mongodb.cr.resources.requests.memory=<Memory Request> \ --timeout <Timeout Duration>

Example Command for OpenShift

helm install pulse-mongo ./helm-databases \ -n pulse-mongo --create-namespace \ -f helm-databases/values/mongo-only.yaml \ --set mongodb.cr.version="8.0.18" \ --set mongodb.cr.mongodImage="191579300362.dkr.ecr.us-east-1.amazonaws.com/acceldata/ad-database:testBuild-k8sqe" \ --set global.openshift=true \ --set mongodb.managedSecurityContext=true \ --set global.imagePullSecrets[0]=adreg \ --set mongodb.registry.imagePullSecrets=adreg \ --set global.imagePullPolicy=IfNotPresent \ --set global.storageClassName='gp2-csi' \ --set global.imageCredentials.password='<BASE64_ENCODED_TOKEN>' \ --set mongodb.cr.storage.size=50Gi \ --set mongodb.cr.resources.limits.cpu=1 \ --set mongodb.cr.resources.limits.memory=4Gi \ --set mongodb.cr.resources.requests.cpu=500m \ --set mongodb.cr.resources.requests.memory=2Gi \ --timeout 20m

Example Command for Vanilla Kubernetes

helm install pulse-mongo ./helm-databases \ -n pulse-mongo --create-namespace \ -f helm-databases/values/mongo-only.yaml \ --set mongodb.cr.version="8.0.18" \ --set mongodb.cr.mongodImage="191579300362.dkr.ecr.us-east-1.amazonaws.com/acceldata/ad-database:testBuild-k8sqe" \ --set global.imagePullSecrets[0]=adreg \ --set mongodb.registry.imagePullSecrets=adreg \ --set global.imagePullPolicy=IfNotPresent \ --set global.storageClassName='gp2-csi' \ --set global.imageCredentials.password='<BASE64_ENCODED_TOKEN>' \ --set mongodb.cr.storage.size=50Gi \ --set mongodb.cr.resources.limits.cpu=1 \ --set mongodb.cr.resources.limits.memory=4Gi \ --set mongodb.cr.resources.requests.cpu=500m \ --set mongodb.cr.resources.requests.memory=2Gi \ --timeout 20m

Parameter Reference

Parameter

Description

mongodb.cr.version

MongoDB server version to deploy.

mongodb.cr.mongodImage

Full image path, in registry/repo:tag format, for the MongoDB container.

mongodb.managedSecurityContext

Let the MongoDB operator manage the pod security context. Required for OpenShift.

mongodb.registry.imagePullSecrets

Image pull secret name used by the MongoDB operator.

mongodb.cr.storage.size

Persistent volume size for MongoDB data.

mongodb.cr.resources.limits.cpu

CPU limit for the MongoDB pod.

mongodb.cr.resources.limits.memory

Memory limit for the MongoDB pod.

mongodb.cr.resources.requests.cpu

CPU request for the MongoDB pod.

mongodb.cr.resources.requests.memory

Memory request for the MongoDB pod.

--timeout

Maximum time Helm will wait for the install to complete.


2. VictoriaMetrics

Installation Command

helm install <RELEASE_NAME> ./helm-databases \ -n <NAMESPACE> --create-namespace \ --set victoriametrics.cr.auth.username=<VM Auth Username> \ --set 'victoriametrics.cr.auth.password=<VM Auth Password>' \ --set mongodb.managedSecurityContext=<true|false> \ --set global.openshift=<true|false> \ --set nats.global.image.pullSecretNames[0]=<Image Pull Secret Name> \ --set global.storageClassName='<Storage Class Name>' \ --set global.imageCredentials.password='<Base64 Encoded Registry Token>' \ --set victoriametrics.cr.vmstorage.storage.size=<VMStorage PV Size> \ --set victoriametrics.cr.vmstorage.resources.limits.cpu=<VMStorage CPU Limit> \ --set victoriametrics.cr.vmstorage.resources.limits.memory=<VMStorage Memory Limit> \ --set victoriametrics.cr.vmstorage.resources.requests.cpu=<VMStorage CPU Request> \ --set victoriametrics.cr.vmstorage.resources.requests.memory=<VMStorage Memory Request> \ --set victoriametrics.cr.vmselect.storage.size=<VMSelect PV Size> \ --set victoriametrics.cr.vmselect.resources.limits.cpu=<VMSelect CPU Limit> \ --set victoriametrics.cr.vmselect.resources.limits.memory=<VMSelect Memory Limit> \ --set victoriametrics.cr.vmselect.resources.requests.cpu=<VMSelect CPU Request> \ --set victoriametrics.cr.vmselect.resources.requests.memory=<VMSelect Memory Request> \ --set victoriametrics.cr.vminsert.resources.limits.cpu=<VMInsert CPU Limit> \ --set victoriametrics.cr.vminsert.resources.limits.memory=<VMInsert Memory Limit> \ --set victoriametrics.cr.vminsert.resources.requests.cpu=<VMInsert CPU Request> \ --set victoriametrics.cr.vminsert.resources.requests.memory=<VMInsert Memory Request> \ -f helm-databases/values/victoriametrics-only.yaml

Post-Install Upgrade

After install, run an upgrade to reconcile values:

helm upgrade <RELEASE_NAME> ./helm-databases \ --namespace <NAMESPACE> \ --reuse-values

Example Command for OpenShift

helm install pulse-vm ./helm-databases \ -n pulse-vm --create-namespace \ --set victoriametrics.cr.auth.username=acceldata \ --set 'victoriametrics.cr.auth.password=D@t@Ops' \ --set mongodb.managedSecurityContext=true \ --set global.openshift=true \ --set nats.global.image.pullSecretNames[0]=adreg \ --set global.storageClassName='gp2-csi' \ --set global.imageCredentials.password='<BASE64_ENCODED_TOKEN>' \ --set victoriametrics.cr.vmstorage.storage.size=50Gi \ --set victoriametrics.cr.vmstorage.resources.limits.cpu=1 \ --set victoriametrics.cr.vmstorage.resources.limits.memory=4Gi \ --set victoriametrics.cr.vmstorage.resources.requests.cpu=500m \ --set victoriametrics.cr.vmstorage.resources.requests.memory=1Gi \ --set victoriametrics.cr.vmselect.storage.size=10Gi \ --set victoriametrics.cr.vmselect.resources.limits.cpu=1 \ --set victoriametrics.cr.vmselect.resources.limits.memory=2Gi \ --set victoriametrics.cr.vmselect.resources.requests.cpu=500m \ --set victoriametrics.cr.vmselect.resources.requests.memory=512Mi \ --set victoriametrics.cr.vminsert.resources.limits.cpu=1 \ --set victoriametrics.cr.vminsert.resources.limits.memory=2Gi \ --set victoriametrics.cr.vminsert.resources.requests.cpu=500m \ --set victoriametrics.cr.vminsert.resources.requests.memory=512Mi \ -f helm-databases/values/victoriametrics-only.yaml helm upgrade pulse-vm ./helm-databases \ --namespace pulse-vm \ --reuse-values

Example Command for Vanilla Kubernetes

helm install pulse-vm ./helm-databases \ -n pulse-vm --create-namespace \ --set victoriametrics.cr.auth.username=acceldata \ --set 'victoriametrics.cr.auth.password=D@t@Ops' \ --set nats.global.image.pullSecretNames[0]=adreg \ --set global.storageClassName='gp2-csi' \ --set global.imageCredentials.password='<BASE64_ENCODED_TOKEN>' \ --set victoriametrics.cr.vmstorage.storage.size=50Gi \ --set victoriametrics.cr.vmstorage.resources.limits.cpu=1 \ --set victoriametrics.cr.vmstorage.resources.limits.memory=4Gi \ --set victoriametrics.cr.vmstorage.resources.requests.cpu=500m \ --set victoriametrics.cr.vmstorage.resources.requests.memory=1Gi \ --set victoriametrics.cr.vmselect.storage.size=10Gi \ --set victoriametrics.cr.vmselect.resources.limits.cpu=1 \ --set victoriametrics.cr.vmselect.resources.limits.memory=2Gi \ --set victoriametrics.cr.vmselect.resources.requests.cpu=500m \ --set victoriametrics.cr.vmselect.resources.requests.memory=512Mi \ --set victoriametrics.cr.vminsert.resources.limits.cpu=1 \ --set victoriametrics.cr.vminsert.resources.limits.memory=2Gi \ --set victoriametrics.cr.vminsert.resources.requests.cpu=500m \ --set victoriametrics.cr.vminsert.resources.requests.memory=512Mi \ -f helm-databases/values/victoriametrics-only.yaml helm upgrade pulse-vm ./helm-databases \ --namespace pulse-vm \ --reuse-values

Parameter Reference

Parameter

Description

victoriametrics.cr.auth.username

Username for VictoriaMetrics basic auth.

victoriametrics.cr.auth.password

Password for VictoriaMetrics basic auth.

victoriametrics.cr.vmstorage.storage.size

Persistent volume size for the VMStorage component.

victoriametrics.cr.vmstorage.resources.limits.cpu

CPU limit for VMStorage pods.

victoriametrics.cr.vmstorage.resources.limits.memory

Memory limit for VMStorage pods.

victoriametrics.cr.vmstorage.resources.requests.cpu

CPU request for VMStorage pods.

victoriametrics.cr.vmstorage.resources.requests.memory

Memory request for VMStorage pods.

victoriametrics.cr.vmselect.storage.size

Persistent volume size for the VMSelect component.

victoriametrics.cr.vmselect.resources.limits.cpu

CPU limit for VMSelect pods.

victoriametrics.cr.vmselect.resources.limits.memory

Memory limit for VMSelect pods.

victoriametrics.cr.vmselect.resources.requests.cpu

CPU request for VMSelect pods.

victoriametrics.cr.vmselect.resources.requests.memory

Memory request for VMSelect pods.

victoriametrics.cr.vminsert.resources.limits.cpu

CPU limit for VMInsert pods.

victoriametrics.cr.vminsert.resources.limits.memory

Memory limit for VMInsert pods.

victoriametrics.cr.vminsert.resources.requests.cpu

CPU request for VMInsert pods.

victoriametrics.cr.vminsert.resources.requests.memory

Memory request for VMInsert pods.


3. Elasticsearch

Installation Command

helm install <RELEASE_NAME> ./helm-databases \ -n <NAMESPACE> --create-namespace \ --set global.openshift=<true|false> \ --set mongodb.managedSecurityContext=<true|false> \ --set elasticsearch.cr.auth.password="<Admin Password>" \ --set elasticsearch.cr.auth.additionalUsers[0].username=<Additional Username> \ --set elasticsearch.cr.auth.additionalUsers[0].password="<Additional User Password>" \ --set elasticsearch.cr.auth.additionalUsers[0].roles[0]=<User Role> \ --set elasticsearch.cr.tls.p12.password="<PKCS12 Keystore Password>" \ --set elasticsearch.cr.httpPort=<HTTP Port> \ --set elasticsearch.cr.tls.disabled=<true|false> \ --set nats.global.image.pullSecretNames[1]=<Image Pull Secret Name> \ --set global.storageClassName='<Storage Class Name>' \ --set global.imageCredentials.password='<Base64 Encoded Registry Token>' \ --set elasticsearch.cr.nodeSets[0].name=<NodeSet Name> \ --set elasticsearch.cr.nodeSets[0].count=<Node Count> \ --set elasticsearch.cr.nodeSets[0].config.node\.store\.allow_mmap=<true|false> \ --set elasticsearch.cr.nodeSets[0].storage.size=<Storage Size> \ --set elasticsearch.cr.nodeSets[0].resources.limits.cpu=<CPU Limit> \ --set elasticsearch.cr.nodeSets[0].resources.limits.memory=<Memory Limit> \ --set elasticsearch.cr.nodeSets[0].resources.requests.cpu=<CPU Request> \ --set elasticsearch.cr.nodeSets[0].resources.requests.memory=<Memory Request> \ -f helm-databases/values/elastic-only.yaml

Post-Install Upgrade

After install, run an upgrade to reconcile values:

helm upgrade <RELEASE_NAME> ./helm-databases \ --namespace <NAMESPACE> \ --reuse-values

Example Command for OpenShift

helm install pulse-es ./helm-databases \ -n pulse-es --create-namespace \ --set global.openshift=true \ --set mongodb.managedSecurityContext=true \ --set elasticsearch.cr.auth.password="admin_password" \ --set elasticsearch.cr.auth.additionalUsers[0].username=pulse \ --set elasticsearch.cr.auth.additionalUsers[0].password="data@ops" \ --set elasticsearch.cr.auth.additionalUsers[0].roles[0]=superuser \ --set elasticsearch.cr.tls.p12.password="" \ --set elasticsearch.cr.httpPort=19013 \ --set elasticsearch.cr.tls.disabled=true \ --set nats.global.image.pullSecretNames[1]=adreg \ --set global.storageClassName='gp2-csi' \ --set global.imageCredentials.password='<BASE64_ENCODED_TOKEN>' \ --set elasticsearch.cr.nodeSets[0].name=default \ --set elasticsearch.cr.nodeSets[0].count=3 \ --set elasticsearch.cr.nodeSets[0].config.node\.store\.allow_mmap=true \ --set elasticsearch.cr.nodeSets[0].storage.size=50Gi \ --set elasticsearch.cr.nodeSets[0].resources.limits.cpu=1 \ --set elasticsearch.cr.nodeSets[0].resources.limits.memory=8Gi \ --set elasticsearch.cr.nodeSets[0].resources.requests.cpu=500m \ --set elasticsearch.cr.nodeSets[0].resources.requests.memory=4Gi \ -f helm-databases/values/elastic-only.yaml helm upgrade pulse-es ./helm-databases \ --namespace pulse-es \ --reuse-values

Example Command for Vanilla Kubernetes

helm install pulse-es ./helm-databases \ -n pulse-es --create-namespace \ --set elasticsearch.cr.auth.password="admin_password" \ --set elasticsearch.cr.auth.additionalUsers[0].username=pulse \ --set elasticsearch.cr.auth.additionalUsers[0].password="data@ops" \ --set elasticsearch.cr.auth.additionalUsers[0].roles[0]=superuser \ --set elasticsearch.cr.tls.p12.password="" \ --set elasticsearch.cr.httpPort=19013 \ --set elasticsearch.cr.tls.disabled=true \ --set nats.global.image.pullSecretNames[1]=adreg \ --set global.storageClassName='gp2-csi' \ --set global.imageCredentials.password='<BASE64_ENCODED_TOKEN>' \ --set elasticsearch.cr.nodeSets[0].name=default \ --set elasticsearch.cr.nodeSets[0].count=3 \ --set elasticsearch.cr.nodeSets[0].config.node\.store\.allow_mmap=true \ --set elasticsearch.cr.nodeSets[0].storage.size=50Gi \ --set elasticsearch.cr.nodeSets[0].resources.limits.cpu=1 \ --set elasticsearch.cr.nodeSets[0].resources.limits.memory=8Gi \ --set elasticsearch.cr.nodeSets[0].resources.requests.cpu=500m \ --set elasticsearch.cr.nodeSets[0].resources.requests.memory=4Gi \ -f helm-databases/values/elastic-only.yaml helm upgrade pulse-es ./helm-databases \ --namespace pulse-es \ --reuse-values

Parameter Reference

Parameter

Description

elasticsearch.cr.auth.password

Password for the Elasticsearch admin user.

elasticsearch.cr.auth.additionalUsers[0].username

Username for an additional Elasticsearch user.

elasticsearch.cr.auth.additionalUsers[0].password

Password for the additional Elasticsearch user.

elasticsearch.cr.auth.additionalUsers[0].roles[0]

Role assigned to the additional user, for example, superuser.

elasticsearch.cr.tls.p12.password

Password for the PKCS#12 TLS keystore. Use an empty string to disable.

elasticsearch.cr.httpPort

HTTP port Elasticsearch listens on.

elasticsearch.cr.tls.disabled

Disable TLS for Elasticsearch HTTP endpoint.

elasticsearch.cr.nodeSets[0].name

Name identifier for the Elasticsearch node set.

elasticsearch.cr.nodeSets[0].count

Number of Elasticsearch nodes in the set.

elasticsearch.cr.nodeSets[0].config.node.store.allow_mmap

Allow memory-mapped files for the Elasticsearch node store.

elasticsearch.cr.nodeSets[0].storage.size

Persistent volume size per Elasticsearch node.

elasticsearch.cr.nodeSets[0].resources.limits.cpu

CPU limit per Elasticsearch node.

elasticsearch.cr.nodeSets[0].resources.limits.memory

Memory limit per Elasticsearch node.

elasticsearch.cr.nodeSets[0].resources.requests.cpu

CPU request per Elasticsearch node.

elasticsearch.cr.nodeSets[0].resources.requests.memory

Memory request per Elasticsearch node.


4. PostgreSQL

Installation Command

helm install <RELEASE_NAME> ./helm-databases \ -n <NAMESPACE> --create-namespace \ -f helm-databases/values/postgres-only.yaml \ --set postgresql.useOperator=<true|false> \ --set nats.global.image.pullSecretNames[0]=<Image Pull Secret Name> \ --set global.storageClassName='<Storage Class Name>' \ --set global.imageCredentials.password='<Base64 Encoded Registry Token>' \ --set postgresql.standalone.storage.size=<Storage Size> \ --set postgresql.standalone.resources.limits.cpu=<CPU Limit> \ --set postgresql.standalone.resources.limits.memory=<Memory Limit> \ --set postgresql.standalone.resources.requests.cpu=<CPU Request> \ --set postgresql.standalone.resources.requests.memory=<Memory Request> \ -f helm-databases/values/openshift.yaml

Example Command for OpenShift

helm install pulse-pg ./helm-databases \ -n pulse-pg --create-namespace \ -f helm-databases/values/postgres-only.yaml \ --set postgresql.useOperator=false \ --set nats.global.image.pullSecretNames[0]=adreg \ --set global.storageClassName='gp2-csi' \ --set global.imageCredentials.password='<BASE64_ENCODED_TOKEN>' \ --set postgresql.standalone.storage.size=50Gi \ --set postgresql.standalone.resources.limits.cpu=1 \ --set postgresql.standalone.resources.limits.memory=4Gi \ --set postgresql.standalone.resources.requests.cpu=500m \ --set postgresql.standalone.resources.requests.memory=2Gi \ -f helm-databases/values/openshift.yaml

Example Command for Vanilla Kubernetes

helm install pulse-pg ./helm-databases \ -n pulse-pg --create-namespace \ -f helm-databases/values/postgres-only.yaml \ --set postgresql.useOperator=false \ --set nats.global.image.pullSecretNames[0]=adreg \ --set global.storageClassName='gp2-csi' \ --set global.imageCredentials.password='<BASE64_ENCODED_TOKEN>' \ --set postgresql.standalone.storage.size=50Gi \ --set postgresql.standalone.resources.limits.cpu=1 \ --set postgresql.standalone.resources.limits.memory=4Gi \ --set postgresql.standalone.resources.requests.cpu=500m \ --set postgresql.standalone.resources.requests.memory=2Gi

Parameter Reference

Parameter

Description

postgresql.useOperator

Whether to deploy PostgreSQL via an operator. false means standalone StatefulSet.

postgresql.standalone.storage.size

Persistent volume size for PostgreSQL data.

postgresql.standalone.resources.limits.cpu

CPU limit for the PostgreSQL pod.

postgresql.standalone.resources.limits.memory

Memory limit for the PostgreSQL pod.

postgresql.standalone.resources.requests.cpu

CPU request for the PostgreSQL pod.

postgresql.standalone.resources.requests.memory

Memory request for the PostgreSQL pod.

Info

Note: This installation uses two values files: postgres-only.yaml and openshift.yaml. The OpenShift values file provides additional security context and SCC-related settings.


5. NATS

Installation Command

helm install <RELEASE_NAME> ./helm-databases \ -n <NAMESPACE> --create-namespace \ --set global.openshift=<true|false> \ -f helm-databases/values/nats-only.yaml \ --set nats.global.image.pullSecretNames[0]=<Image Pull Secret Name> \ --set nats.loadBalancer.enabled=<true|false> \ --set global.storageClassName='<Storage Class Name>' \ --set nats.config.jetstream.fileStore.pvc.storageClassName='<Storage Class Name>' \ --set global.imageCredentials.password='<Base64 Encoded Registry Token>' \ --set nats.config.jetstream.fileStore.pvc.size=<JetStream PV Size> \ --set nats.container.merge.resources.limits.cpu=<CPU Limit> \ --set nats.container.merge.resources.limits.memory=<Memory Limit> \ --set nats.container.merge.resources.requests.cpu=<CPU Request> \ --set nats.container.merge.resources.requests.memory=<Memory Request>

Example Command for OpenShift

helm install pulse-nats ./helm-databases \ -n pulse-nats --create-namespace \ --set global.openshift=true \ -f helm-databases/values/nats-only.yaml \ --set nats.global.image.pullSecretNames[0]=adreg \ --set nats.loadBalancer.enabled=true \ --set global.storageClassName='gp2-csi' \ --set nats.config.jetstream.fileStore.pvc.storageClassName='gp2-csi' \ --set nats.config.jetstream.fileStore.pvc.size=20Gi \ --set nats.container.merge.resources.limits.cpu=1 \ --set nats.container.merge.resources.limits.memory=4Gi \ --set nats.container.merge.resources.requests.cpu=500m \ --set nats.container.merge.resources.requests.memory=2Gi

Example Command for Vanilla Kubernetes

helm install pulse-nats ./helm-databases \ -n pulse-nats --create-namespace \ -f helm-databases/values/nats-only.yaml \ --set nats.global.image.pullSecretNames[0]=adreg \ --set nats.loadBalancer.enabled=true \ --set global.storageClassName='gp2-csi' \ --set nats.config.jetstream.fileStore.pvc.storageClassName='gp2-csi' \ --set nats.config.jetstream.fileStore.pvc.size=20Gi \ --set nats.container.merge.resources.limits.cpu=1 \ --set nats.container.merge.resources.limits.memory=4Gi \ --set nats.container.merge.resources.requests.cpu=500m \ --set nats.container.merge.resources.requests.memory=2Gi

Parameter Reference

Parameter

Description

nats.global.image.pullSecretNames[0]

Image pull secret name for the NATS sub-chart.

nats.loadBalancer.enabled

Expose NATS via a LoadBalancer service.

nats.config.jetstream.fileStore.pvc.storageClassName

StorageClass for the JetStream file store PVC.

nats.config.jetstream.fileStore.pvc.size

Persistent volume size for the JetStream file store.

nats.container.merge.resources.limits.cpu

CPU limit for the NATS container.

nats.container.merge.resources.limits.memory

Memory limit for the NATS container.

nats.container.merge.resources.requests.cpu

CPU request for the NATS container.

nats.container.merge.resources.requests.memory

Memory request for the NATS container.


Uninstall

To remove any of the database releases:

helm uninstall <RELEASE_NAME> -n <NAMESPACE>

For example:

helm uninstall pulse-mongo -n pulse-mongo helm uninstall pulse-vm -n pulse-vm helm uninstall pulse-es -n pulse-es helm uninstall pulse-pg -n pulse-pg helm uninstall pulse-nats -n pulse-nats