This guide covers deployment options for the Operator Platform.
This quick start guide will guide you through the initial steps to deploy and manage the Operator Platform using the provided Ansible automation framework.
## "Single OOP Deployment (Kind)"
First is recommended to start with a clean VM running Ubuntu 24.04. Then, add the VM details to the inventory file and configure SSH access. So in the `inventory/hosts.yml` file, add your VM's IP address and SSH user credentials:
This is the fastest way to get a full-ish Operator Platform environment running. It deploys a lightweight Kubernetes cluster (using [Kind](https://kind.sigs.k8s.io/)) on a single machine and installs all components automatically. It is ideal for quickly testing the OOP.
### 1. Prepare The Inventory
Add your target machine (e.g., a fresh Ubuntu VM) to `ansible/inventory/hosts.yml`, or even your laptop for a quick test.
Also, make sure the host `your_vm_name` is included in the appropriate group or children section:
```yaml
children:
kind_cluster:
hosts:
your_vm_name:
```
Then, you can proceed with running the Ansible playbooks to deploy and manage the Operator Platform on your VM.
### 2. Deploy Everything
## Install Dependencies
Run the "Single OOP" scenario playbook. This handles the needded python dependencies, installs docker if not installed already, creates a kubernetes cluster, and installs a minimal number of OOP components. Specifically, this playbook install the following modules:
* Federation Manager
* "Remote" Federation Manager (this acts as it was the Federation Manager of another OP)
* Artefact Manager
* Artefact Registry (Harbor as the artefact registry)
* A Dashboard. The dashboard is very convenient to just access the services with a single click, removing the need to manually enter the IPs into the browser:
* Edge Cloud Platfom: Installs lite2edge, a lightweight orchestrator as edge cloud platform.
!!! note
Make sure you are in the `ansible` directory. And virtual env is activated:
Once the playbook finishes, access the **Dashboard** to see all services:
Once dependencies are installed, then we can deploy the cluster.
***URL:**`http://<VM_IP>:30088`
## Deploy The Cluster

Now let's deploy the kind cluster with 3 nodes: 1 control plane and 2 workers.
=== "Prod-ready / Custom Deployment"
!!! info
This is the default configuration with 1 control plane and 2 worker nodes. You can customize the number of nodes in the `group_vars/all.yml` file by modifying the `worker_nodes` variable:
For production environments or custom setups, you should execute the deployment steps individually. This allows for greater control over each component and is suitable for multi-node clusters or integrating with existing infrastructure.
This is playbook does many workarounds to be able to deploy i2edge on the cluster such as rsync the code to the VM and build the image and then add it to the cluster. This is ugly and needs to be fixed, but works for now.
We provide a playbook to deploy a Harbor instance to work as the artefact registry for the operator platform. To deploy Harbor run the following playbook:
If everything went fine, harbor should be accessible directly in http://VM_IP:30002.
!!! info
Default Harbor credentials are: `admin` / `Harbor12345`. However those can be changed before the playbook run in the `ansible/roles/harbor/defaults/main.yml` file.
If everything went fine, federation manager API should be accessible directly in http://VM_IP:30990.
## Deploy a Dashboard
Since we are deploying many services, it comes very handy to have a dashboard to monitor them all in one place. So we provide a playbook to deploy the Operator Platform Dashboard. It will be deployed using Homer, a static homepage for your server. The dashboard will be accessible in http://VM_IP:30088.
To handle the requirement that "Artifact Manager" could be Harbor, JFrog, or a custom tool, we can use a **Recipe** that selects the component based on a variable.
For the Federation Manager (or any component) where you might want one instance in production but two in testing (in the same cluster), we can design the role to accept a `namespace` and `release_name` parameter.