Virtualization was really the key technology that started the cloud computing revolution. When virtualization started, it was initially a no-brainer, Capex driven purchase, that was driven by the reality that systems of the time were typically dedicated to one application workload, and in order to meet the peak demand of those workloads, they were run with excess headroom on the servers.
The result of this is was that when you looked around the data center, there was a ton of wasted capacity. Virtualization solved that waste by enabling consolidation, and providing the ability to run multiple workloads on the same server. The result was fewer servers to purchase, fewer servers to manage, and fewer servers to power and house in data centers.
Over time, the performance and reliability advances of virtualization broadened its use to business critical workloads, and it began to be used for every type of workload, which led to the cost savings, the CapEx-driven attribute of virtualization, were taken for granted. They were just the table stakes, but the OpEx benefits are what really started to dominate and bring virtualization everywhere. These benefits were the flexibility and business agility that virtualization created. However, virtualization wasn't without its downsides, as well.
One of the downsides, even if you embraced virtualization everywhere in your data center, was that it could still take weeks to provision new servers. How is it possible to take weeks to provision a new server? Well, if your IT department is kept siloed based on the old roles that you had in a physical data center, and you serialized the aspects of provisioning new VMs, that's how you get to weeks. For example, if you had a storage team that provision new LUN's for the next set VMs that they need on a regular basis, say every other week, then you can be waiting two weeks to provision the LUN's which is one of steps that you need to go through in provisioning. And when you then have similar delays executing the multiple steps required to provision a system, it is easy to get to multiple weeks to deploy virtual machines. So, it is really important that you adapt your processes and procedures for the new world of automation to achieve all the benefits that virtualization can bring you.
Another downside of virtualization, and one that still exists in cloud, is VM sprawl. This is where it is so easy to now create virtual machines that people would do it without any direction or planning, and then lose track of what they were running, and so you end up with a lot of orphaned VMs that also waste capacity.
One of the successors to virtualization is the Software-Defined Data Center or SDDC, which is virtualization at the datacenter scale. Virtualize everything including storage, networking, security, pool resources together into flexible pools, and apply them to applications dynamically via programmable API's. Automation flexibility is the key to the SDDC being able to scale up and down on demand, helping to eliminate the wasted resources.
Public cloud is very similar to SDDC with one significant difference, which is that you don't have to pre-own and provision the hardware, thereby making all of IT services an OpEx cost instead of CapEx.
Cloud though is more than just virtualization, even though that is where it grew out of. In a virtualized data center, IT will still typically be provisioning VMs, adjusting storage and presenting it to VMs, managing the networks etc, and, of course, you still need to own enough hardware to be able to handle simultaneous peak workloads across multiple applications. In the cloud, all of these things get automated at a higher level of abstraction providing a combination of elasticity and usage-based pricing, along with self-service.
These are key differences from the virtualized data center, and, of course, the cost of this elasticity is derived from the large cloud vendors amortizing their equipment across multiple customers ensuring that there is always enough equipment to handle the workload peaks. This elasticity allows you to apply new resources to your workloads fast enough on demand... as long as you're doing it with automation in order to handle the peaks.