images
This commit is contained in:
commit
b769104ea4
256
README.md
Normal file
256
README.md
Normal file
@ -0,0 +1,256 @@
|
||||
# Virtual Machines, Containers and Hypervisors-A primer on what to know
|
||||
|
||||
January 2021 Workshop
|
||||
|
||||
In today’s world of modern tech infrastructure nothing runs on bare-metal
|
||||
anymore.Find out how buzzwords like Virtual Machines, Containers, Hypervisors,
|
||||
provisioning and automation fit together and what they mean for you.
|
||||
|
||||
|
||||
## Legal nonsense...
|
||||
|
||||
I, William Mantly am not representing JP Morgan Chase during this presentation.
|
||||
JP Morgan Chase has in no way endorsed or vetted the content of this
|
||||
presentation.
|
||||
|
||||
## About Me
|
||||
|
||||
**William Mantly Jr**
|
||||
|
||||
In depth knowledge of software development, System and network design with 20
|
||||
years of industry experience. CompTIA A+ Certified.
|
||||
|
||||
Currently:
|
||||
* Software/Networking engineer, VP on the Software-Defined Networking team At
|
||||
**JP Morgan Chase**
|
||||
* Consultant for Infrastructure projects.
|
||||
|
||||
Former:
|
||||
* Instructor and developer at **Byte Academy**
|
||||
* Development, DevOps and Operational roles
|
||||
|
||||
Contact:
|
||||
* Discord: **william#5607**
|
||||
* Gihub: **wmantly**
|
||||
* Linkedin: **wmantly**
|
||||
* Other social sites: Try **wmantly**, im the only one...
|
||||
|
||||
## Q&A
|
||||
|
||||
I will present a topic and take Q&A after each topic. I would like this to be
|
||||
highly interactive.
|
||||
|
||||
I will also take Questions as issues submitted to this repo after the
|
||||
presentation is done.
|
||||
|
||||
|
||||
## Vocabulary
|
||||
|
||||
* **Bare-Metal** - Physical hardware.
|
||||
* **Virtual Machines(VM)** - Emulated computer.
|
||||
* **Container** - Isolated set of resources, sometimes interchangeable with VM.
|
||||
* **Box** - Can refer to a real(Bare-Metal) server, VM or container.
|
||||
* **Host** - Bare-Metal server running VM's and/or containers.
|
||||
* **Guest** - A VM or Container.
|
||||
* **Hypervisor** - Operating System or software running a Bare-Metal hosts to
|
||||
assist in the management of VM's or containers.
|
||||
* **Provisioning** - The act of setting up a box/app/service.
|
||||
* **Drift** - Different in configuration or software versions between the
|
||||
intended state and actual state.
|
||||
* **Capacity Planning** - Planing how much physical resources an app, team or
|
||||
organization needs and how they will be mapped to said physical resources.
|
||||
* **Cloud** - Resources owned and managed by a 3rd party you can rent.
|
||||
* **On Prem** - Resources owned and managed by you.
|
||||
* **Multi Cloud** - Using multiple cloud offerings for one product.
|
||||
* **hybrid Cloud** - Mixing On Prem and cloud offerings for one product.
|
||||
* **Private Cloud** - Exposing On Prem servers as "rentable" resources.
|
||||
|
||||
## Pets, the traditional setup
|
||||
|
||||

|
||||
|
||||
Servers are pets. Each physical box is independently set up and managed. Most
|
||||
have friendly names, like types of dinosaurs or movie characters. Each one is
|
||||
often owned by an internal team. Each one also has custom set ups and unique
|
||||
quirks the Ops team knows personally.
|
||||
|
||||
Here are some of the down sides with this approach
|
||||
* Drift - Staging and Production server become drifted making testing all but
|
||||
meaningless and bugs much harder to reproduce.
|
||||
* Custom set up - Since each server is brought up manually, documentation
|
||||
becomes vague and outdated. Ops person also apply unknown patches and fixes
|
||||
to complete current goals, adding to drift.
|
||||
* Time consuming - Since each server always need an individual persons
|
||||
attention, they are very time consuming to update(OS, vendor and internal
|
||||
apps).
|
||||
* Capacity Planning - Each time a service or requirement is changed, the entire
|
||||
taxonomy of the resources need to replanned,
|
||||
* Separation of concerns - Many apps and services are usably loaded on a single
|
||||
box, resulting in overlapping a conflicting dependences during install and
|
||||
updates.
|
||||
* Backup and Restores - Because each box and service are unique, each one needs
|
||||
a custom back up and restore plan to be created and tested.
|
||||
* Expense - The issues listed above, and many more, make this approach expensive
|
||||
as it take decent of man hours, often leaves a lot resources unused, and
|
||||
unplanned outages
|
||||
|
||||
## Cattle, The modern approach
|
||||
|
||||
Today, Ops teams do not think of the servers they manage as pets, but as cattle.
|
||||
Instead of installing user ready Operating Systems on Bare-Metal, we install
|
||||
Hypervisor designed solely to run managed VM's and/or containers. Bringing the
|
||||
concept one step further, App teams are recommended, often required, to deploy
|
||||
services via code, and do not have shell access into the environments they
|
||||
deploy to. This also allows the Apps/services deployed to be thought of as
|
||||
cattle.
|
||||
|
||||
Lets take a deeper look into what this means
|
||||
|
||||
### The Virtual Machine
|
||||
|
||||

