Type of internet based computing that provides shared computer processing resources and data.
- "bare metal" server with a virtualization layer on top of it
- IaaS: infrastructure as a service (e.g. OpenStack)
- PaaS: platform as a service
- SaaS: software as a service
(source: What is IaaS?)
- gives components to set up cloud infrastructure, provides set of tools and services
- backed up by big IT companies
(source: What Is OpenStack | OpenStack Tutorial For Beginners | OpenStack Training | Edureka)
- Keystone: authentication service (users and privilages)
- Glance: launches instances from the images (e.g. Gentoo, Debian, CentOS)
- Nova: computing domain
- Neutron: networking service, responsible for communication between services
- Swift: object storage component
- Cinder: block storage component
- Horizon: dashboard
- Ceilometer: part of telemetric project
- Heat: part of orchestration program.
The mission of the OpenStack Orchestration program is to create a human- and machine-accessible service for managing the entire lifecycle of infrastructure and applications within OpenStack clouds.
(source: Virtual Machine)
Virtual machine (VM) is an emulation of a computer system. Virtual machines are based on computer architectures and provide functionality of a physical computer. Their implementations may involve specialized hardware, software, or a combination.
Some virtual machines, such as QEMU, are designed to also emulate different architectures and allow execution of software applications and operating systems written for another CPU or architecture.
Operating-system-level virtualization allows the resources of a computer to be partitioned via the kernel's support for multiple isolated user space instances
VM emulates hardware and kernel (see picture on the right) - this can have a negative impact on a performance.
(source: difference between cgroups and namespaces)
- Cgroups = limits how much you can use
- namespaces = limits what you can see (and therefore use)
- cgroup: Control Groups provide a mechanism for aggregating/partitioning sets of tasks, and all their future children, into hierarchical groups with specialized behaviour.
- namespace: wraps a global system resource in an abstraction that makes it appear to the processes within the namespace that they have their own isolated instance of the global resource.
(source: LXC)
LXC (Linux Containers) is an operating-system-level virtualization method for running multiple isolated Linux systems (containers) on a control host using a single Linux kernel.
The Linux kernel provides the cgroups functionality that allows limitation and prioritization of resources (CPU, memory, block I/O, network, etc.) without the need for starting any virtual machines
LXC combines the kernel's cgroups and support for isolated namespaces to provide an isolated environment for applications.
- creates the containers with the defined versions of software (e.g. Apache HTTP server)
- unifies environments (build, test) across machines
A platform for working with containers:
- deployment
- scaling
- monitoring
Instead of 3 servers you have 40 servers. How do you decide what containers go where
Use kubernetes to do it for you.
SaltStack automates repeated system administrative and code deployment tasks, eliminating manual processes in a way that can reduce errors that occur when IT organizations configure systems.
Meanwhile check out:
- What Is OpenStack | OpenStack Tutorial For Beginners | OpenStack Training | Edureka (YouTube)
- Containers: cgroups, Linux kernel namespaces, ufs, Docker, and intro to Kubernetes pods (YouTube)
- Virtual Machine (Wikipedia)
- difference between cgroups and namespaces (StackOverflow)
- LXC (Wikipedia)
- What is Docker? (YouTube)
- What is Kubernetes (YouTube)
- Understanding the Difference Between Virtualization and Containers (YouTube)