Symbiosis: The cloud platform for Kubernetes
Tags: kubernetes, devops, cloud
Published: 2022-11-29 13:15:03

As an engineer, you are faced with many decisions when building a Kubernetes environment.

- How do I set up GitOps & CI/CD?
- How do I create application delivery pipelines?
- How do I keep costs down?
- How do I quickly boot new prod-like environments?
- How can I set up self-service for engineering teams?
- How to avoid maintaining docker-compose files for local development or testing?

For years I've been configuring and maintaining tens of tools on-top of EKS to create an efficient and automated setup for day-2 operations and simplify deployment of new services.

But, maintaining a complicated k8s stack can take considerable effort as infrastructure evolves and changes over time. Moreover, the high costs and sluggishness of EKS or GKE make it harder to use Kubernetes outside of running prod and staging environments.

[Symbiosis](https://symbiosis.host) is a managed Kubernetes service that plugs some of these holes to make it simple for DevOps to manage day-2 operations and for developers to build, test and deploy. 

**In this guide I will take you through how to create a k8s cluster and add your projects to Symbiosis.**

## Getting started

Install the CLI with `brew install symbiosis-cloud/tap/sym`.

Then login with `sym login` to authenticate to your Symbiosis team. Make sure you have an account set up already.

Creating your first k8s cluster is as easy as issuing `sym cluster create` -- or use our [terraform provider](https://registry.terraform.io/providers/symbiosis-cloud/symbiosis/latest/docs) for IaC.

The kube context is automatically installed, so you can access the cluster with `kubectl`, `k9s` and other tools that read the kubeconfig file.

**Well done!** You have a working k8s cluster. If you're new to k8s you might read our guide on how to [deploy a container](https://symbiosis.host/docs/quickstart/deploying-a-container) to your cluster.

Let's look into what else Symbiosis can offer!

## Projects

With Projects you can link your GitHub repositories to automatically create k8s environments for any occasion. For example in development, testing or as a staging environment in preparation for a release.

The core idea of Projects is to offer the simplicity of PaaS but without any opinionated or limiting abstractions.

Engineers should be able to easily build, test and release on prod-like environments without breaking a sweat.

Projects is currently in closed preview.

### The `sym.yaml` file

The `sym.yaml` file is placed at the root of your repositories and define the structure of your project.

```
deploy:
  helm:
  - chart: "./charts"
    values:
      vaultToken: "{{.secret.VAULT_TOKEN}}"
      replicas: 2
test:
- image: "backend:latest"
  command: "go test"
```

Define and customize your Helm charts or Kustomize manifests to have them wired to your project.

With the file in place we can instantly boot a cluster that runs our project with `sym run`.

Tests run inside your cluster and can be used to easily define complex end-to-end or integration tests that span across many services.

Running your test suite in the cluster with `sym test`.

### CI/CD

Pipelines are automatically created to build, test and ship your projects. In practice this means a preview cluster is created that will run your tests.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yrfy2irztipcs6m4akyx.png)


The preview environment can also be used to help with PR reviews or used to share progress with your team.

### GitOps

In the projects settings you can configure a production cluster. Merging a PR will automatically apply any changes to your prod environment.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4d8dyvztls3xh5e44nx2.png)

**Note:** Some users may need to use Symbiosis for dev and CI/CD but deploy to a cluster in AWS or Google Cloud. It's on our roadmap to add options to deploy to other providers.

## Don't lose sleep over k8s bills

Kubernetes shouldn't have to cost a fortune. At Symbiosis we offer compute at less than half of AWS or DigitalOcean.

We're also committed to making sure our platform is efficient. Did you know that EKS nodes reserve 1.6GiB of memory? Meaning a smaller cluster with 4GB nodes will waste at least 41% of all memory.

Cheap bandwidth reduce the friction when using multiple clouds and services. We're determined to combat vendor lock-in effects by charging $5 per TB of traffic, compared to $92 with AWS.

## Going further

To learn more about Symbiosis I recommend reading our [docs](https://symbiosis.host/docs).

Keep tabs on what we're doing over on [twitter](https://twitter.com/symbiosiscloud).

Happy coding! 🖤