|
||||
|
||||
|
||||
Simply put, a VM is a logical(fake) computer that exists as software. Some VM's
|
||||
will emulate every aspect of the logical computer, allowing this fake computer
|
||||
to run software that is incompatible with the hardware of the host. Most of
|
||||
todays production VM's do not emulate anything and take advantage of built in
|
||||
features of the hosts CPU to isolate a subset of physical CPU, RAM and disk into
|
||||
a logical computer, AKA a VM. Once you have VM, you need to install its own
|
||||
Operating system and boot it. This can be only OS the CPU supports. You can
|
||||
install Windows on a VM with a Linux host. If you emulate the CPU, you can
|
||||
install something like the PowerPC version of macOS on a x86 Linux host, just
|
||||
don't expect lighting fast performance.
|
||||
|
||||
Because of this, Ops teams can treat every VM in the infrastructure
|
||||
the same way.
|
||||
|
||||
* Drift - None on the physical side, but does nothing to address drift with the
|
||||
apps and services running in the VM's.
|
||||
* Custom set up - None with this set up.
|
||||
* separation of concerns - Each app/service gets its own VM, no possibility of
|
||||
conflicts.
|
||||
* Time efficient - Because each VM can be managed the same way, management is
|
||||
often done in bulk with scripts
|
||||
* Capacity Planning, Backup and Restores - One backup and restore plan,
|
||||
capacity planing can be done on the fly, as VM's can be moved between
|
||||
physical hosts with no service interruption.
|
||||
* Expense - We have brought man hours down and more efficiently use resources
|
||||
with less outages.
|
||||
|
||||
### How about Containers?
|
||||
|
||||

