Kubernetes has become the de facto standard for running multi-container applications (aka microservices). Kubernetes has powerful features for container scheduling, service discovery, load balancing, and more. But what about developers who are developing software on Kubernetes? Here’s a list of five handy tools for developers building applications with Kubernetes, with a couple tips on using them.
kubectl is the standard command line interface to Kubernetes. You’re going to need kubectl to deploy a container, figure out why it’s not running, and more. Some of the handy kubectl
commands include:
kubectl explain
provides a full list of every type of Kubernetes resource, from pods to secrets to statefulsets.kubectl describe <resourcetype> <resource>
gives a wealth of status information about a given resource.And since resource names tend to have very long names (e.g., kubernetes-node-emt8.c.myproject.internal), spend a few minutes setting up tab completion in your shell to save yourself a bunch of typing.
So it’s not exactly a tool, but the Kubernetes cheat sheet has a comprehensive list of useful commands for using Kubernetes. Bookmark it, print it out, and save it somewhere handy.
Tired of waiting for your container deploy just to test a two line code change? While there are a few different ways to set up your development environment for microservices, Telepresence lets you embrace a hybrid model. In this model, you code your service locally on your laptop, while connecting to other services in your Kubernetes cluster via a two-way proxy.
With Telepresence, your locally running service:
Needless to say, this isn’t recommended for production use. But in development, you can:
telepresence
) that has full access to your local filesystem, so you can use any tool or script on your laptopOn an airplane without WiFi but still need to code? No problem. Minikube lets you run a Kubernetes instance on your laptop.
Also, a less known fact for Linux users: you can run minikube without a VM — handy if you’re setting up a continuous integration environment.
Virtually any service is going to have an API. curl lets you send and receive HTTP requests from your command line. If you’re testing a service, curl -v
gives you a bevy of information on the HTTP interaction. If you're using gRPC for your APIs, curl also supports HTTP/2 with the [--http2](http://curl.haxx.se/docs/http2.html)
flag, although you'll need to recompile it on Mac OS X.
Incidentally, the Kubernetes cheat sheet gives you a command to get an interactive shell on your cluster (kubectl run -i --tty busybox --image=busybox -- sh)
). However, the command uses the busybox
image which doesn't come with curl
! You can get around this issue with either Telepresence (assuming you have curl installed on your local machine) or by using a different Linux image that contains curl (e.g., kubectl run -i tty archlinux --image=base/archlinux -- sh
).
Developing multi-container applications on Kubernetes requires new tools, in addition to old ones. These are some of the tools that we’ve found useful while building our cloud applications on Kubernetes. If there any other tools that you’ve used and found useful, feel free to drop me an email at [email protected].