Virtual Machines
10 Jan 2023
- Infrastructure as a service (IaaS)
- Virtual machines, or VMs, are software emulations of physical computers.
- They include a virtual processor, memory, storage, and networking resources.
- They host an operating system (OS), and you’re able to install and run software like a physical computer.
- You can connect to VM & control it using a remote desktop client.
- Good choice when you need:
- Total control over the operating system (OS)
- The ability to run custom software
- To use custom hosting configurations
- Azure takes care of the physical hardware
- You take care of configuring, updating, and maintaining the software that runs on the VM.
- An image is a template used to create a VM.
- Includes an OS and often other software, like development tools or web hosting environments.
Examples of use-cases
- During test + dev as it’s easy to create different OS & application configurations. Easy to delete when not needed.
- Minor tasks. E.g. application handles fluctations in demand and shut down VMs when you don’t need them & quickly start them to meet a suddenly increased demand.
- Extending your datacenter to the cloud, e.g. running SharePoint.
- During disaster recovery. E.g. if primary datacenter fails, create VMs running on Azure to run your critical applications and then shut them down when the primary datacenter becomes operational again.
- Lift and shift: Moving from physical datacenter to cloud. You can take image of the server & run within a VM with little to no changes.
- Learn more: Typical scenarios for running Azure VMs
Scaling and High Availability
- 📝 99.99% uptime guarantee for all Virtual Machines that have two or more instances deployed across two or more Availability Zones.
Domains & maintenance events
Update domains
- Groups of VMs and underlying physical hardware that can be rebooted at the same time.
Planned maintenance events
- When the underlying Azure fabric that hosts VMs is updated by Microsoft.
- Done to patch security vulnerabilities, improve performance, and add or update features.
- Often no impact, sometimes requires reboot.
- When the VM is part of an availability set, the Azure fabric updates are sequenced so not all of the associated VMs are rebooted at the same time.
- VMs are put into different update domains
Fault domains
- Fault domain = rack of servers.
- provides the physical separation of your workload across different power, cooling, and network hardware that support the physical servers in the data center server racks.
- In the event the hardware that supports a server rack becomes unavailable, only that rack of servers is affected by the outage.
Unplanned maintanance events
- Involve a hardware failure in the data center e.g. a power outage or disk failure
- VMs that are part of an availability set automatically switch to a working physical server so the VM continues to run.
- The group of virtual machines that share common hardware are in the same fault domain.
Availability sets
- Logical grouping of two or more VMs that help keep your application available during planned or unplanned maintenance.
- With an availability set, you get:
- ❗ Up to three fault domains
- each have a server rack with dedicated power and network resources.
- Five logical update domains
- ❗ can be increased to a maximum of 20.
- There’s no cost for an availability set.
- Only pay for the VMs within the availability set.
- 💡📝 Recommended for high availability.
Virtual machine scale sets
- Lets you create & manage a group of identical, load balanced VMs.
- Allow you to centrally manage, configure, and update a large number of VMs to provide highly available applications.
- The number of VM instances can automatically increase or decrease in response to demand or a defined schedule.
- 💡 Helps you build large-scale services for areas such as compute, big data, and container workloads.
- Provides high availability through regional or multiple Availability Zones deployment options.
Azure Batch
- Large-scale job scheduling and compute management.
- When running a job, batch:
- Starts a pool of compute VMs for you
- Installs applications and staging data
- Runs jobs with as many tasks as you have
- Identifies failures
- Requeues work
- Scales down the pool as work completes
- 💡 Good for cases where you need raw computing power or supercomputer level compute power.