|
||||
|
||||
|
||||
Containers on the surface are a lot like VM's. They are both used for resource
|
||||
isolation. The big difference is how this is accomplished. Containers do not
|
||||
create a logic computer, and emulation is never involved. The host Operating
|
||||
System isolates processes to create what seems like separate system. From a
|
||||
functional standpoint, they are often seen as a separate guest just as a VM
|
||||
would be. The advantage with this up is there is no CPU/RAM/DISK overhead to
|
||||
make a new container, as with a VM where you need an whole operating system
|
||||
installed and running. The downside is a since a container is just process
|
||||
isolation, apps and services need to be supported by the host OS and hardware.
|
||||
Containers are generally installed on type of VM's to allow for greater
|
||||
compatibility with physical hosts and more stream lined lower level management.
|
||||
|
||||
* Capacity Planning - Since containers take less over head and are generally
|
||||
lighter, we can squeeze that much more out of each box for business work
|
||||
loads.
|
||||
|
||||
### The last piece, Automation
|
||||
|
||||
In order to take full advantage of this cattle approach, we need wide spread
|
||||
automation. In our modern environment, manual provisioning has no place. Every
|
||||
application, service and the container/VM needs be created by automation.
|
||||
Automation doesn't have to complex or scary, a bash or python script that calla
|
||||
some API's to make a container, then installs packages and copies configuration
|
||||
maybe all you need. This is also where the CI/CD(Continuous
|
||||
Integration/Continuous Delivery) pipeline comes into play, automation to
|
||||
automatically run your automation scripts!
|
||||
|
||||
* Drift - Automation scripts should always produce the same container/VM, and
|
||||
all but remove drift.
|
||||
* Documentation - The automation scripts act as self documentation allowing
|
||||
others to know exactly how something is set up.
|
||||
* Capacity Planning and Backup and Restores - Theses are also automated.
|
||||
|
||||
## More Detail
|
||||
|
||||
Lets take a deeper look look into some of the topics we have covered.
|
||||
|
||||
### Hypervisour
|
||||
|
||||
There are many commercial and open source Hypervisour to chose from. Most of
|
||||
them are strip down versions of Linux with management tools, both CLI and GUI,
|
||||
for VM's and offer the option to cluster bare-metal servers into one deployment
|
||||
and management zone Some, like Microsoft's Hyper-V offering are just add-ons
|
||||
to an existing windows server installs. One of the most popular products is
|
||||
VMwares EXSi and vSphere witch offers a whole line of products for enterprise
|
||||
visualization. The most popular open source offering is Proxmox, witch is built
|
||||
on top of Debian Linux. All of these products offer about the services and cost
|
||||
from $0 to millions per year.
|
||||
|
||||
Links to Hypervisour:
|
||||
|
||||
* [**Proxmox**](https://www.proxmox.com/en/proxmox-ve) - Powerful open-source
|
||||
server solutions. *My recommended platform*
|
||||
* [**VMware**](https://www.vmware.com/products.html) - VMware offers dizzying
|
||||
amount of products and services. If you plan on going this route, plan to
|
||||
spend a lot of time figuring what you will need and how much it will cost.
|
||||
They also have a limited hardware support.
|
||||
* [**MS Hyper-V**](https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/about/) - Add-on to windows boxes.
|
||||
|
||||
|
||||
### Virtual Machine
|
||||
|
||||
Virtualization has been around for a long time, going back to the 1960's. For
|
||||
most of this time, virtualization was "full virtualization" where every aspect
|
||||
of the logically created VM is emulated by software. This allows the VM to run
|
||||
code built for non-committable hardware or using hardware completed emulated.
|
||||
The downside to this approach is it is very resource intensive and slow making
|
||||
it impracticable for production workloads. In the mid 2000's Intel and AMD
|
||||
released CPU features, known as VT-X and AMD-V that allows isolation of physical
|
||||
resources to a VM. No more emulation and workloads run at near native speed.
|
||||
this is the turning point in the history of virtualization where it becomes
|
||||
popular in production environments. As with Hypervisours, there are many open
|
||||
source and commercial offerings.
|
||||
|
||||
Links:
|
||||
|
||||
* [**qemu**](https://www.qemu.org/) - Full emulation virtualization that can run
|
||||
number of CPU typed on a number CPU types. Almost all other modern
|
||||
virtualization has roots in this project.
|
||||
* [**VirtualBox**](https://www.virtualbox.org/) - A desktop VM offering easy of
|
||||
use and fast performance. A great place to start with virtualization.
|
||||
* [**KVM**](https://www.linux-kvm.org/page/Main_Page) - KVM is the backbone of
|
||||
modern server virtualization.
|
||||
|
||||
### Containers
|
||||
|
||||
Containers are not a new concept. The modern containers we think about and a
|
||||
implementation of OS-level virtualization. On unix like systems, you can create
|
||||
a container with [`chroot` command](https://en.wikipedia.org/wiki/Chroot). In
|
||||
moderner infrastructure context, their are two types of containers, app-level
|
||||
and and system-level. Docker is an example of app-level containers, as docker
|
||||
containers are designed to run single, stateless apps replicated across an
|
||||
arbitrary about of container instances. LXC is an example of system-level
|
||||
containers as an LXC container acts almost as a nested system in a bottle.
|
||||
Containerizes are not generally directly deployed, we a intermediate management
|
||||
tool call an `orchestrator`. Examples for orchestrator are Podmon for docker,
|
||||
kubernetes witch can be configured to use a number of container technologies and
|
||||
LXD for LXC containers. Orchestrators are generally deployed to VM's,
|
||||
not bare metal.
|
||||
|
||||
Links:
|
||||
|
||||
* [**Kubernetes**](https://kubernetes.io/) - Open-source container-orchestration
|
||||
system for automating computer application deployment, scaling, and management.
|
||||
* [**Docker**](https://www.docker.com/) - Containers as packages.
|
||||
|
||||
|
||||
## More!
|
||||
|
||||
* [**The Phoenix Project**](https://www.amazon.com/Phoenix-Project-DevOps-Helping-Business/dp/0988262592) - A Novel about IT, DevOps, and Helping Your Business Win
|
||||
*
|
BIN
resources/container.png
Normal file
BIN
resources/container.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
BIN
resources/pets.png
Normal file
BIN
resources/pets.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
BIN
resources/vm.png
Normal file
BIN
resources/vm.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
Loading…
x
Reference in New Issue
Block a user