/devspace

DevSpace makes it much easier to develop, deploy and debug applications for Kubernetes.

Primary LanguageGoApache License 2.0Apache-2.0

DevSpace Logo

WebsiteDocumentationSlack

Build Status Go Report Card Slack Tweet

DevSpace accelerates developing, deploying and debugging applications with Docker and Kubernetes.

How does it work?

Containerize any project in minutes

Initialize your project

devspace init

DevSpace uses smart defaults for many programming languages and frameworks to:

  1. Automatically create a Dockerfile for your app
  2. Add a highly customizable Helm chart to your project

If you already have a Dockerfile or a Helm chart, DevSpace.cli will ask you if you want to use them instead of the default files.

Customize Dockerfile and Kubernetes deployment:


Deploy containerized applications with ease

1. Create a Space

devspace create space my-app

If you are using DevSpace.cloud, you can create Spaces with a single command. Spaces are smart Kubernetes namespaces with:

  • Automatic allocation of a subdomain for each Space
  • Automatic RBAC configuration for better isolation of users
  • Resource auto-scaling within the configured limits
  • and much more...

If you do not want to use DevSpace.cloud, you will not be able to create Spaces. You can skip this step and deploy your application to a regular Kubernetes namespace using devspace deploy.

2. Deploy your application

devspace deploy

What does devspace deploy do?

  1. Builds, tags and pushes your Docker images
  2. Creates pull secrets for your image registries
  3. Deploys your project with the newest images

3. Access your application

After deploying, your application will run on a domain that is connected to your Space:

If you are not using DevSpace.cloud, you will need to manually configure a domain and an ingress.


Develop cloud-native software faster then ever

Develop in a production-like environment

devspace dev

With DevSpace, you can build and test your application directly inside Kubernetes. Thanks to our real-time code sync, you can even use hot reloading tools (e.g. nodemon) to refresh your running application without having to waste time on re-building and re-deploying your application every time you change your code. With DevSpace, your containers are updated in real-time without any delay.

Learn more about development with DevSpace:


Debug deployments without hassle

Speed up finding and solving issues

devspace analyze

DevSpace automatically analyzes your deployments, identifies potential issues and helps you resolve them:

  • Identify reasons for image pull failure
  • View log snapshots of crashed containers
  • Debug networking issues (e.g. misconfigured services)

Learn more about development with DevSpace:


Getting started with DevSpace

1. Install DevSpace.cli

