Vates sponsored this post.
Software containers are all the rage these days. They bring a lot of benefits and may push forward the revision of entire software stacks developed in-house, for good reasons. Containers are at the base of the cloud native phenomenon, and they bring many benefits to IT systems. However, the emphasis put on container technologies and the “cloud native way” may make you forget that it’s all made possible by the underlying layers of IT systems — namely hardware and the hypervisor.
This isn’t to say that the adopters and proponents of containers are misguided. Rather, there tends to be a lack of clarity as to which technology is suitable for a specific purpose and what customers really get billed for.
As I’m about to explain, there is no opposition between containers and virtual machines. Rather, it is more about the realization that oftentimes, containerizing applications implicitly relies on virtualizing the system on which the containers will run. Of course, the perception is very different. For years, the IT industry has been relying on virtualization as a way to manage application layers across organizations. Now containers have disrupted the application management market — with good reason, I might add.
Does this mean that the IT industry was wrong all those years? No, because application management by means of systems virtualization (i.e. server virtualization) is an effective solution in a number of cases. If applications are complex and rely on data and software dependencies that may not be directly tied to the application in the IT infrastructure, containers might not be able to meet the requirements of complex applicative architectures. Containers will provide the application portability and management, but will not bring an effective solution to the environment in which the application is running. Virtual machines, on the other hand, will deliver a fully portable and manageable environment — in other words, a fully virtualized system.
Complex systems in which containers and container pods run tend to require virtualization. Despite what can be read in the official documentation of container technologies, containers can run on bare metal only if the system is simple enough. As soon as a complex environment is required, and that tends to be the large majority of enterprise deployments, containers will run in an environment that is essentially virtualized. This may mean that containers are running directly on top of virtual machines or that containers are running inside large and complex environments that are themselves entirely virtualized.
The question then is: Why have we come to see the two technologies at odds? The main reason is a practical one: For years virtual machines have been used to handle application management, something they can do but are not the best at. Containers excel at the task of managing applications. However, as soon as data streams and a handful of applications running across different operating systems are working together, containers will only be part of the answer. The broader part is with virtual machines. Therein lies the crux of the story: There is no true opposition between containers and virtual machines; they are mostly complimentary.
Building Blocks of the Hybrid Cloud
In reality, there is not a massive adoption of containers to the detriment of hypervisors. Rather, the current state of the market suggests three use cases that are either distinct from one another or may sometimes be observed happening at the same time:
- IT teams who have just finished the deployment and skills acquisition of a fully virtualized environment.
- IT teams who are starting to use containers for testing or for specific use cases, such as containerizing web applications or mail servers, thereby adding one more separation layer between the applications and the operating system. These containers run on an operating system, which is itself running on virtual machines, for portability and scalability.
- In a smaller number of cases, companies producing and consuming lots of code that moved to a full cloud environment (public or private) and that are now in the process of going “cloud native.” This involves a lot of containerizing of applications, while the virtualization layer runs just between the software platform and the bare metal.
In each case, virtual machines and containers work together to provide IT operations with efficient architectures and workloads. There is no opposition, but rather a co-dependence. Where the real difference is ultimately lies in the requirements and the use case at hand. Systems management and complex environments will put a stronger emphasis on virtualization, while application management will rely more on containers.
Feature image via Pixabay.