> For the complete documentation index, see [llms.txt](https://docs.ellipsis-drive.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ellipsis-drive.com/installation/system-architecture-and-configuration/kubernetes-deployment/getting-started.md).

# Getting started

Before you begin, you must prepare a machine according to the [Prerequisites](/installation/system-architecture-and-configuration/kubernetes-deployment/prerequisites.md).&#x20;

{% hint style="info" %}
We recommend using a fresh Docker container for your work with Ellipsis Drive Kubernetes
{% endhint %}

Below is a step by step guide to deploy a standard Ellipsis Drive Cluster on the cloud provider of your choice:

1. Installing the EDK CLI
2. Preparing the config
3. Creating the cluster
4. Linking URL endpoints
5. Verifying that everything works

#### 1. Installing the EDK CLI

Download the desired release of the EDK CLI from the [GitHub page](https://github.com/ellipsis-drive/edk-cli). Inside the folder of the release, you can use the packages.json to install the node nodules needed by the script.

You can also use the script below to install the latest version of EDK CLI in one go.

```
tag=$(curl -s https://api.github.com/repos/ellipsis-drive/edk-cli/releases/latest | grep -m1 '"tag_name"' | cut -d '"' -f4)
wget https://github.com/ellipsis-drive/edk-cli/archive/refs/tags/$tag.zip
unzip $tag.zip
npm install --prefix=./edk-cli-${tag:1}/
```

The *edk* file inside the directory is the main entry point of the EDK CLI. You can create terminal shortcuts for this file so you can run it globally. For simplicity, the rest of this documentation assumes that the active directory of your current terminal session is inside the unzipped folder by running the following command directly after the previous ones:

```
cd edk-cli-${tag:1}
```

#### 2. Preparing the config

Inside the unzipped folder, you will find a config.jsonc. This file will be used during the creation of your cluster to customize it. **It is important that you fill in all the fields of this file before proceeding with the other steps.** See the [config.jsonc](/installation/system-architecture-and-configuration/kubernetes-deployment/config.jsonc.md) page for detailed information about each field.

You can use the *configure* command of the EDK CLI to randomly generate and fill in the password and secret fields.&#x20;

```
./edk configure
```

You are free to further edit the fields of the config.jsonc after running this command, including the generated passwords and secrets.

You can use the *configure validate* command to see whether your configuration&#x20;

```
./edk configure validate
```

#### 3. Creating the cluster

When you are ready with the configuration, run the *create* command of the EDK CLI.

```
./edk create
```

This will start the cluster creation process. This process can take up to 30 minutes. After the script terminates, it may take another few minutes before the cluster finishes the last setup tasks and stabilizes the nodes and pods.

#### 4. Linking URL endpoints

The cluster will have created ingress endpoints for the UI and the API. It will also have created certificates for the URLs you have filled in the config for both of them.&#x20;

Go to AWS Certificate Manager and follow the instructions there to verify the certificates.&#x20;

After verifying the certificates, run the command below:

```
kubectl get ingress
```

This should give you two entries. One is called *api-ingress* and the other one called *penguin-ingress*.

Create DNS records according to the following table:

<table><thead><tr><th width="124.449951171875">Type</th><th width="308.95001220703125">Host</th><th>Value</th></tr></thead><tbody><tr><td>CNAME</td><td>(apiUrl in config.jsonc)</td><td>(address of api-ingress)</td></tr><tr><td>CNAME</td><td>(frontendUrl in config.jsonc)</td><td>(address of penguin-ingress)</td></tr></tbody></table>

#### 5. Verifying that everything works

You can try visiting the frontEnd URL you have filled in config.jsonc to see whether the UI is in working order.

You can visit the apiUrl and adding /v3 behind the URL to see if the API gives a simple welcome message.