via Windows Powershell
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]'Tls,Tls11,Tls12'
md -Force "$Env:Programfiles\devspace"
wget -UseBasicParsing ((Invoke-WebRequest -URI "https://api.github.com/repos/covexo/devspace/releases/latest" -UseBasicParsing).Content -replace ".*`"(https://github.com[^`"]*devspace-windows-amd64.exe)`".*","`$1") -o $Env:Programfiles\devspace\devspace.exe
& "$Env:Programfiles\devspace\devspace.exe" "install"
via Mac Terminal
curl -s -H "Accept: application/json" "https://api.github.com/repos/covexo/devspace/releases/latest" | sed -nE 's!.*"(https://github.com[^"]*devspace-darwin-amd64)".*!\1!p' | xargs -n 1 curl -L -o devspace && chmod +x devspace
sudo mv devspace /usr/local/bin
via Linux Bash
curl -s -H "Accept: application/json" "https://api.github.com/repos/covexo/devspace/releases/latest" | sed -nE 's!.*"(https://github.com[^"]*devspace-linux-amd64)".*!\1!p' | xargs -n 1 curl -L -o devspace && chmod +x devspace
sudo mv devspace /usr/local/bin

2. Install Docker

DevSpace uses Docker to build container images, so you need Docker on your local computer. If you do not have Docker installed yet, you can download the latest stable releases here:

3. Containerize your application

Run this command within your project:

devspace init
Don't have a project to test DevSpace with? Check out our example project.
git clone https://github.com/devspace-cloud/devspace-quickstart-nodejs

What does devspace init do?
DevSpace.cli will automatically detect your programming language and ask for the ports your application is listening on. It will then create an Helm chart and a Dockerfile within your project, if you do not already have one.

4. Create a Space

This command will create and configure a Kubernetes namespace for you:

devspace create space my-app

If you are not using DevSpace.cloud, you will not be able to create Spaces. You can skip this step and deploy your application to a regular Kubernetes namespace using devspace deploy.

5. Deploy your application

Deploy your application to your newly created Space:

devspace deploy

What's next?


Architecture

DevSpace Architecture

DevSpace.cli • swiss army knife for Kubernetes

DevSpace.cli is an open-source command-line tool that provides everything you need to develop, deploy and debug applications with Docker and Kubernetes.

You can either use DevSpace.cli as standalone solution for your self-managed Kubernetes namespaces or in combination with DevSpace.cloud.

DevSpace.cloud • management platform for Spaces

DevSpace.cloud is a developer platform for Kubernetes that lets you create and manage Spaces via DevSpace.cli or GUI.

The Spaces you create with DevSpace.cloud either run on DevSpace.host or on your own Kubernetes clusters after connecting them to the platform.

DevSpace.host • hosting service for Spaces

DevSpace.host is a hosting service that lets you create Spaces instead of entire Kubernetes clusters. Because you only pay for the resources used for creating your containers, it is much cheaper than having to pay for an entire Kubernetes cluster, especially for small and medium size workloads.

DevSpace.host runs on top of Google Cloud, AWS and Azure clusters and is optimized for reliability and scalability.


Where are my apps running?

DevSpace.cli is a client-only command-line tool which lets you develop, deploy and debug applications in:

Hosted Spaces • hosted on DevSpace.host

Hosted Spaces run on DevSpace.host. You will automatically get a .devspace.host subdomain for your Space. Using DevSpace.host automatically means that you are using DevSpace.cloud which manages all Spaces running on top of DevSpace.host.

Users of DevSpace.host can create one Space with limited resources for free. To enable resource scaling, you have to verify your account by adding payment information. With a verified account, you can use more cloud resources for your containers and only pay the resources that are actually needed to create and run your containers.

Self-hosted Spaces • hosted on your clusters & managed by DevSpace.cloud

Self-hosted Spaces run on your own Kubernetes cluster which can be hosted anywhere you like (e.g. managed public cloud, private cloud). Self-hosted Spaces are different from self-managed Spaces because self-hosted Spaces are still managed by DevSpace.cloud.

To use self-hosted Spaces, simply connect your own Kubernetes cluster as external cluster in DevSpace.cloud. You will then be able to use DevSpace.cloud and create self-hosted Spaces which are not running on DevSpace.host but on your own Kubernetes clusters.

Self-managed namespaces • hosted & managed by yourself

Self-managed namespaces are hosted on your own Kubernetes clusters. Unlike Spaces, regular Kubernetes namespaces are not managed by DevSpace.cloud. That means that you will have to take care of the following things manually:

  • enforce resource limits
  • configure secure user permissions
  • isolate namespaces of different users
  • connect domains and configure ingresses
  • install and manage basic cluster services (e.g. ingress controller, cert-manager for TLS, monitoring and log aggregation tools)

Hosted Spaces Self-hosted Spaces Self-managed Namespaces
DevSpace.cli
managed with DevSpace.cloud
hosted on DevSpace.host
What management effort do I have? No admin effort.
DevSpace manages everything.
You create and connect the cluster.
DevSpace manages users and Spaces on top of it.
You manage everything.
You manually create, secure and maintain cluster, users and namespaces

Because you can fairly easy switch between the three modes uf using DevSpace, it generally makes sense to start with Hosted Spaces and switch to one of the other modes later on.


Contributing

Help us make DevSpace.cli the best tool for developing, deploying and debugging Kubernetes apps.

Reporting Issues

If you find a bug while working with the DevSpace.cli, please open an issue on GitHub and let us know what went wrong. We will try to fix it as quickly as we can.

Feedback & Feature Requests

You are more than welcome to open issues in this project to:

Contributing Code

This project is mainly written in Golang. If you want to contribute code:

  1. Ensure you are running golang version 1.11.4 or greater for go module support
  2. Set the following environment variables:
    GO111MODULE=on
    GOFLAGS=-mod=vendor
    
  3. Check-out the project: git clone https://github.com/devspace-cloud/devspace && cd devspace
  4. Run go clean -modcache
  5. Run go mod tidy
  6. Run go mod vendor
  7. Make changes to the code
  8. Build the project, e.g. via go build -o devspace.exe
  9. Evaluate and test your changes ./devspace [SOME_COMMAND]

See Contributing Guideslines for more information.


FAQ

Do I need a Kubernetes cluster to use DevSpace?

No. You can simply use Hosted Spaces which run on top of DevSpace.host and which are fully managed by DevSpace.cloud.

Can I use DevSpace with my existing Kubernetes clusters?

Yes. You have two options:

  1. Connect your existing Kubernetes clusters to DevSpace.cloud as external clusters. DevSpace.cloud will then be able to create and manage users and Spaces on top of your Kubernetes clusters.
  2. You just use DevSpace.cli without DevSpace.cloud. That means that you manually need to:
    • enforce resource limits
    • configure secure user permissions
    • isolate namespaces of different users
    • connect domains and configure ingresses
    • install and manage basic cluster services (e.g. ingress controller, cert-manager for TLS, monitoring and log aggregation tools)
Do I need to be a Kubernetes expert to use DevSpace?

No. Altough DevSpace provides a lot of advanced tooling for Kubernetes experts, it is optimized for developer experience which makes it especially easy to use for Kubernetes beginners.

What is a Space?

Spaces are smart Kubernetes namespaces which provide the following features:

  • Automatic provisioning via devspace create space [SPACE_NAME]
  • Automatic allocation of a subdomain for each Space, e.g. my-app.devspace.host
  • Automatic RBAC configuration for better isolation of users
  • Automatic resource limit configuration and enforcement
  • Resource auto-scaling within the configured limits
  • Smart analysis of issues within your Space via devspace analyze
What is DevSpace.cli?

DevSpace.cli is an open-source command-line tool that provides everything you need to develop, deploy and debug applications with Docker and Kubernetes.

You can either use DevSpace.cli as standalone solution for your self-managed Kubernetes namespaces or in combination with DevSpace.cloud.

What is DevSpace.cloud?

DevSpace.cloud is a developer platform for Kubernetes that lets you create and manage Spaces via DevSpace.cli or GUI.

The Spaces you create with DevSpace.cloud either run on DevSpace.host or on your own Kubernetes clusters after connecting them to the platform.

What is DevSpace.host?

DevSpace.host is a hosting service that lets you create Spaces instead of entire Kubernetes clusters. Because you only pay for the resources used for creating your containers, it is much cheaper than having to pay for an entire Kubernetes cluster, especially for small and medium size workloads.

DevSpace.host runs on top of Google Cloud, AWS and Azure clusters and is optimized for reliability and scalability.

What is a Helm chart?

Helm is the package manager for Kubernetes. Packages in Helm are called Helm charts.

Learn more about Helm charts


License

You can use the DevSpace.cli for any private or commercial projects because it is licensed under the Apache 2.0 open source license.