Checklist for Kubernetes-Based Development
Tags: kubernetes, vcluster, devspace, loft
Published: 2022-06-16 18:45:47

By Harshit Mehndiratta

There is no denying the fact that Kubernetes has experienced widespread adoption in the last few years. Its automated deployment and scaling capabilities have made it easier and more convenient for developers to manage and develop advanced applications and services.

While Kubernetes continues to grow and provides more advanced tools for developers, keeping track of them is no easy task. Developers have to maintain various processes such as CI/CD, resource management, monitoring, and scaling. 

To make it easier, I’ve compiled a checklist that developers can follow to ensure easy, repeatable, and rapid development in Kubernetes. The checklist is defined using these areas:

1. Choosing development tools
2. Picking a dashboard for developers
3. Deciding on a Kubernetes environment for development
4. Monitoring and optimizing your setup

## Choosing Development Tools

Kubernetes development tools allow developers to focus more on the logic of an application by automating the deployment process and handling dev workflows. In this section, let's take a quick look at some of the most popular Kubernetes development tools and how they make application development in Kubernetes easy.

### [DevSpace](https://devspace.sh/)

![The DevSpace web site](https://loft.sh/blog/images/content/devloper-checklist-devspace.png)

With more than four thousand commits, two thousand stars, and forty-eight contributors on Github, DevSpace is one of the best Kubernetes development tools for enterprise clusters. Implemented as a single Go binary, DevSpace is easy to install and allows efficient in-cluster development while automating the build and deployment of container images across different environments such as dev, staging, and production. 

Developers can quickly spin up DevSpace in their local environment or remote clusters. The configuration is specified through the `devspace.yaml` file for deploying a specific infrastructure to suit organization needs.

DevSpace is known for its custom commands. They’re added to the command array variable within the `devspace.yaml` file and allow execution of custom Bash code when committing and pushing config to the code repository. 

### [Skaffold](https://skaffold.dev/)

![Skaffold web site](https://loft.sh/blog/images/content/developer-checklist-skaffold.png)

Built by Google, Skaffold is an open-source CLI tool that facilitates the deployment of CI/CD and dev workflows for Kubernetes applications. Skaffold implements a unified approach for managing automatic code deploys, creating configuration files, and deploying applications to local or remote clusters.

Developers can define how a particular application should be built and deployed in different environments. The [`skaffold.yml` file](https://skaffold.dev/docs/references/yaml/) is the main file for configuration. It accepts several parameters to detect source code changes and build errors in container images.

With Skaffold's extensible, pluggable architecture, developers can also switch deployment tools, depending on the development environments, and manage deployments based on configured policies. 

### [Tilt](https://tilt.dev/)

![Tilt web site](https://loft.sh/blog/images/content/developer-checklist-tilt.png)

Developed by Windmill Engineering, Tilt is an open-source UI-based tool that provides fast and repeatable development for Kubernetes applications. Tilt takes a UI-based approach as opposed to Kubernetes CLI development offerings to provide detailed feedback on the entire development process, from starting source code changes to updating container images to deployment errors.

Developers can also use the Tilt UI console to monitor pod logs and deployment history. Configuring Tilt requires a Tiltfile, which makes it easier to use features such as controlled updates, remote builds, and Helm charts.

## Choosing a Kubernetes Dashboard

A Kubernetes dashboard is a simple UI tool that allows seamless interaction with the Kubernetes cluster and resources inside it. While Kubernetes already has its official web-based UI, known as [the Kubernetes dashboard](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/), there are many other alternatives available that provide advanced features and a high-level overview of the cluster. 

### [Lens](https://k8slens.dev/)

![The Lens UI](https://loft.sh/blog/images/content/lens-metrics.png)

Developed by Kontena, Lens is an Electron-based desktop client (supports Windows, macOS, Linux) that easily connect to the local Kubernetes cluster to simplify resource management and configuration at scale. Lens, with its easy-to-use UI, provides the ability to see an overview of the used resources and last seen events within the Kubernetes cluster. 

Developers can also quickly filter out cluster labels and add custom configurations. As of right now, there is no pricing for Lens as the project became open source after the Mirantis acquisition. 

### [Octant](https://octant.dev/)

![](https://loft.sh/blog/images/content/octant-default-view.png)

Developed by VMware Tanzu, Octant is a web-based Kubernetes UI tool that aims to provide a fine-grained overview for applications running in your Kubernetes cluster. Developed as an open-source project, Octant supports Linux, Mac Windows, and even Raspberry Pi. The UI is straightforward and allows developers to easily search resources associated with a particular deployment or a service.

You can install Octant through a single command, and the tool automatically fetches configuration from Kube config to provide a well-organized summary of cluster resources. Plugins such as [Helm](https://github.com/bloodorangeio/octant-helm) or [Jenkins](https://github.com/jenkins-x/octant-jx) are also available to make pipeline visualization and package management simple.

### [kubenav](https://kubenav.io/)

kubenav is not the most mature Kubernetes UI project on the list, but its support for Android and iOS mobile clients for Kubernetes makes it different from all available offerings. It implements an Ionic framework that allows developers to easily manage and navigate cluster components through their mobile clients.

The features available (resource overview, state, and container management) are not implemented as well as in Lens and Octant, but they’re sufficient for organizations just starting on their Kubernetes journey. The Android and iOS versions of kubenav can be downloaded from the [Google Play](https://play.google.com/store/apps/details?id=io.kubenav.kubenav) or the [App Store](https://apps.apple.com/us/app/kubenav/id1494512160), while the desktop versions supporting macOS, Linux, and Windows are available on their [releases](https://github.com/kubenav/kubenav/releases) page.

## Choosing Between Local or Remote Kubernetes clusters

One crucial decision every organization has to make regarding Kubernetes development is developer access. Should the developers use local clusters for development or the remote clusters in the cloud? 

Let’s compare both approaches and their pros and cons.

### Local Cluster

A local cluster for developers provides direct contact with the Kubernetes environment. The cluster runs locally on their machines and provides them an affordable solution, then remote clusters to test and develop their workflows.

Various tools can help a developer easily spin up a local Kubernetes cluster.

#### [Kind](https://github.com/kubernetes-sigs/kind)

Kind (Kubernetes in Docker) is a tool that runs local Kubernetes clusters using Docker. Each node of a Kubernetes cluster runs as a Docker container and is designed primarily for local Kubernetes development.

With Kind, users can also create multi-node clusters. For more detailed instructions, check the [official site](https://kind.sigs.k8s.io/) and [the user guide](https://kind.sigs.k8s.io/docs/user/quick-start).

#### [minikube](https://github.com/kubernetes/minikube)

![minikube](https://loft.sh/blog/images/content/developer-checklist-minikube.png)

minikube is one of the most well-known solutions when it comes to running local Kubernetes clusters. By default, minikube spins up a single Kubernetes cluster inside a virtual machine to perform all the development tasks. minikube uses the VirtualBox hypervisor by default to create a virtual machine for the cluster but also supports a bunch of other hypervisors such as VMware Workstation, KVM, and Parallels. 

#### [Docker Desktop](https://www.docker.com/products/docker-desktop)

Docker Desktop is another tool that allows developers to configure single-node Kubernetes on Windows and Mac. The tool comes built-in with a Kubernetes server that runs inside a Docker instance locally to test your applications.

The Kubernetes server is not configurable and runs as a single cluster, which only makes it suitable for small-scale development projects. Support for Kubernetes in Docker Desktop is not enabled by default. Developers have to enable it for running Kubernetes containers and kubectl commands.

### Remote Cluster

A remote cluster is another way of providing access to the Kubernetes environment for development and testing purposes. Remote clusters are easy to set up and are available through public clouds such as AKS, EKS, and DigitalOcean Managed Kubernetes. 

Configuring remote clusters is also much more flexible than local clusters due to endless computing power, but they can quickly become expensive. There are some self-service options available that can help reduce the cost to run Kubernetes clusters remotely.

#### [vcluster](https://loft.sh/docs/self-service/virtual-clusters)

vcluster is an open source project maintained by Loft Labs that allows the creation of fully functional virtual Kubernetes clusters inside a regular namespace to reduce the need to run many full-blown clusters. The virtual clusters each have their own k3s API server to configure and validate data for pods and services. To know more, have a look at the [official vcluster docs](https://www.vcluster.com/docs/architecture/basics).

## Monitoring and Optimizing Cost

Your Kubernetes system isn’t complete without a way to keep an eye on your resources—how much you’re using and how much it costs you.

### [Kubecost](https://www.kubecost.com/)

![The Kubecost website](https://loft.sh/blog/images/content/developer-checklist-kubecost.png)

Kubecost is a cost-optimization tool that gives developers an overview of real-time cost allocations by namespaces, resources, services, and deployments. The cost estimates are also available for public cloud vendors such as AWS and GCP and can be enabled by integrating with their billing APIs.

Kubecost is available as an open-source project and can be installed by deploying directly to the pod or via a single Helm install.

### [Loft sleep mode](https://loft.sh/features/kubernetes-cost-management)

![A diagram showing how Loft' sleep mode works](https://loft.sh/blog/images/content/deveoper-checklist-loft.png)

The sleep mode feature in Loft automatically suspends workloads when they are not in use, to save on infrastructure costs. The workflows can be put to sleep for a specified period of inactivity or through a manual trigger by the user.

Loft’s sleep mode is particularly useful in development environments where applications don't have to run twenty-four hours a day. To learn more, check out the [official sleep mode documentation](https://loft.sh/docs/self-service/sleep-mode).

## Conclusion

Kubernetes can be intimidating, but if you break down the tools you need according to this checklist, you’re on your way to building a robust Kubernetes system that developers will love to use.

Remember, you’ll want to:

1. Choose development tools to help automate as much as possible
2. Pick a dashboard so your developers can enjoy seamless interaction with all their tools
3. Decide whether your Kubernetes environment should be local or remote
4. Monitor and optimize your resources for cost and performance

*Photo by [Leon](https://unsplash.com/@myleon?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on [Unsplash](https://unsplash.com/s/photos/meeting?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)*