# OvalEdge App Deployment using Helm Chart

This article provides step-by-step instructions to deploy the OvalEdge application on a Kubernetes cluster using Helm charts.

### Software Requirements

* **Kubectl CLI** – Install and configure to connect to the Kubernetes cluster.
* **Helm** – Install Helm to use the Helm chart package provided by the OvalEdge team.
* **Helm Chart** – A collection of YAML templates that define Kubernetes resources (pods, services, deployments, etc.).

{% hint style="info" %}
Helm uses a packaging format called charts, which is a collection of YAML templates describing Kubernetes resources.
{% endhint %}

### Prerequisites

#### Kubernetes Cluster Access

* Admin access to the target Kubernetes cluster (e.g., EKS, On-Prem).
* Proper kubeconfig context configured.

#### Helm Chart Package

* Obtain the Helm chart package from the OvalEdge team.
* Optionally, store it in your organization’s GitHub or Bitbucket repository.

#### Database Requirements

* Pre-configured AWS RDS or Azure Database for MySQL (v8.x).
* Required base schemas and tables loaded.

#### Elasticsearch Configuration

* If using a VM: follow the *Elasticsearch on Linux VM* guide.
* If using containers: follow the *Elasticsearch container setup* guide.

#### EFS Configuration

* If using EFS, refer to the OvalEdge EFS integration guide for volume mount setup.

### Helm Chart Configuration

1. Clone or download the Helm chart repository.
2. Extract the OvalEdge Helm chart package and open it in an IDE (e.g., Visual Studio Code).
3. Update the **values.yaml** file with custom settings.\
   ![](https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FuY5pyXZyFJvzyg0LG4pT%2Fimage.png?alt=media\&token=dfe99a6f-4913-4745-be3b-0b4b4723c2ee)

#### Autoscaling Configuration

Update the following parameters based on cluster size and workload requirements:

```yaml
jobPodReplicaCount: <number-of-job-pods>
jobPodMaximumReplicaCount: <max-job-pods>
userPodReplicaCount: <number-of-ui-pods>
userPodMaximumReplicaCount: <max-ui-pods>
```

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FhulUTvYRLHfHeXCsz2Fn%2Fimage.png?alt=media&#x26;token=0a0d65e3-5efc-4c34-b365-326955a31f94" alt="" width="563"><figcaption></figcaption></figure>

#### Docker Image Tag

```yaml
tag: <image-tag>   # Provided by OvalEdge
```

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FLBLD8Pd3wW2RHmTfsWU7%2Fimage.png?alt=media&#x26;token=7449029c-90d5-499d-b582-00a1f71a2a0e" alt=""><figcaption></figcaption></figure>

#### Database Configuration

```yaml
db:
  endpoint: <db-endpoint>
  username: <db-username>
  password: <db-password>   # Use Kubernetes secrets for production
```

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2F946INc1ZVaWJguIphN4O%2Fimage.png?alt=media&#x26;token=4771d101-1e21-483e-9073-b653f4d251d8" alt=""><figcaption></figcaption></figure>

#### Elasticsearch Configuration

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2Fyx5GwgARug3LNINLWxBt%2Fimage.png?alt=media&#x26;token=cf32a5d9-3671-443a-9077-ea2f33d97434" alt=""><figcaption></figcaption></figure>

```yaml
elasticsearch:
  host: <es-host>
  username: <es-username>
  password: <es-password>
```

> **Tip:** Use Kubernetes secrets to store credentials securely.

#### Other Configurations

Ensure the following YAML templates are reviewed and aligned with your environment:

* **ui-deployment.yaml**
* **job-deployment.yaml**
* **ConfigMaps and Secrets** (if applicable)
* **Ingress or LoadBalancer settings**

### Deploy OvalEdge

1. Open a terminal with **kubectl** and **helm** installed.
2. **Connect to the Kubernetes cluster:**

   ```bash
   aws eks update-kubeconfig --name <cluster-name> --region <region>
   ```
3. **Create a namespace (Optional):**

   ```bash
   kubectl create namespace <namespace-name>
   ```

   > **Note:** For multiple environments (e.g., dev, test, prod), create separate namespaces and deploy Helm charts accordingly.
4. **Install AWS CLI (if not already installed):**

   ```bash
   curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
   unzip awscliv2.zip
   sudo ./aws/install
   ```

   Configure AWS credentials with **Access Key** and **Secret Key**.
5. **Install the Helm chart:**

   ```bash
   helm install <release-name> -f values.yaml -n <namespace-name> .
   ```
6. **Verify the deployment:**

   ```bash
   kubectl get pods -n <namespace-name>
   kubectl get svc -n <namespace-name>
   ```

   \
   Look for the **LoadBalancer** or **Ingress external URL** (e.g., `<random-string>.<region>.elb.amazonaws.com:8080`).

   <figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FS4qYfEYoZ8ax2WYTyPTO%2Fimage.png?alt=media&#x26;token=bf875d06-4740-480e-ad24-04819a226b4f" alt=""><figcaption></figcaption></figure>
7. Use the URL to open the OvalEdge license activation page.
8. Provide the external IP to access the OvalEdge application.

   <figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FpDQrQPptBHc3JVdLYlin%2Fimage.png?alt=media&#x26;token=4ec133a3-b5c6-4073-9693-05a1800c8e08" alt=""><figcaption></figcaption></figure>

### Post-Installation Steps

#### DNS & SSL Configuration

* Map the LoadBalancer URL to a DNS record (e.g., `ovaledge.company.com`) in Route53 or your DNS provider.

  <figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FQbY3wJ7BejOXRcfGyKkV%2Fimage.png?alt=media&#x26;token=52f6cb0f-7e34-4f2f-915a-fe52f0751844" alt=""><figcaption></figcaption></figure>
* Configure SSL certificates using:

  <figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FwGWBnLdajQZsoB23YQIE%2Fimage.png?alt=media&#x26;token=478c7da5-9a28-4601-8cd7-cb1da81cd016" alt=""><figcaption></figcaption></figure>

  * Kubernetes Ingress with TLS (Cert-Manager or ACM).
  * [Cert-Manager integration in Helm charts](https://docs.google.com/document/d/1vd_mrYgwCTrlqMwfgYDW8G8iRO2ixpxB4U81hn1XNvI/edit?tab=t.0).

#### Helm Upgrade & Uninstall Commands

* **Upgrade:**

  ```bash
  helm upgrade <release-name> -f values.yaml
  ```
* **Uninstall:**

  ```bash
  helm uninstall <release-name> -n <namespace-name>
  ```

### Additional Recommendations

* Set resource limits and requests in **values.yaml**.
* Enable **liveness** and **readiness** probes for health checks.

***

Copyright © 2025, OvalEdge LLC, Peachtree Corners, GA, USA.
