2. What is OpenStack?
"Open source software for building
private and public clouds"
3. OpenStack capabilities
● VMs on demand
○ provisioning
○ snapshotting
● Volumes
● Networks
● Multi-tenancy
○ quotas for different users
○ user can be associated with multiple tenants
● Object storage for VM images and arbitrary
files
4. OpenStack History
● July 2010 - Initial announcement
● October 2010 - Austin Release
● February 2011 - Bexar Release
● April 2011 - Cactus Release
● October 2011 - Diablo Release
● April 2012 - Essex Release
● October 2012 - Folsom Release
● April 2013 - Grizzly Release
9. Still part of nova
Horizon CLI
Keystone Glance
nova: Cloud Controller
nova-api endpoint glance-api
glance-registry
scheduler nova: Compute
nova-db
nova-network nova-compute Swift
que
nova-volume ue hypervisor proxy-server
object
Shared Storage store
10. UI: horizon or CLI Keystone
keystone
server
nova compute node
keystone
-db
controller nova: Hypervisor
queu nova-
Compute
nova-api e compute
Quantum
V
M quantum
scheduler server
nova-db Network
quantum
-db
Cinder block Glance quantum
storage plugin
endpoint queu
e node glance-api
scheduler storage glance-registry Swift
cinder-vol proxy-server
glance
db object
cinder-db store
11. OpenStack Projects: Communication Types
HTTP
AMQP
SQL
natv. API
iSCSI
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
13. Initial State
Tenant is created, provisioning
quota is available, user has an
access to Horizon/CLI
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db
Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
14. Step 1: Request VM Provisioning via UI/CLI
User specifies VM params: name, flavor,
keys, etc. and hits "Create" button
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db
Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
15. Step 1: Request Provisioning via UI/CLI
● From UI
a. Login to Horizon
b. Specify params of VM in "Create VM" form
c. Hit "Create" button
● Under the hood
a. Form params are converted to POST data
b. "Create" request initiate HTTP POST request to back-
end
■ To Keystone if auth token is not cached
■ To nova-api if auth token hasn't expired yet
16. Horizon
"The OpenStack Dashboard (Horizon)
provides a baseline user interface for
managing OpenStack services."
17. Step 2: Validate Auth Data Horizon sends HTTP request to
Keystone. Auth info is specified
in HTTP headers.
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db
Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
18. Keystone
"Keystone is an OpenStack project that
provides Identity, Token, Catalog and
Policy services for use specifically by
projects in the OpenStack family."
21. Step 2: Validate Auth Data Keystone sends temporary
token back to Horizon via HTTP.
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db
Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
22. Step 3: Send API request to nova-api
Horizon sends POST request to nova-
api (signed with given token).
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
23. Step 4: Validate API Token nova-api sends HTTP request to
validate API token to Keystone.
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
24. Step 4: Validate API Token Keystone validates API token
and sends HTTP response with
token acceptance/rejection info.
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db
Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
25. Step 5: Process API request nova-api parses request and
validates it by fetching data from
nova-db. If the request is valid, it
saves initia db entry about VM
to the database.
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
29. Step 6: Publish provisioning request to queue
nova-api makes rpc.call to scheduler.
It publishes a short message to
scheduler queue with VM info.
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db
Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
30. Step 6: Pick up provisioning request
scheduler picks up the message
from MQ.
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- db object
db router/gw store
31. Message queue
"Message queue is a unified way for
collaboration between nova
components."
32. Step 7: Schedule provisioning Scheduler fetches information
about the whole cluster from
database and based on this info
selects the most applicable
compute host.
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
34. nova-scheduler: available schedulers
Scheduler Description
Chance Picks a host that is up at random
Simple Picks a host that is up and has the
fewest running instances
Filter Picks the best-suited host which
satisfies selected filter
Multi A scheduler that holds multiple sub-
schedulers
35. Step 8: Start VM provisioning on compute node
Scheduler publishes message to the
compute queue (based on host ID)
and triggers VM provisioning
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
36. Step 9: Start VM rendering via hypervisor
nova-compute fetches information
about VM from DB, creates a command
to hypervisor and delegates VM
rendering to hypervisor.
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
38. nova-compute drivers
nova-compute
XCP VMWare HyperV LPAR libvirt
VM VM VM VM
VM VM VM VM KVM Xen Qemu LXC
VM VM VM VM
VM VM VM VM
39. Step 10: Configure network nova-compute makes a call to
quantum-api to provision
network for the instance
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db
Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node
proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
40. Step 11: configure network
quantum configures IP,
gateway, L2 connectivity
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
41. Step 12: Request volume attachment
It is assumed a volume is already
created. Nova-compute contacts
cinder to get volume data.
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db Network
quantum-
db
Cinder block Glance quantum
queu plugin/agt
cinder-api storage glance-api
e node
scheduler storage glance-registry Swift
cinder-vol proxy-server
glance
cinder- object
db
db store
42. Step 12: Request volume attachment
Nova-compute sets up iSCSI initiator
& instructs the hypervisor to mount
iSCSI vol. as a new block device
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db Network
quantum-
db
Cinder block Glance quantum
queu plugin/agt
cinder-api storage glance-api
e node
scheduler storage glance-registry Swift
cinder-vol proxy-server
glance
cinder- object
db
db store
43. Step 12: Request volume attachment
iSCSI communication begins
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db
Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
46. Step 13: Request VM Image from Glance
nova-compute requests VM
image from Glance via Image ID
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
47. Glance
"The Glance project provides services for
discovering, registering, and retrieving virtual
machine images."
48. Step 14: Get Image URI from Glance
If image with given image ID can
be found - return URI
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
49. Step 15: Download image from Swift
nova-compute downloads image using
URI, given by Glance, from Glance's back-
end. After downloading - it renders it.
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store
50. Initial State
UI: horizon or CLI Keystone
keystone
server
nova compute node keyston
e-db
nova: Hypervisor
controller queu nova-
e Compute
compute
nova-api Quantum
V
M quantum
scheduler server
nova-db Network
quantum-
db
Cinder block storage
Glance quantum
node plugin/agt
cinder-api queu
e glance-api
storage
scheduler glance-registry Swift
cinder-vol network node proxy-server
dhcp serv. glance
cinder- object
db
db router/gw store