Managing Elasticsearch and Kibana Versions with ECK, ArgoCD, and Kustomize
We use the ECK operator to manage our Elasticsearch clusters. It does a great job and integrates well with our GitOps workflow.
All of our deployments run through ArgoCD, and we use Kustomize to tie the pieces together. This works smoothly in most cases, but there is one recurring problem.
The Problem
When updating Elasticsearch, we sometimes forget to update Kibana. The issue is that Kibana is defined in a separate YAML, and with so many clusters it’s easy for the versions to fall out of sync.
Why This Is a Problem
Elasticsearch and Kibana versions need to be compatible. If Elasticsearch is upgraded but Kibana isn’t, things break. With dozens of clusters, missing an update becomes a very real risk.
What we need is a form of inheritance—a single place to define the version that applies to both Elasticsearch and Kibana.
The Solution
The solution is to use the replacements
function in the Kustomization resource. This ensures that the version defined in the Elasticsearch
resource is automatically propagated to Kibana
.
kind: Kustomization apiVersion: kustomize.config.k8s.io/v1beta1 replacements: - source: kind: Elasticsearch name: bgt-bps fieldPath: spec.version targets: - select: kind: Kibana fieldPaths: - spec.version
Now, the Elasticsearch YAML becomes the authoritative source for the version. Whenever ArgoCD syncs, the spec.version
value is copied from Elasticsearch to Kibana automatically. This prevents drift and ensures the two always stay aligned.