Skip to content
SYS.DOCS // DOCS

Deploy and Operate OpenSearch

OpenSearch is a distributed search and analytics engine with OpenSearch Dashboards for visualization. Edka deploys it as a managed app in your Kubernetes cluster through the OpenSearch Kubernetes Operator, generates the cluster credentials and certificates, and optionally publishes Dashboards on a Gateway hostname.

ComponentPurposeHow Edka connects it
OpenSearch Kubernetes OperatorReconciles the node StatefulSet, certificates, and security configurationInstalled as a required add-on before the app, watching opensearch-system
cert-managerIssues the operator’s admission webhook certificateInstalled as a required add-on
OpenSearch clusterSearch, indexing, and analyticsDeclared as an OpenSearchCluster resource named opensearch in opensearch-system
OpenSearch DashboardsWeb interface for search, visualization, and administrationDeployed by the operator from the same OpenSearchCluster resource
Persistent volumesIndex data, one volume per nodeA ReadWriteOnce PersistentVolumeClaim per node from the selected storage class
Envoy GatewayOptional HTTPS access to DashboardsSelect a traffic class and hostname; Edka creates the HTTPRoute

The operator generates the transport certificates per node and the HTTP layer certificate, so in-cluster API clients connect over HTTPS and need to trust the CA the operator generates. Edka also enables setVMMaxMapCount, so the operator raises vm.max_map_count on the hosts that run OpenSearch pods.

Before installing OpenSearch, prepare:

  • an Edka cluster with capacity for the chosen node count at the selected memory and CPU limits; three nodes is the floor
  • a storage class that provisions ReadWriteOnce volumes; hcloud-volumes is the default
  • an Envoy Gateway traffic class and a DNS hostname resolving through it, if you want to publish Dashboards

Edka installs cert-manager and the OpenSearch Kubernetes Operator as required add-ons before the app when they are not already present. See Kubernetes Add-ons Management and Gateway API.

  1. Open your cluster and select Apps.
  2. Find OpenSearch and select Install.
  3. In OpenSearch, set Version, Node Count, the per-node memory and CPU values, and Java Heap Size. Keep or replace the generated Admin Password.
  4. In Dashboards, keep Enable Dashboards on or turn it off, and review the Dashboards resource values.
  5. In Storage, set Storage Size per Node and Storage Class.
  6. In Access, optionally enable Expose Dashboards via Gateway, then select a Traffic Class and enter a Dashboards Hostname.
  7. Select Install App and follow the operation progress until the cluster is ready.

OpenSearch always installs into the opensearch-system namespace and is limited to one instance per cluster. The operator watches only that namespace, so neither the namespace nor the instance count is configurable.

SettingDefaultRange or note
Version3.7.0Set at install and locked afterwards
Node Count33, 5, 7, or 9
Memory Limit per Node2Gi2Gi to 128Gi
Memory Request per Node1GiFree-form quantity
CPU Limit per Node1000m500m to 48000m
CPU Request per Node100mFree-form quantity
Java Heap Size1gAround 50% of the memory limit

All nodes belong to a single pool and carry the cluster_manager, data, and ingest roles. The operator requires at least three cluster-manager nodes, which is why three is the minimum node count. The heap value is applied as -Xms and -Xmx, so the remainder of the memory limit is available to the filesystem cache.

Edka sets a topology spread constraint with maxSkew: 1 on kubernetes.io/hostname and whenUnsatisfiable: DoNotSchedule, so node pods spread across hosts rather than stacking on one.

SecretPurposeHandling
Admin PasswordPassword for the built-in admin userGenerated at install, 24 characters with a special character, minimum 8; stored in the opensearch-admin-credentials Secret
Dashboards Cookie SecretEncrypts OpenSearch Dashboards browser sessionsGenerated at install, 48 characters, minimum 32; stored in the opensearch-dashboards-cookie Secret and locked after install

