Skip to content

Instantly share code, notes, and snippets.

@bsantanna
Last active March 6, 2025 13:07
Show Gist options
  • Save bsantanna/a0dd347f9003c3933c2ad7a80a21d16b to your computer and use it in GitHub Desktop.
Save bsantanna/a0dd347f9003c3933c2ad7a80a21d16b to your computer and use it in GitHub Desktop.

ECK Installation Cookbook

Resources:

Add Helm Repo:

helm repo add elastic https://helm.elastic.co
helm repo update

Install Operator and Custom Resource Definitions:

helm install elastic-operator elastic/eck-operator \
    --namespace elastic-system --create-namespace

Install Nginx Ingress Controller with custom Certificates:

mkcert "*.dev.local"
kubectl -n kube-system create secret tls mkcert \
    --key _wildcard.dev.local-key.pem \
    --cert _wildcard.dev.local.pem
helm upgrade --install ingress-nginx ingress-nginx \
    --repo https://kubernetes.github.io/ingress-nginx \
    --namespace ingress --create-namespace \
    --set controller.extraArgs.default-ssl-certificate=kube-system/mkcert

Install Elastic Stack

helm install elastic elastic/eck-stack \
    --namespace elastic-stack --create-namespace \
    --set eck-elasticsearch.enabled=true \
    --set eck-elasticsearch.fullnameOverride=elasticsearch \
    --set eck-elasticsearch.ingress.enabled=true \
    --set eck-elasticsearch.ingress.className=nginx \
    --set eck-elasticsearch.ingress.hosts\[0\].host=elasticsearch.dev.local \
    --set eck-elasticsearch.ingress.hosts\[0\].path=/ \
    --set eck-elasticsearch.ingress.tls.enabled=true \
    --set eck-elasticsearch.ingress.annotations."kubernetes\.io/ingress\.class"='nginx' \
    --set eck-elasticsearch.ingress.annotations."kubernetes\.io/tls-acme"='"true"' \
    --set eck-elasticsearch.ingress.annotations."nginx\.ingress\.kubernetes\.io/proxy-ssl-verify"='"false"' \
    --set eck-elasticsearch.ingress.annotations."nginx\.ingress\.kubernetes\.io/backend-protocol"='HTTPS' \
    --set eck-kibana.enabled=true \
    --set eck-kibana.fullnameOverride=kibana \
    --set eck-kibana.config.xpack.fleet.packages\[0\].name=apm \
    --set eck-kibana.config.xpack.fleet.packages\[0\].version=latest \
    --set eck-kibana.ingress.enabled=true \
    --set eck-kibana.ingress.className=nginx \
    --set eck-kibana.ingress.hosts\[0\].host=kibana.dev.local \
    --set eck-kibana.ingress.hosts\[0\].path=/ \
    --set eck-kibana.ingress.tls.enabled=true \
    --set eck-kibana.ingress.annotations."kubernetes\.io/ingress\.class"='nginx' \
    --set eck-kibana.ingress.annotations."kubernetes\.io/tls-acme"='"true"' \
    --set eck-kibana.ingress.annotations."nginx\.ingress\.kubernetes\.io/proxy-ssl-verify"='"false"' \
    --set eck-kibana.ingress.annotations."nginx\.ingress\.kubernetes\.io/backend-protocol"='HTTPS' \
    --set eck-apm-server.enabled=true \
    --set eck-apm-server.elasticsearchRef.name=elasticsearch \
    --set eck-apm-server.kibanaRef.name=kibana

Get elastic user password:

echo "$(kubectl get secret --namespace elastic-stack elasticsearch-es-elastic-user \
    -o=jsonpath='{.data.elastic}' | base64 --decode)"

Get APM access token:

echo "$(kubectl get secret/elastic-eck-apm-server-apm-token \
    -o go-template='{{index .data "secret-token" | base64decode}}' \
    --namespace elastic-stack)"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment