\section{Literature Review}
\label{literature-review}
% this section should be coordinated with the references section
Containers~\cite{menage2007adding,soltesz2007container} are replacing virtual machines and are being adopted to modernize applications. Containers are favored for their lightweight, isolation, and portability features~\cite{merkel2014docker}. Such features are possible by leveraging Linux primitives such as cgroups and namespaces~\cite{rosen2014linux}.
The container market will be a \$4.3 billion market by 2022~\cite{451research}. Docker, the leading container management platform~\cite{forrester}, is the main agent that is driving the adoption of containers~\cite{merkel2014docker}.

For this project, we are leveraging the CS cloud~\cite{cscloud_rancher}. The CS cloud deploys Rancher~\cite{Rancher} that provides services on top of Kubernetes~\cite{kubernetes} which provides the perfect infrastructure for us to deploy our multi-container information retrieval system. Rancher is an open source platform that provides a user interface for a Kubernetes cluster and handles the management and facilitates the monitoring of Docker~\cite{docker} container clusters. Rancher provides a simple workload environment, a centralized control plane, and enterprise-grade technical support.

Kubernetes~\cite{kubernetes}, an open-source cluster manager from Google, has become the leading platform for powering modern cloud-native containerized micro-services in recent years. Kubernetes is a Greek word meaning helmsman of a ship or pilot. This naming has continued the container metaphor used by Docker.
Its popularity is driven by the many benefits it provides, one of which is the ease of install on a small test bed (as small as one virtual machine or physical server). However, running Kubernetes at scale with production workloads requires more resources in addition to more thought and effort~\cite{kubernetes_literature}. In Kubernetes, a node is a worker machine; it may be a virtual machine or a physical machine, depending on the cluster. Each node contains the services necessary to run pods and is managed by the master components of Kubernetes. Pods, a Kubernetes abstraction, host an application instance. Each pod represents one or more containers and some shared resource for those containers such as a network. 