Both Secrets live in the opensearch-system namespace. The admin credentials Secret carries the username admin and the generated password. Leaving either field blank during a configuration update keeps the current value, which Edka reads back from the Secret in the cluster.

Admin Password is retrievable from the app configuration. Revealing it follows your organization’s sensitive-action policy and requires passkey step-up when enforcement is enabled. Keep the Dashboards cookie secret stable for the lifetime of the instance; changing it invalidates existing browser sessions.

Dashboards is enabled by default and runs as a single replica on port 5601, at the same version as the cluster. Edka enables the data source, workspace, and explore features in its configuration and sets a session cookie name scoped to this app instance.

SettingDefaultOptions
Dashboards Memory Limit1Gi1Gi, 2Gi, 4Gi
Dashboards Memory Request512MiFree-form quantity
Dashboards CPU Limit1000m500m to 4000m
Dashboards CPU Request100mFree-form quantity

Turning Enable Dashboards off removes the Dashboards workload and hides the Dashboards resource and Gateway exposure fields.

SettingDefaultNote
Storage Size per Node50Gi10Gi to 1000Gi, one ReadWriteOnce volume per node
Storage Classhcloud-volumesSelected from the cluster storage classes, fixed at install

Storage Size per Node stays editable after installation, so you can request larger volumes later. Storage Class is locked once the app is installed.

Exposure is off by default, which leaves only the in-cluster API endpoint published. To publish Dashboards:

  1. Enable Expose Dashboards via Gateway.
  2. Select a Traffic Class. It must be an Envoy Gateway traffic class.
  3. Enter a Dashboards Hostname, for example opensearch.example.com.
  4. Enable Request Gateway TLS Certificate when no matching wildcard Gateway certificate is available, so Edka uses its Gateway HTTP-01 issuer.

Edka creates an HTTPRoute in opensearch-system that attaches the hostname to the selected Gateway and forwards to the opensearch-dashboards Service on port 5601, with a 120 second request and backend request timeout. The hostname must not already be published by another app in the cluster.

See Domains and TLS for hostname and certificate setup.

After installation, Edka shows:

  • OpenSearch API: https://opensearch.opensearch-system.svc.cluster.local:9200
  • OpenSearch Dashboards: the public https:// URL, when Dashboards is enabled and exposed through a Gateway

The app view surfaces the operator-created workloads in opensearch-system: opensearch-nodes, opensearch-bootstrap, opensearch-securityconfig-update, and opensearch-dashboards, plus the opensearch and opensearch-dashboards Services.

OpenSearch does not offer chart auto-updates. Version is chosen at install and cannot be changed from the app configuration afterwards.

The editable settings, node count, per-node resources, JVM heap, storage size, Dashboards options, and Gateway exposure, can be changed later from the app configuration. Edka applies them to the OpenSearchCluster resource and the operator rolls the change out.

cert-manager and the OpenSearch Kubernetes Operator are add-ons. Manage their versions from Clusters > Add-ons.

SymptomCheck
OpenSearch Dashboards exposure requires a Gateway API traffic classSelect an Envoy Gateway traffic class in Traffic Class, or turn off Expose Dashboards via Gateway
App is already installed in this clusterOpenSearch allows one instance per cluster; uninstall the existing instance before installing another one
Hostname is already used by another appChoose a Dashboards Hostname that no other app in the cluster publishes
Admin password is rejectedAdmin Password must contain at least 8 characters
Dashboards cookie secret is rejectedDashboards Cookie Secret must contain at least 32 characters
Install stops while installing dependenciescert-manager and the OpenSearch Kubernetes Operator must install successfully before the app
Node pods stay PendingConfirm the storage class can bind one ReadWriteOnce volume per node and that enough hosts exist for the kubernetes.io/hostname spread constraint
Node pods restart under loadKeep Java Heap Size at roughly half of Memory Limit per Node
Dashboards stays unreadyConfirm the OpenSearch nodes are ready, then review Logs for the opensearch-dashboards workload
Dashboards sign-in failsSign in as admin and reveal the stored Admin Password from the app configuration