Somehow, clouds seem to be stuck in a perpetual terminological limbo. Back when cloud computing started, we had IaaS, PaaS, and SaaS, and there were a bunch of users scratching their heads on just what all those “aaS-es” meant. The good news is that you don’t hear much about them now anyway. Instead, we have “containers, microservices, serverless,” and (the favorite of the moment) “cloud-native.” Maybe, we should define these new concepts before they fall out of favor in turn.
“Containers” are not limited to the cloud; they’re a form of virtualization. Virtualization used to create virtual machines on servers, but that was a fairly high-overhead process. Containers are a feature of many operating systems, a way of partitioning resources that’s a little more rigorous in separating things than simple multi-tasking but not as rigorous as virtual machines.
What makes containers and clouds go together nicely is that a containerized application is highly portable. Containers work in part because they enforce a specific model of application connection and deployment, and that means, that while you don’t need the cloud to utilize them, the cloud can benefit a lot from container use. Finally, containers use less resources, so they can lower cloud costs.
Kubernetes is a product of the container revolution, a software tool developed by Google and used to deploy containerized applications. Arguably, Kubernetes is what’s made containers so successful, because it solves the problem of deploying applications that consist of a bunch of interrelated pieces, all of which must somehow roll out and run in harmony. Kubernetes can be made to support cloud deployments, data center deployments, and hybrids of both, so it fits current cloud-based application thinking.