Take advantage of these Kubernetes companions to simplify app definitions, enhance monitoring, ease cloud deployments, and more.
Kubernetes has become a standard way—many would say the standard way — to deploy containerized applications at scale. But if Kubernetes helps us to tame sprawling and complex container deployments, what’s available to help us tame Kubernetes? It too can be complex, messy, and difficult to manage. As Kubernetes grows and evolves, it is likely that some of its excesses will be tamed from within. But some people aren’t waiting around for Kubernetes to get any easier to work with, and have rolled their own solutions to many common problems with Kubernetes in production.
Here we highlight 10 open-source projects and third-party tools that simplify Kubernetes in various ways, from easing command-line interactions, to simplifying application deployment syntax, to integrating with AWS, to providing a window into multiple clusters.
Bitnami Cabin: Kubernetes dashboard for iOS and Android
No modern web application or service should be without some kind of mobile interface. Cabin provides Kubernetes admins with a version of the Kubernetes dashboard that is accessible from an iOS or Android smartphone. Many of the functions available in the full Kubernetes dashboard can be launched from Cabin, including Helm charts, scaling deployments, reading pod logs, and accessing web-based apps hosted by Kubernetes.
Goldpinger: Visualize Kubernetes clusters
Humans are visual creatures. Graphs and charts make it easier for us to understand the big picture. And given the scope and complexity of a Kubernetes cluster, we could use all of the visual help we can get.
The amusingly-named Goldpinger, open sourced by Bloomberg’s tech division, is a simple tool that runs inside a Kubernetes cluster and displays an interactive map of the relationships between the nodes. Healthy nodes appear in green, and unhealthy nodes in red. Just click on a node for details. You can customize the API with Swagger to roll in additional reporting, metrics, or other integrations.
Gravity: Portable Kubernetes clusters
If you want to deploy an application into Kubernetes, many apps have Helm charts to guide and automate the process. But what if you want to take a Kubernetes cluster as is and deploy it somewhere?
takes snapshots of Kubernetes clusters, their container registries, and their running applications, called “application bundles.” The bundle, which is just a .tar file, can replicate the cluster anywhere Kubernetes runs.
Gravity also ensures that the target infrastructure can support the same behavioral requirements as the source, and that the Kubernetes runtime on the target is also up to snuff. The enterprise version of Gravity adds security features including role-based access controls and the ability to synchronize security configurations across multiple cluster deployments.
K9s: Full-screen Kubernetes CLI UI
Admins love “single pane of glass” utilities. K9s is a full-screen CLI UI for Kubernetes clusters. It gives you views of running pods, logs, and deployments at a glance, along with quick access to a shell. Note that you will need to grant users Kubernetes read privileges at the user and namespace level for K9s to work properly.
Kaniko: Build containers in a Kubernetes cluster
Most container images are built on a system outside of a container stack. Sometimes, though, you want to perform the build process inside a container stack — e.g., within a running container or somewhere on a Kubernetes cluster.
Kaniko performs container builds inside a container environment, but without relying on a container daemon like Docker to do its work. Kaniko takes the base image, extracts the file system, then executes all of the build commands in user space atop the extracted file system, taking a snapshot of the file system after each command.
Note that Kaniko currently cannot build Windows containers.
Kedge: Concise Kubernetes deployment definitions
The most common complaint about Kubernetes is how complex and verbose its manifests, or application definitions, are. They’re a pain to write and a pain to maintain, so it’s little wonder folks turn to third-party tools for relief.
Kedge offers a simpler, more concise syntax. You provide the simple version of the Kubernetes definition file to Kedge, and Kedge expands that simple definition into its full-blown Kubernetes counterpart. Unlike Koki Short (see below), Kedge doesn’t use a modular syntax for its declaration files; it just boils down application definitions to common shortcuts.
Note that the last release of Kedge was dated April 2018.
Koki Short: Manageable Kubernetes manifests
Koki Short—like Kedge above—is a project to improve the way application definitions, or manifests, work in Kubernetes. Like Kedge definitions, Short definitions use an abbreviated syntax for describing Kubernetes pods that can be translated into the full-blown syntax and back again. Unlike Kedge definitions, Short definitions are also modular, meaning details from one Short declaration can be re-used in others, so that many pods with common elements can be defined succinctly.
Kops: Command-line ops for Kubernetes clusters
Developed by the Kubernetes team, Kops allows you to manage Kubernetes clusters from the command line. It supports clusters running on AWS and GCE, with VMware vSphere and other environments in the works. In addition to automating the setup and teardown process, Kops helps with other kinds of automation. For instance, it can generate Terraform configurations to allow a cluster to be redeployed using Terraform.
Kubecost: Cost metrics for running Kubernetes
Most Kubernetes administration tools focus on ease of use, monitoring, insight into pod behaviors, and the like. But what about monitoring the costs — as in the dollars and cents — associated with running Kubernetes?
Kubecost uses real-time Kubernetes metrics, and real-world cost information derived from running clusters on the major cloud providers, to provide a dashboard view of the monthly cost of each cluster deployment. Costs for memory, CPU, GPU, and storage are all broken out by Kubernetes component (container, pod, service, deployment, etc.).
Kubecost can also track the costs of “out of cluster” resources, such as S3 buckets, although this is currently limited to AWS. Cost data can even be shared back to Prometheus, so you can use the data to programmatically alter cluster behavior.
KubeDB: Run production databases in Kubernetes
Databases have always been difficult to run elegantly in Kubernetes. And the native Kubernetes feature set doesn’t directly address many of the specific problems with databases.
KubeDB allows an admin to create Kubernetes operators for managing databases. Running backups, cloning, monitoring, snapshotting, and declaratively creating databases are all part of the mix. Clustering is also supported, but only on some databases—e.g., it’s available for PostgreSQL but not MySQL (yet).
Kube-shell: Shell for the Kubernetes CLI
The Kubernetes command line is powerful, but as with any command line app, picking through its options can be tedious. Kube-shell wraps the standard Kubernetes command line in an integrated shell that provides auto-completion and auto-suggestion of common commands, including suggestions provided by the Kubernetes server (e.g., for the names of services). It also gives you a more robust command history function, a vi-style editing mode, and running context information for user, namespace, cluster, and other installation-specific details.
Kubespy: Real-time monitoring of Kubernetes resources
Pulumi’s Kubespy is a diagnostic tool that allows you to trace changes to a Kubernetes resource in real time, providing you with a kind of text-view dashboard of the goings-on. For instance, you could watch the changes to a pod’s status as it is booted up: the pod definition being written to Etcd, the pod being scheduled to run on a node, the Kubelet on the node creating the pod, and the pod finally being marked as running. Kubespy can run as a standalone binary or as a plug-in to Kubectl.
Kubernetes Ingress Controller for AWS
Kubernetes provides external load balancing and network services to a cluster through a service called Ingress. Amazon Web Services provides load balancing functionality, but doesn’t automatically couple these services to Kubernetes’ facilities for same. The Kubernetes Ingress Controller for AWS closes that gap. The Ingress Controller manages AWS resources for each Ingress object in a cluster automatically, creating load balancers for new ingress resources and deleting load balancers for removed ones, drawing on AWS CloudFormation to ensure the consistent state of the cluster. It also auto-manages other elements used in the cluster like SSL certificates and EC2 Auto Scaling Groups.