Kubernetes
Esthesis CORE can be deployed on Kubernetes using the publicly available Helm charts. The Helm charts are available on the [TBC].
Esthesis CORE comes with a variety of different Helm charts. Some of the provided Helm charts pertain to mandatory components, while others are optional. During the installation you can choose which components you want to install by enabling the relevant configuration options. You can also choose to use already existing resources, such as a database or a message broker, instead of the ones provided in the Helm charts.
Please note that Helm charts come with reasonable defaults; we strongly advise to review them, so you can customize them to your needs.
Requirements
A Kubernetes cluster with a minimum of 3 nodes and support for Load Balancer service types as well as Ingress support (you can, optionally, install an nginx ingress controller using this chart).
Configuration parameters
The following parameters can be defined from variables contained on vaules.yaml during installation:
General
timezoneThe container's timezone to set (note, some containers do not respect this setting).
Default:Europe/AthensesthesisLogLevelThe log level to be used for the esthesis components (i.e. does not affect third-party components installed by the Helm chart).
Default:WARNimagePullSecretThe name of the Kubernetes Secret to use when pulling container images.
ingressClassNameThe name of the ingress class to use for ingress rules.
Accounts
esthesisAdminUsernameThe username of the Esthesis administrator.
Default:esthesis-adminesthesisAdminPasswordThe password for the Esthesis administrator.
Default:esthesis-adminesthesisSystemUsernameThe system-level user for Esthesis services and third-party components.
Default:esthesis-systemesthesisSystemPasswordThe password for the system-level user.
Default:esthesis-systemesthesisKubernetesServiceCreateRBACWhether to create Kubernetes RBAC resources automatically.
Default:true
Keycloak
keycloak.enabledWhether to deploy Keycloak.
Default:truekeycloak.ingress.hostnameThe external hostname for Keycloak.
keycloak.certManager.clusterIssuerCluster-wide Cert Manager issuer name. Mutually exclusive with
keycloak.certManager.issuer.keycloak.certManager.issuerNamespace-scoped Cert Manager issuer name. Mutually exclusive with
keycloak.certManager.clusterIssuer.
MongoDB
mongodb.enabledWhether to deploy MongoDB.
Default:truemongodb.urlClusterInternal MongoDB connection URL for Esthesis components.
Default:mongodb://mongodb:27017mongodb.databaseName of the MongoDB database.
Default:esthesiscoremongodb.usernameMongoDB user (usually inherits from
esthesisSystemUsername).mongodb.passwordMongoDB password (usually inherits from
esthesisSystemPassword).
MongoDB
mongodb.enabledWhether to deploy MongoDB.
Default:truemongodb.urlClusterInternal MongoDB connection URL for Esthesis components.
Default:mongodb://mongodb:27017mongodb.databaseName of the MongoDB database.
Default:esthesiscoremongodb.usernameMongoDB user (usually inherits from
esthesisSystemUsername).mongodb.passwordMongoDB password (usually inherits from
esthesisSystemPassword).
NGINX Ingress
ingressNginx.enabledWhether to install the nginx ingress controller.
Default:falseingressNginx.sslCertArnARN of the wildcard certificate to use.
User Interface
esthesisHostnameExternal hostname for Esthesis UI.
esthesisUi.logoutUrlPath to redirect users to after logout.
Default:/logoutesthesisUi.certManager.clusterIssuerCert Manager cluster-wide issuer for UI TLS.
esthesisUi.certManager.issuerCert Manager namespace-scoped issuer for UI TLS.
Redis
redis.enabledWhether to deploy Redis.
Default:trueredis.hostsList of Redis endpoints.
Default:redis-master:6379/0
Mosquitto
mosquitto.enabledWhether to deploy Mosquitto.
Default:truemosquitto.mutualTlsEnable mutual TLS for Mosquitto.
Default:falsemosquitto.superuserSuper-user account (should match certificate CN when TLS is enabled).
Default:esthesismosquitto.caCertBase64-encoded CA certificate.
mosquitto.serverCertBase64-encoded Mosquitto server certificate.
mosquitto.serverKeyBase64-encoded Mosquitto private key.
mosquitto.serviceTypeKubernetes service type to expose Mosquitto.
Default:ClusterIP
InfluxDB
influxdb.enabledWhether to deploy InfluxDB.
Default:trueinfluxdb.sizePersistent volume size for InfluxDB.
Default:32Gi
Kafka
kafka.enabledWhether to deploy Kafka.
Default:truekafka.bootstrapServersList of Kafka bootstrap servers.
Default:kafka:9092
Camunda
camunda.enabledWhether to deploy Camunda.
Default:truecamunda.gatewayUrlClusterInternal gateway URL for Camunda Zeebe.
Default:camunda-zeebe-gateway:26500
Installation
esthesis CORE comes in two Helm charts, one installing all the required dependencies and another one installing the application components. You can enable/disable which specific dependencies you want to install by setting the corresponding charts_enabled.<service> parameter to true or false. Do note that although the provided dependencies are adequate to have esthesis CORE up and running, you might want to tune their properties or replace them altogether with your own resources to support your specific production use case.
Environment variables
The following list is a starting point of variables on vaulues.yaml to set before you proceed on both helm charts with the installation, you need to amend them to match your own environment:
Esthesis-core values.yaml:
Esthesis-core-deps values.yaml:
Supporting infrastructure
Add the Esthesis Helm repository:
helm repo add esthesis https://esthes.is/helm helm repo updateInstall the supporting dependencies (e.g. Keycloak, MongoDB, Redis, etc.):
helm install esthesis-core-deps esthesis/esthesis-core-deps \ --namespace <your-namespace> \ --create-namespace \ -f values-deps.yamlReplace
values-deps.yamlwith your customized values file if needed.
Application
Install the main Esthesis CORE application components:
helm install esthesis-core esthesis/esthesis-core \ --namespace <your-namespace> \ -f values.yamlAgain, replace
values.yamlwith your specific Helm values file.
Notes
You need to access the UI via HTTPS, accessing it via HTTP will not work.
The UI is exposed under the domain you specified in the environmental variable
esthesisHostname.If you are using a self-signed certificate which is not imported into your local system, before trying to log in into the application you need to visit the Keycloak URL first and accept the certificate. Otherwise, the login will fail.
esthesis-core-srv-kubernetesneeds to be able to list all namespaces as well as schedule pods via deployments, configure HPA, etc. A Service Accountesthesis-core-srv-kubernetesis automatically created and configured with the necessary permissions. If you do not have the necessary permissions to properly configure this Service Account during the installation of the Helm chart, you can disable the automatic creation of the Service Account by setting theesthesisKubernetesServiceCreateRBACvariable from esthesis-core helm chart tofalseand create the Service Account manually. The resources that need to be manually created can be found in esthesis-core-srv-kubernetes and need to be available and properly configured before the installation of the Helm chart.
Cert Manager integration
If you have Cert Manager installed in your cluster, you can use it to automatically generate and renew certificates for esthesis UI and Keycloak. To do so, you need to set the following environmental variables:
If you are using namespace scoped issuers, you can alternatively specify:
Make sure you specify only one of the two variants, otherwise the installation will fail. Do not forget to change letsencrypt-prod to the value of your own issuer.
Wildcard Certificate integration
If you have a wildcard certificate installed on you cluster as a secret for your domain, and you want the included ingress-nginx controller to use it, you will need to set the following environmental variables:
Do not forget to change 192.168.1.60 to your external load balancer IP and wildcard-tls to the name of your secret.