Elastic Stack Helm chart
Starting from ECK 2.4.0, a Helm chart is available for managing Elastic Stack resources using the ECK Operator. It is available from the Elastic Helm repository and can be added to your Helm repository list by running the following command:
helm repo add elastic https://helm.elastic.cohelm repo updateThe minimum supported version of Helm is 3.2.0.
The Elastic Stack (eck-stack) Helm chart is built on top of individual charts such aseck-elasticsearch andeck-kibana. For more details on its structure and dependencies, refer to thechart repository.
The chart enables you to deploy the core components (Elasticsearch and Kibana) together, along with other Elastic Stack applications if needed, under the same chart release.
The following sections guide you through common installation, configuration, and upgrade use cases, and assume basic familiarity withHelm. This guide does not provide a comprehensive introduction to Helm itself. Choose the command that best fits your setup.
All the provided examples deploy the applications in a namespace namedelastic-stack. Consider adapting the commands to your use case.
Similar to the quickstart examples for Elasticsearch and Kibana, this section describes how to setup an Elasticsearch cluster with a simple Kibana instance managed by ECK, and how to customize a deployment using the eck-stack Helm chart’s values.
# Install an eck-managed Elasticsearch and Kibana using the default values, which deploys the quickstart examples.helm install es-kb-quickstart elastic/eck-stack -n elastic-stack --create-namespaceYou can find example Helm values files for deploying and managing more advanced Elasticsearch and Kibana setupsin the project repository.
To use one or more of these example configurations, use the--values Helm option, as seen in the following section.
# Install an eck-managed Elasticsearch and Kibana using the Elasticsearch node roles example with hot, warm, and cold data tiers, and the Kibana example customizing the http service.helm install es-quickstart elastic/eck-stack -n elastic-stack --create-namespace \ --values https://raw.githubusercontent.com/elastic/cloud-on-k8s/3.3/deploy/eck-stack/examples/elasticsearch/hot-warm-cold.yaml \ --values https://raw.githubusercontent.com/elastic/cloud-on-k8s/3.3/deploy/eck-stack/examples/kibana/http-configuration.yamlThe following section builds upon the previous section, and allows installing Fleet Server, and Fleet-managed Elastic Agents along with Elasticsearch and Kibana.
# Install an eck-managed Elasticsearch, Kibana, Fleet Server, and managed Elastic Agents using custom values.helm install eck-stack-with-fleet elastic/eck-stack \ --values https://raw.githubusercontent.com/elastic/cloud-on-k8s/3.3/deploy/eck-stack/examples/agent/fleet-agents.yaml -n elastic-stackThe following section builds upon the previous sections, and allows installing Logstash along with Elasticsearch, Kibana and Beats.
# Install an eck-managed Elasticsearch, Kibana, Beats and Logstash using custom values.helm install eck-stack-with-logstash elastic/eck-stack \ --values https://raw.githubusercontent.com/elastic/cloud-on-k8s/3.3/deploy/eck-stack/examples/logstash/basic-eck.yaml -n elastic-stackThe following section builds upon the previous sections, and allows installing a standalone Elastic APM Server along with Elasticsearch and Kibana.
# Install an eck-managed Elasticsearch, Kibana, and standalone APM Server using custom values.helm install eck-stack-with-apm-server elastic/eck-stack \ --values https://raw.githubusercontent.com/elastic/cloud-on-k8s/3.3/deploy/eck-stack/examples/apm-server/basic.yaml -n elastic-stackUse the following code to connect your ECK-managed Elasticsearch clusters toAutoOps using Helm.
# Install an eck-managed Elasticsearch cluster and connect to AutoOps using custom values.helm install eck-stack-with-autoops elastic/eck-stack \ --values https://raw.githubusercontent.com/elastic/cloud-on-k8s/3.3/deploy/eck-stack/examples/autoops/basic.yaml -n elastic-stackTheeck-autoops-agent-policy chart creates anAutoOpsAgentPolicy resource that connects your Elasticsearch clusters to AutoOps. The ECK operator handles the creation of API keys, agent configuration, and the deployment of Elastic Agent required to send metrics to AutoOps.
To connect to AutoOps using the installation wizard, refer toConnect your ECE, ECK, or self-managed cluster to AutoOps.
The following section describes how to install a Elastic Package Registry resource along with Elasticsearch, Kibana and Fleet Server.
# Install an eck-managed Elasticsearch, Kibana and Fleet Server and connect to Elastic Package Registry using custom values.helm install eck-stack-with-package-registry elastic/eck-stack \ --values https://raw.githubusercontent.com/elastic/cloud-on-k8s/3.3/deploy/eck-stack/examples/package-registry/basic-eck.yaml -n elastic-stackTheeck-package-registry chart creates aPackageRegistry resource that connects your Kibana instance to the Elastic Package Registry. Elastic Cloud on Kubernetes automatically handles the creation of the Elastic Package Registry and the connection to Kibana and Fleet Server.
For more information about configuring the Elastic Package Registry, refer to theDeploy Elastic Package Registry on Elastic Cloud on Kubernetes.
Enterprise Search is not available in Elastic Stack versions 9.0 and later. For an example deployment of Elasticsearch version 8.x, Kibana 8.x, and an 8.x Enterprise Search server using the Helm chart, refer to theprevious ECK documentation.
You can install individual components in one of two ways using the provided Helm charts:
- Using Helm values with the
eck-stackchart to include only the components you need - Using the individual Helm charts directly, without using the
eck-stackchart
The following examples show how to install only Elasticsearch using each approach.
This example installs only Elasticsearch by deploying theeck-stack chart and excluding Kibana. By default, the chart deploys both Elasticsearch and Kibana.
helm install es-quickstart elastic/eck-stack -n elastic-stack --create-namespace --set=eck-kibana.enabled=falseThis example installs Elasticsearch by deploying theeck-elasticsearch chart on its own.
helm install es-quickstart elastic/eck-elasticsearch -n elastic-stack --create-namespaceTo upgrade your Elastic Stack components to a new version or modify the configuration of your existing installation (known as arelease), use thehelm upgrade command.
Thehelm upgrade command requires the following arguments:
- The name of the release to update, which must match the name used with
helm install. - The chart name, which must be the same chart used during installation.
When runninghelm upgrade, it’s recommended to pass the same values and configuration options that were used during installation, together with any changes you want to apply. This ensures that the resulting configuration matches your expectations and reduces the risk of values reverting to the chart defaults during the upgrade.
Helm provides additional options to control how values associated with an existing release are reused or reset during an upgrade. For details, refer to thehelm upgrade documentation.
By default,helm upgrade uses the latest available version of the chart unless the--version option is specified. Refer toView chart versions to list the available chart versions or the version associated with an installed release.
There is an important distinction between the Helm chart version and the Elastic Stack component version:
- Chart version: The version of the Helm chart itself (for example,
eck-stackversion 0.17.0). You can specify this using the--versionflag in your Helminstallorupgradecommands. - Component version: The version of a Elastic Stack component (for example, Elasticsearch 9.3.0 or Kibana 9.3.0). You can specify this in your values file or by using
--setparameters.
Each chart version defines default Elastic Stack component versions. Unless explicitly overridden, installing or upgrading the chart deploys those default versions.
All examples in this section assume that your release was installed using theeck-stack Helm chart. Adapt the examples if you deployed theindividual charts directly.
To upgrade an installed release namedes-kb-quickstart to the latest version of the Helm chart, do the following:
helm repo updatehelm upgrade es-kb-quickstart elastic/eck-stack -n elastic-stack- Refresh the local chart cache.
By default, upgrading the Helm chart also upgrades the Elastic Stack components to the versions associated with that chart version. To override this behavior, you can explicitly set the Elastic Stack component versions to use, as shown in the following section.
If you want to upgrade the Elastic Stack components to a later version that is not the default for the Helm chart, or you want to update your Helm chart without upgrading the Elastic Stack, you can explicitly set the component versions using Helm values or--set options.
The following examples show both ways to upgrade the release to the latest available version of the Helm chart and all Elastic Stack components to version 9.3.0.
Use--set options to override the component versions directly from the command line:
helm repo updatehelm upgrade es-kb-quickstart elastic/eck-stack -n elastic-stack \ --set eck-elasticsearch.version=9.3.0 \ --set eck-kibana.version=9.3.0- Refresh the local chart cache.
- Specify versions for all the components you deploy. Components without an explicitly defined version continue to use the default versions provided by the chart.
If you already use a values file for this release, update it to include the following settings. Otherwise, create a new values file (for example,custom-values.yaml) with the following content:
eck-elasticsearch: version: 9.3.0eck-kibana: version: 9.3.0- Specify versions for all the components you deploy. Components without an explicitly defined version continue to use the default versions provided by the chart.
Then upgrade the release using the values file:
helm repo updatehelm upgrade es-kb-quickstart elastic/eck-stack -n elastic-stack -f custom-values.yaml- Refresh the local chart cache.
To apply configuration changes to an existing release, runhelm upgrade with the complete configuration you want the release to use. This includes both the current configuration and any new changes.
For example, if you installed thequickstart release and want to scale the Elasticsearch cluster to three nodes and expose the Kibana service using a LoadBalancer, do the following:
Create a values file with the desired configuration, and save it as
custom-values.yaml:eck-elasticsearch: nodeSets: - name: default count: 3eck-kibana: http: service: spec: # This deploys a load balancer in a cloud service provider, where supported. type: LoadBalancerApply the configuration using
helm upgrade:helm upgrade es-kb-quickstart elastic/eck-stack \ -n elastic-stack \ -f custom-values.yaml
This example also upgrades the Elastic Stack components if a newer Helm chart version is available. To avoid this,identify the chart version currently used by your release and include the--version option when runninghelm upgrade.
Ingress is a standard Kubernetes concept. While ECK-managed workloads can be publicly exposed using ingress resources, and we provideexample configurations, setting up an Ingress controller requires in-house Kubernetes expertise.
If ingress configuration is challenging or unsupported in your environment, consider using standardLoadBalancer services as a simpler alternative.
Both Elasticsearch and Kibana supportIngress, which can be enabled using the following options:
If an individual chart is used (not eck-stack)
The following command installs an Elasticsearch cluster using theeck-elasticsearch chart and configures an ingress resource:
helm install es-quickstart elastic/eck-elasticsearch -n elastic-stack --create-namespace \ --set=ingress.enabled=true --set=ingress.hosts[0].host=elasticsearch.example.com --set=ingress.hosts[0].path="/"If eck-stack chart is used
The following command deploys the basic Elasticsearch and Kibana example with ingress resources for both components:
helm install es-kb-quickstart elastic/eck-stack -n elastic-stack --create-namespace \ --set=eck-elasticsearch.ingress.enabled=true --set=eck-elasticsearch.ingress.hosts[0].host=elasticsearch.example.com --set=eck-elasticsearch.ingress.hosts[0].path="/" \ --set=eck-kibana.ingress.enabled=true --set=eck-kibana.ingress.hosts[0].host=kibana.example.com --set=eck-kibana.ingress.hosts[0].path="/"For illustration purposes, the ingress objects created by the previous command look similar to the following:
# Source: eck-stack/charts/eck-elasticsearch/templates/ingress.yamlapiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: elasticsearch labels: ...spec: rules: - host: "elasticsearch.example.com" http: paths: - path: / pathType: Prefix backend: service: name: elasticsearch-es-http port: number: 9200---# Source: eck-stack/charts/eck-kibana/templates/ingress.yamlapiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: es-kb-quickstart-eck-kibana labels: ...spec: rules: - host: "kibana.example.com" http: paths: - path: / pathType: Prefix backend: service: name: es-kb-quickstart-eck-kibana-kb-http port: number: 5601You can view all configurable values of the Elastic Stack helm chart of the individual charts by running the following:
helm show values elastic/eck-stackhelm show values elastic/eck-elasticsearchhelm show values elastic/eck-kibanahelm show values elastic/eck-agenthelm show values elastic/eck-beatshelm show values elastic/eck-apm-serverhelm show values elastic/eck-fleet-serverhelm show values elastic/eck-logstashhelm show values elastic/eck-package-registryTo view the available versions of a Helm chart, update the local chart cache and use thehelm repo search command with--versions option. You can use this flag witheck-stack orindividual charts.
helm repo updatehelm repo search elastic/eck-stack --versionsTo view the version associated with an installed release, check theCHART column of thehelm list command output. For example:
$ helm list -n elastic-stackNAME NAMESPACE REVISIONUPDATED STATUS CHART APP VERSIONes-kb-quickstartelastic-stack2 2025-12-17 11:24:06.156007 +0100 CETdeployedeck-stack-0.17.0