# mimir

The Warehouse Platform

## Architecture

![Deploy Topology](assets/deploy-topology.png)

Required Dependencies:

- A K8s cluster
- TiDB/MySQL
- S3 Bucket

Optional Dependencies
- Bastion Machine

## Deployment steps

### Clone Code Base

```sh
git clone git@github.com:pingcap/mimir.git
```

### Build Mimir Service

```sh
docker build . --tag <mimir-service-image>
```

The `<mimir-service-image>` is the any docker image tag you like it to be, an example is `510387698298.dkr.ecr.us-east-2.amazonaws.com/autopilot/mimir/server:1.0` if you use ECR as image registry.

## Build Flink Image

```sh
cd engine/flink
docker build . --tag <flink-image>
```

The `<flink-image>` is the any docker image tag you like it to be, an example is `510387698298.dkr.ecr.us-east-2.amazonaws.com/autopilot/mimir/flink:1.0` if you use ECR as image registry.

## Push Images to Registry

```sh
docker push <mimir-service-image>
docker push <flink-image>
```

## Create Namespace for Mimir

```sh
kubectl create namespace mimir
```


## Deploy Role for Mimir Service

```sh
kubectl apply -f deploy/role_mimir_api_server.yaml
kubectl apply -f deploy/rolebinding_mimir_api_server.yaml
```

## Deploy Mimir Service Config

Edit `deploy/config_mimir_api_server.yaml`, do the following things:

- modify `mysql.dsn` to connect the TiDB server
- modify `flink.image` to `<flink-image>` in the step `Build Flink Image`

Deploy the config:

```sh
kubectl apply -f deploy/config_mimir_api_server.yaml
```

## Deploy Mimir Service

Edit `deploy/mimir-deployment.yaml`, modify the imange of `mimir-api-server` container to `<mimir-service-image>`

Then deploy the service:

```sh
kubectl apply -f deploy/mimir-deployment.yaml
```

## Create Service for Mimir Service

```sh
kubectl apply -f deploy/svc_mimir_api_server.yaml
```