Kubernetes is an open-source platform for container orchestration that has been gaining in popularity over the last few years as large platforms have been re-architected to work as containerized applications. As an orchestration platform, Kubernetes includes tooling and automation for deploying, managing, and helping to scale containerized applications.
Computing environments have evolved over time; initially, applications were deployed on physical servers, where the resources available on the server were ‘fixed’ in a way and any applications deployed on the server had to share the same resources. In order to scale, additional servers (or newer, larger machines) would need to be purchased, configured, and deployed.
As more robust servers became available it soon became possible to “virtualize” servers. Virtualization is a technology that allows you to run multiple Virtual Machines on the same physical machine. This allowed organizations to lower costs for hardware and provide environment isolation while also providing the benefit of being able to add and remove virtual machines as needed. One downside to virtualization is that each machine is still a “full” machine, usually having an operating system and all components required by the deployed applications to be installed.
Containerized applications are similar to virtualized environments in that multiple machines (or in this case, containers) can be run on the same physical machine. The main difference is that applications are broken into microservices – lightweight applications with specific dependencies, libraries, and environmental requirements – and the microservices all run on separate container nodes. The containers themselves are isolated environments that are designed to be able to scale independently without interfering with other portions of the application.
All of this brings us back to Kubernetes, which is a platform for managing the deployment of containerized applications and services. Kubernetes provides a management interface, containers, and offers a variety of features such as:
- Self-healing capabilities that allow Kubernetes to replace containers if they become unresponsive.
- The ability to scale the number of containers that are running in support of a particular microservice based on utilization.
- Internal load balancing to distribute traffic among the containers in a set.
- Storage orchestration to allow for the configuration of storage that is used by the containers.
- The ability to use pre-built container images from the Docker public registry as well as private image repositories.
Kubernetes can be run in a variety of environments – you can install and run Kubernetes locally using minikube or use one of the managed Kubernetes services offered by AWS, Azure, Google, and others. On the Esri front, it appears that resources are being devoted to releasing a Kubernetes-compliant version of ArcGIS Enterprise in the (possibly) near future. The ArcGIS Enterprise Q&A highlights from UC 2020 answers a few questions about ArcGIS Enterprise on Kubernetes, and the agenda for the 2021 Esri Developer Summit is also showing a few sessions for ArcGIS Enterprise on Kubernetes. This will be an exciting space to watch as future releases of ArcGIS Enterprise are able to be deployed on Kubernetes.