When you spin up your first container, you may think it resembles a small virtual machine (VM). But, as Jerry Eshbaugh, Senior DevOps Team Lead at the Federal Emergency Management Agency (FEMA), pointed out at Postgres Vision 2020, there are significant differences between containerization vs. virtualization, for example:
To make a thorough comparison of containerization vs. virtualization, you need to start with the “why.” Virtualization technology is designed to maximize how you use server resources, while containerization’s primary objective is to maximize security and flexibility.
You can enable migration of VMs from one server to another with tools such as VMware VMotion. This provides continuous availability and integrity, and it is the key to automating data center optimization.
On the other hand, you manage containers primarily with Kubernetes, which automates load balancing, storage, rollbacks failover, and security.
Eshbaugh adds that a VM starts up slowly compared to a containerized application and can have a lifecycle of months or years. Containers feature fast start-ups and can have a lifecycle of just a few minutes – you use them when you need them.
Eshbaugh also contrasts the two technologies based on who reaps the benefits. “Virtualization is designed to benefit IT operations,” he says. “Containerization benefits the end user and applications.”
Reasons to Choose Containerization
In his work to modernize the flood insurance system for FEMA, Eshbaugh says he and his team choose to containerize Postgres databases based on factors, including:
- Support for their continuous integration/continuous development (CI/CD) pipeline: Eshbaugh says with containerization, you can have, for example, a dev instance exactly like your prod instance. This eliminates having two large instances running with multiple databases inside them.
- Support for microservices: Containerization aligns with microservices rather than monolithic applications that run everything in one large database instance.
- Support for multicloud deployments: Kubernetes enables you to move data from a data center to the cloud – or from the cloud back to an on-premises data center. “It’s not trivial, but you can do it,” Eshbaugh says. “It prevents you from being tied into a particular ecosystem.”
- Streamlines updates: Updates can be as easy as labeling an image, and Kubernetes automatically updates everything for you.
- Minimizes the impact of outages: Eshbaugh says because you tend to have more instances running with containerization, if you lose, for example, a dev instance when a developer is out of the office, it would be of little consequence. “Whereas if you lost you Exadata rack running Oracle with a bunch of databases, that’s a major problem,” he comments.
- Enables you to consider databases as disposable: With containerization, you can create and dispose of databases as needed. Eshbaugh says taking advantage of this capability may mean a cultural shift in your organization. “One of my favorite sayings is to treat databases like cattle, not like pets,” he says.
And, Eshbaugh says containers can eliminate the need for virtualization.
When Containerization Loses in the Containerization vs. Virtualization Debate
Eshbaugh says, “You could, theoretically, containerize anything, but sometimes you don’t want to.” For example, monolithic applications don’t typically containerize well, and you may want to consider the size of databases and whether tech support has the skill and expertise to manage containerized applications.
“The real challenge,” he says, “is the human, traditionalist mindset. If you are saying, ‘This is the last time I ever have to learn something, you’re in the wrong career.” He says fear and discomfort hold people back from utilizing containers – or other technology or processes that are new to them. “Persevere whenever you’re uncomfortable until you get to the point where you are comfortable, and things work automatically,” he says.
“Ilities” May Make the Difference
With containers, or any type of development environment, Eshbaugh says to remember to focus the “ilities,” such as testability, reliability, maintainability, scalability and security.
“This is what separates a junior DBA from a senior DBA and a programmer from a software engineer,” he says. “focus on these aspects of your project.”