From 22e0fc177a3dbd695b527c541899b04e64461aac Mon Sep 17 00:00:00 2001 From: nerminamiller Date: Wed, 7 Aug 2013 23:01:43 -0400 Subject: [PATCH] Rewrite ch_getstart.xml added indents bug: #1209435 Fixed whitespace so that it validates Change-Id: I35c73c86ce25dde3ad7f7feca60e17f6e1db7b71 author: nermina miller --- doc/src/docbkx/common/ch_getstart.xml | 1266 ++++++++--------- .../openstack_havana_conceptual_arch.png | Bin 0 -> 42024 bytes 2 files changed, 611 insertions(+), 655 deletions(-) mode change 100644 => 100755 doc/src/docbkx/common/ch_getstart.xml create mode 100644 doc/src/docbkx/common/figures/openstack_havana_conceptual_arch.png diff --git a/doc/src/docbkx/common/ch_getstart.xml b/doc/src/docbkx/common/ch_getstart.xml old mode 100644 new mode 100755 index 45efc9e368..e06788ba76 --- a/doc/src/docbkx/common/ch_getstart.xml +++ b/doc/src/docbkx/common/ch_getstart.xml @@ -1,661 +1,617 @@ - Getting Started with OpenStack - - OpenStack is a project produced by developers and cloud - computing technologists from around the world. The project, which - represents an open source cloud computing platform for all types - of clouds, aims to be simple to implement, massively scalable, and - feature rich. - The technology consists of a series of interrelated services - delivering various components for an Infrastructure as a Service - (IaaS) solution. Each service offers an application programming - interface (API) that facilitates this integration. -
- OpenStack services - Any OpenStack service can use the API for another service. - For the most part, these APIs are the same APIs that are - available to cloud end users. As of the Havana release, - OpenStack offers the following services: Compute, object store, - identity, networking, block storage,image, metering, and REST - API. -
- Compute - The most complicated and distributed component of - OpenStack, Compute uses many processes to fulfill end user - requests to launch virtual machines. The main modules are - implemented in Python. - The following functional areas use the following - components: - - - API - - nova-api - service. Accepts and responds to end user compute API - calls. It supports the OpenStack Compute API, the Amazon - EC2 API, and a special Admin API for privileged users to - perform administrative actions. It also initiates most - orchestration activities, such as running an instance, and - enforces some policies. - - - nova-api-metadata service. Accepts - metadata requests from instances. For details, see Metadata service. The nova-api-metadata service - is generally only used when you run in multi-host mode - with nova-network - installations. - - - - - Compute core - - nova-compute - process. Primarily a worker daemon that creates and - terminates virtual machine instances through hypervisor's - APIs (XenAPI for XenServer/XCP, libvirt for KVM or QEMU, - VMwareAPI for VMware, and so on). The process by which it - does so is fairly complex but the basics are simple: - accept actions from the queue and then perform a series of - system commands (like launching a KVM instance) to carry - them out while updating state in the database. - - - nova-scheduler process. Conceptually the - simplest piece of code in OpenStack Nova. This code takes - a virtual machine instance request from the queue and - determines where it should run. Specifically, it - determines on which compute server host it should - run. - - - nova-conductor module. Introduced in the - Grizzly release, mediates interactions between nova-compute and the - database. It aims to eliminate direct accesses to the - cloud database made by nova-compute. The nova-conductor module - scales horizontally but do not deploy it on any nodes - where nova-compute runs. For more information, - see A new Nova service: nova-conductor. - - - - - Networking for VMs - - nova-network - worker daemon. Similar to nova-compute, it accepts networking tasks - from the queue and performs tasks to manipulate the - network, such as setting up bridging interfaces or - changing iptables rules. This functionality is being - migrated to OpenStack Networking, which is a separate - OpenStack service. - - - nova-dhcpbridge script. Tracks IP address - leases and records them in the database by using the - dnsmasq dhcp-script facility. This functionality is also - being migrated to OpenStack Networking. A different script - is provided when you use OpenStack Networking, code-named - Neutron. - - - - - Console interface - - nova-consoleauth daemon. Authorizes tokens - for users that console proxies provide. See nova-novncproxy and - nova-xvpnvcproxy. This service must be - running for console proxies to work. Many proxies of - either type can be run against a single nova-consoleauth service in - a cluster configuration. For information, see About nova-consoleauth. - - - nova-novncproxy daemon. Provides a proxy - for accessing running instances through a VNC connection. - It supports browser-based novnc clients. - - - nova-console - daemon. Deprecated for use with Grizzly. Instead, the - nova-xvpnvncproxy is used. - - - nova-xvpnvncproxy daemon. A proxy for - accessing running instances through a VNC connection. It - supports a Java client specifically designed for - OpenStack. - - - nova-cert - daemon. Manages x509 certificates. - - - - - Image Management (EC2 scenario) - - nova-objectstore daemon. Provides an S3 - interface for registering images with the Image Service. - Mainly used for installations that must support euca2ools. - The euca2ools tools talk to nova-objectstore in “S3 language” and - nova-objectstore translates S3 requests - into Image Service requests. - - - euca2ools client. Though not an OpenStack module, - OpenStack can support it. It’s a set of command line - interpreter commands for managing cloud resources. - Provided that nova-api is configured to support EC2 - interface, you can use euca2ools to issue cloud management - commands. For more information, see the Eucalyptus 2.0 Documentation. - - - - - Command Line Interpreter/Interfaces - - nova client. Submits commands as a tenant - administrator or as a cloud user. - - - nova-manage client. Submits commands as a cloud - administrator. - - - - - Other components - - The queue. Provides a central hub for passing messages - between daemons. Usually implemented with RabbitMQ, - but could be any AMPQ message queue, such as Apache Qpid) - or Zero - MQ. - - - SQL database. Stores most of the build-time and - run-time state for a cloud infrastructure. Includes the - instance types that are available for use, instances in - use, available networks, and projects. Theoretically, - OpenStack Nova can support any database that SQL-Alchemy - supports. However, the following databases are widely - used: - - sqlite3 databases. Appropriate for test and - development work. - - - MySQL. - - - PostgreSQL. - - - - - Nova interacts with many other OpenStack services: - Identity Service for authentication, Image Service for images, - and the OpenStack dashboard for a web interface. The Image - Service interactions are central. The API process can upload - and query the Image Service, while nova-compute downloads images to use to launch - instances. -
-
- Object Storage - Provides a distributed architecture to prevent a single - point of failure and to scale horizontally. - Includes the following components: - - - swift-proxy-server. This proxy server - accepts incoming requests through the OpenStack Object API - or raw HTTP. It accepts files to upload, modifications to - metadata or container creation. It also serves file or - container listings to web browsers. To improve - performance, the proxy server can use an optional cache - usually deployed with memcache. - - - Account servers. Manage accounts defined with the - object storage service. - - - Container servers. Manage a mapping of containers, or - folders, within the object store service. - - - Object servers. Manage actual objects, such as files, - on the storage nodes. - - - A number of periodic processes. Perform housekeeping - tasks on the large data store. The replication services - ensure consistency and availability through the cluster. - Other periodic processes include auditors, updaters, and - reapers. - - - Configurable WSGI middleware, which is usually the - Identity Service, handles authentication. - -
-
- Identity Service - Provides a single point of integration for OpenStack - policy, catalog, token, and authentication. - - - keystone - client. Handles API requests as well as providing - configurable catalog, policy, token and identity - services. - - - Identity Service functions. Each has a pluggable - backend that allows different ways to use the particular - service. Most support standard backends like LDAP or SQL, - as well as Key Value Stores (KVS). - - - Most people customize the Identity Service for their - current authentication services. -
-
- Networking - Provides network-connectivity-as-a-service between - interface devices that are managed by other OpenStack - services, usually Compute. Enables users to create their own - networks and attach interfaces to them. Like many OpenStack - services, OpenStack Networking is highly configurable due to - its plug-in architecture. These plug-ins accommodate different - networking equipment and software. As such, the architecture - and deployment varies dramatically. Includes the following - components: - - - neutron-server. Accepts API requests and - then routes them to the appropriate OpenStack Networking - plugin for action. - - - OpenStack Networking plugins and agents. Plugs and - unplugs ports, creates networks or subnets and IP - addressing. These plugins and agents differ depending on - the vendor and technologies used in the particular cloud. - OpenStack Networking ships with plugins and agents for - Cisco virtual and physical switches, Nicira NVP product, - NEC OpenFlow products, Open vSwitch, Linux bridging, and - the Ryu Network Operating System. - The common agents are L3 (layer 3), DHCP (dynamic host - IP addressing) and the specific plug-in agent. - - - Messaging queue. Most OpenStack Networking - installations make use of a messaging queue to route - information between the neutron-server and various agents - as well as a database to store networking state for - particular plugins. - - - OpenStack Networking interacts mainly with OpenStack - Compute, where it provides networks and connectivity for its - instances. -
-
- Block Storage - Enables management of volumes, volume types, which are - similar to compute flavors, and volume snapshots. Includes the - following components: - - - cinder-api. - Accepts API requests and routes them to cinder-volume for - action. - - - cinder-volume. Acts upon the requests by - reading or writing to the Cinder database to maintain - state, interacting with other processes (like cinder-scheduler) through a - message queue and directly upon block storage providing - hardware or software. It can interact with a variety of - storage providers through a driver architecture. - Currently, there are drivers for IBM, SolidFire, NetApp, - Nexenta, Zadara, GlusterFS, linux iSCSI and other storage - providers. - - - cinder-scheduler daemon. Like the - nova-scheduler, - picks the optimal block storage provider node on which to - create the volume. - - - Messaging queue. OpenStack Block Storage deployments - also use a messaging queue to route information between - the cinder processes as well as a database to store volume - state. - - - Like Networking, the Block Storage Service mainly - interacts with Compute. For example, the Block Storage Service - interacts with Compute to provide volumes for Compute - instances. -
-
- Image Service - Includes the following components: - - - glance-api. - Accepts Image API calls for image discovery, image - retrieval and image storage. - - - glance-registry. Stores, processes, and - retrieves metadata about images (size, type, and so - on). - - - Database. Stores image metadata. Like Nova, you can - choose your database depending on your preference (but - most people use MySQL or SQlite). - - - Storage repository for image files. In the previous - diagram, Swift is the image repository but you can - configure a different repository. The Image Service - supports normal filesystems, RADOS block devices, Amazon - S3, and HTTP. Be aware that some of these choices are - limited to read-only usage. - - - A number of periodic processes run on the Image Service to - support caching. Replication services ensures consistency and - availability through the cluster. Other periodic processes - include auditors, updaters, and reapers. - As shown in , the Image - Service is central to the overall IaaS picture. It accepts API - requests for images or image metadata from end users or Nova - components and can store its disk files in the Object Storage - Service. -
-
- Metering - To be written -
-
- REST API - To be written -
-
- Dashboard - A modular Django web - application that provides an end user and - administrator interface to OpenStack services. - - - - - - - - The architecture is fairly simple: - - - Horizon. Usually deployed through mod_wsgi in Apache. The code itself is separated - into a reusable python module with most of the logic - (interactions with various OpenStack APIs) and - presentation (to make it easily customizable for different - sites). - - - A database. Configurable as to which one. Relies - mostly on the other services for data. Consequently, - stores very little data of its own. - - - From a network architecture point of view, this service - must be accessible to customers and to the public API for each - OpenStack service. To use the administrator functionality for - other services, it must also connect to Admin API endpoints, - which should not be accessible by customers. -
+ xmlns:xi="http://www.w3.org/2001/XInclude" + xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" + xml:id="ch_getting-started-with-openstack"> + Getting Started with OpenStack + + The OpenStack project is an + open source cloud computing platform for all types of clouds, which aims + to be simple to implement, massively scalable, and feature + rich. Developers and cloud computing technologists from around the + world create the OpenStack project. + OpenStack provides an Infrastructure as a Service (IaaS) + solution through a set of interrelated services. Each service offers + an application programming interface (API) that facilitates this + integration. +
+ OpenStack architecture + The following table describes the OpenStack services that make + up the OpenStack architecture: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OpenStack services
ServiceProject nameDescription
DashboardHorizonEnables users to interact with all OpenStack services to launch + an instance, assign IP addresses, set access controls, and so + on.
Identity + ServiceKeystoneProvides authentication and authorization for all the OpenStack services. Also +provides a service catalog within a particular OpenStack cloud.
Compute + ServiceNovaProvisions and manages large networks of virtual machines on + demand.
Object Storage + ServiceSwiftStores and retrieve files. Does not mount directories like a file + server.
Block Storage + ServiceCinderProvides persistent block storage to guest virtual machines.
Image + ServiceGlance.Provides a registry of virtual machine images. Compute Service + uses it to provision instances. +
Networking + ServiceNeutronEnables network connectivity as a service among interface devices + managed by other OpenStack services, usually Compute Service. + Enables users to create and attach interfaces to networks. Has a + pluggable architecture that supports many popular networking + vendors and technologies.
Metering/Monitoring ServiceCeilometerMonitors and meters the OpenStack cloud for billing, benchmarking, scalability, and statistics + purposes.
Orchestration + ServiceHeatOrchestrates multiple composite cloud applications by using the + AWS CloudFormation template format, through both an + OpenStack-native REST API and a CloudFormation-compatible Query + API.
+
+ Conceptual architecture + The following diagram shows the relationships among the + OpenStack services: + + + + + + +
-
- OpenStack architecture - The OpenStack conceptual and logical architecture for the - Havana release is as follows. -
- Conceptual architecture - The following figure shows a stylized and simplified view - of the OpenStack architecture from the point of view of the - cloud operator. It assumes that the implementer uses all - services together in a common configuration. This figure does - not show how consumers of the cloud might actually use it. For - example, many users access object storage heavily and - directly. - Conceptually, picture the relationships between the - OpenStack services as follows: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OpenStack services
ServiceProject nameDescription
ComputeNovaUse to provision and manage large networks of virtual - machines on demand. Rackspace and HP - provide commercial compute services built on Nova and it - is used internally at companies like Mercado Libre and - NASA, where it originated.
Object StorageSwiftEnables you to store or retrieve files, but not mount - directories like a file server. Several companies, - including KT, Rackspace (from which Swift originated) - and Internap, provide commercial storage services based - on Swift. Many large companies use Swift to store their - data.
Block Storage ServiceCinderProvides persistent block storage to guest virtual - machines.
NetworkingNeutronEnables network connectivity as a service between - interface devices managed by other OpenStack services, - usually Nova. Enables users to create their own networks - and attach interfaces to them. OpenStack Networking has - a pluggable architecture to support many popular - networking vendors and technologies.
DashboardHorizonUse this modular web-based user interface to interact - with all OpenStack services. For example, use the - dashboard to launch an instance, assign IP addresses, - and set access controls.
Identity ServiceKeystoneProvides authentication and authorization for all the - OpenStack services. Also provides a service catalog of - services within a particular OpenStack cloud.
Image ServiceGlance.Provides a catalog and repository for virtual machine - images. OpenStack Compute uses these images. While this - service is optional, any cloud of size requires it.
- In addition to these core services, a number of incubation - projects are being considered for future integration into - OpenStack. -
-
- Logical Architecture - As you can imagine, the logical architecture is far more - complicated than the conceptual architecture shown in . - This section describes the relevant aspects of the logical - architecture that administrators need to design, install, and - configure a cloud. These details are not exhaustive. - Modules are organized by the kind of functions they - implement or deliver and are classified by one of the - following types: - - - daemon. Runs as a daemon. On Linux platforms, is - usually installed as a service. - - - script. Run by an external module when an event - occurs. Currently, it is used as a co-routine of dnsmasq - for managing IP addresses released to instances through - the DHCP protocol. - - - client. Accesses the Python bindings for a - service. - - - command-line interface (CLI). Submits API calls to - OpenStack services through easy-to-use commands. - - - As with any service-oriented architecture, diagrams - quickly can become complicated when they try to illustrate all - possible combinations of service communications. Consequently, - the following diagram shows the most common architecture for - an OpenStack-based cloud but does not depict the only possible - architecture: - - - - - - - - As in the conceptual architecture, end users can interact - through the dashboard, the CLIs, or directly through APIs; all - services authenticate through a common Identity Service; and, - individual services interact with each other through public - APIs, except where privileged administrator commands are - necessary. -
+
+ Logical Architecture + To design, install, and configure a cloud, cloud administrators + must understand the logical architecture. + OpenStack modules are one of the following types: + + + Daemon. Runs as a daemon. On Linux platforms, it's usually installed as a service. + + + Script. Runs installation and tests of a virtual environment. For example, a script called run_tests.sh installs a virtual environment for a service and then may also run tests to verify that virtual environment functions well. + + + Command-line interface (CLI). Enables users to submit API calls to OpenStack services through + easy-to-use commands. + + + The following diagram shows the most common, but not the only, + architecture for an OpenStack cloud: +
OpenStack logical architecture + + + + + +
+ As in the conceptual architecture, end users can interact + through the dashboard, CLIs, and APIs. All services authenticate + through a common Identity Service and individual services interact + with each other through public APIs, except where privileged + administrator commands are necessary.
-
- Feedback - To provide feedback on documentation, join and use the - openstack-docs@lists.openstack.org mailing list - at OpenStack Documentation Mailing List, or report a bug. +
+
+ OpenStack services + This section describes OpenStack services in detail. +
+ Dashboard + The dashboard is a modular Django web + application that provides a graphical interface to + OpenStack services. + + + + + + + + The dashboard is usually deployed through mod_wsgi in + Apache. You can modify the dashboard code to make it suitable for + different sites. + From a network architecture point of view, this service must be + accessible to customers and the public API for each OpenStack + service. To use the administrator functionality for other + services, it must also connect to Admin API endpoints, which + should not be accessible by customers.
+
+ Identity Service + The Identity Service is an OpenStack project that provides + identity, token, catalog, and policy services to OpenStack + projects. It consists of: + + + keystone-all. Starts both the service and + administrative APIs in a single process to provide Catalog, Authorization, and Authentication + services for OpenStack. + + + Identity Service functions. Each has a pluggable backend that allows different ways to use + the particular service. Most support standard backends like LDAP or SQL, as well as key-value + stores (KVS). + + + The Identity Service is mostly used to customize authentication + services. +
+
+ Compute Service + The Compute Service is a cloud computing fabric controller, the + main part of an IaaS system. It can be used for hosting and + managing cloud computing systems. The main modules are implemented + in Python. + The Compute Service is made up of the following functional + areas and their underlying components: + + API + + nova-api service. + Accepts and responds to end user compute API calls. Supports the + OpenStack Compute API, the Amazon EC2 API, and a special Admin + API for privileged users to perform administrative actions. + Also, initiates most orchestration activities, such as running + an instance, and enforces some policies. + + + nova-api-metadata + service. Accepts metadata requests from instances. The + nova-api-metadata + service is generally only used when you run in multi-host mode + with nova-network + installations. For details, see Metadata service. + + + + Compute core + + nova-compute process. A + worker daemon that creates and terminates virtual machine + instances through hypervisor APIs. For example, XenAPI for + XenServer/XCP, libvirt for KVM or QEMU, VMwareAPI for VMware, + and so on. The process by which it does so is fairly complex but + the basics are simple: Accept actions from the queue and perform + a series of system commands, like launching a KVM instance, to + carry them out while updating state in the database. + + + nova-scheduler + process. Conceptually the simplest piece of code in Compute. + Takes a virtual machine instance request from the queue and + determines on which compute server host it should run. + + + nova-conductor module. + Mediates interactions between nova-compute and the database. Aims to eliminate + direct accesses to the cloud database made by nova-compute. The nova-conductor module scales + horizontally. However, do not deploy it on any nodes where + nova-compute runs. For + more information, see A new Nova service: nova-conductor. + + + + Networking for VMs + + nova-network +worker daemon. Similar to nova-compute, it accepts networking tasks +from the queue and performs tasks to manipulate the +network, such as setting up bridging interfaces or +changing iptables rules. This functionality is being +migrated to OpenStack Networking, which is a separate +OpenStack service. + + + nova-dhcpbridge + script. Tracks IP address leases and records them in the + database by using the dnsmasq dhcp-script + facility. This functionality is being migrated to OpenStack + Networking. OpenStack Networking provides a different + script. + + + + Console interface + + nova-consoleauth daemon. Authorizes tokens +for users that console proxies provide. See nova-novncproxy and + nova-xvpnvcproxy. This service must be +running for console proxies to work. Many proxies of +either type can be run against a single nova-consoleauth service in +a cluster configuration. For information, see About nova-consoleauth. + + + nova-novncproxy + daemon. Provides a proxy for accessing running instances through + a VNC connection. Supports browser-based novnc clients. + + + nova-console +daemon. Deprecated for use with Grizzly. Instead, the + nova-xvpnvncproxy is used. + + + nova-xvpnvncproxy + daemon. A proxy for accessing running instances through a VNC + connection. Supports a Java client specifically designed for + OpenStack. + + + nova-cert +daemon. Manages x509 certificates. + + + + Image Management (EC2 scenario) + + nova-objectstore + daemon. Provides an S3 interface for registering images with the + Image Service. Mainly used for installations that must support + euca2ools. The euca2ools tools talk to nova-objectstore in S3 language, and nova-objectstore translates S3 + requests into Image Service requests. + + + euca2ools client. A set of command-line interpreter commands + for managing cloud resources. Though not an OpenStack module, + you can configure nova-api to support this EC2 interface. For more + information, see the Eucalyptus 2.0 Documentation. + + + + Command Line Interpreter/Interfaces + + nova client. Enables users to submit commands as a tenant + administrator or end user. + + + nova-manage client. Enables cloud administrators to submit + commands. + + + + Other components + + The queue. A central hub for passing messages between daemons. + Usually implemented with RabbitMQ, but + could be any AMPQ message queue, such as Apache Qpid) or + Zero + MQ. + + + SQL database. Stores most build-time and runtime states for + a cloud infrastructure. Includes instance types that are + available for use, instances in use, available networks, and + projects. Theoretically, OpenStack Compute can support any + database that SQL-Alchemy supports, but the only databases + widely used are sqlite3 databases, MySQL (only appropriate for + test and development work), and PostgreSQL. + + + The Compute Service interacts with other OpenStack services: + Identity Service for authentication, Image Service for images, and + the OpenStack Dashboard for a web interface. +
+
+ Object Storage Service + The Object Storage Service is a highly scalable and durable + multi-tenant object storage system for large amounts of + unstructured data at low cost through a RESTful http API. + It includes the following components: + + + swift-proxy-server. + Accepts Object Storage API and raw HTTP requests to upload + files, modify metadata, and create containers. It also serves + file or container listings to web browsers. To improve + performance, the proxy server can use an optional cache usually + deployed with memcache. + + + Account servers. Manage accounts defined with the Object + Storage Service. + + + Container servers. Manage a mapping of containers, or folders, + within the Object Storage Service. + + + Object servers. Manage actual objects, such as files, on the + storage nodes. + + + A number of periodic processes. Performs housekeeping tasks on + the large data store. The replication services ensure + consistency and availability through the cluster. Other periodic + processes include auditors, updaters, and reapers. + + + Configurable WSGI middleware, which is usually the +Identity Service, handles authentication. + +
+
+ Block Storage Service + The Block Storage Service enables management of volumes, volume + snapshots, and volume types. It includes the following + components: + + + cinder-api. +Accepts API requests and routes them to cinder-volume for +action. + + + cinder-volume. Responds to requests to read from and + write to the Object Storage database to maintain state, interacting with other processes (like + cinder-scheduler) through a message queue and + directly upon block storage providing hardware or software. It can interact with a variety of + storage providers through a driver architecture. + + + cinder-scheduler daemon. Like the + nova-scheduler, +picks the optimal block storage provider node on which to +create the volume. + + + Messaging queue. Routes information between the Block Storage + Service processes and a database, which stores volume + state. + + + The Block Storage Service interacts with Compute to provide + volumes for instances. +
+
+ Image Service + The Image Service includes the following components: + + + glance-api. Accepts + Image API calls for image discovery, retrieval, and + storage. + + + glance-registry. + Stores, processes, and retrieves metadata about images. Metadata + includes size, type, and so on. + + + Database. Stores image metadata. You can choose your database + depending on your preference. Most deployments use MySQL or + SQlite. + + + Storage repository for image files. In , the Object Storage Service is the + image repository. However, you can configure a different + repository. The Image Service supports normal filesystems, RADOS + block devices, Amazon S3, and HTTP. Some of these choices are + limited to read-only usage. + + + A number of periodic processes run on the Image Service to +support caching. Replication services ensures consistency and +availability through the cluster. Other periodic processes +include auditors, updaters, and reapers. + As shown in , the Image Service + is central to the overall IaaS picture. It accepts API requests + for images or image metadata from end users or Compute components + and can store its disk files in the Object Storage Service. +
+
+ Networking Service + Provides network-connectivity-as-a-service between interface + devices that are managed by other OpenStack services, usually + Compute. Enables users to create and attach interfaces to + networks. Like many OpenStack services, OpenStack Networking is + highly configurable due to its plug-in architecture. These + plug-ins accommodate different networking equipment and software. + Consequently, the architecture and deployment vary dramatically. + Includes the following components: + + + neutron-server. + Accepts and routes API requests to the appropriate OpenStack + Networking plug-in for action. + + + OpenStack Networking plug-ins and agents. Plugs and unplugs + ports, creates networks or subnets, and provides IP addressing. + These plug-ins and agents differ depending on the vendor and + technologies used in the particular cloud. OpenStack Networking + ships with plug-ins and agents for Cisco virtual and physical + switches, Nicira NVP product, NEC OpenFlow products, Open + vSwitch, Linux bridging, and the Ryu Network Operating + System. + The common agents are L3 (layer 3), DHCP (dynamic host IP addressing), and a plug-in + agent. + + + Messaging queue. Most OpenStack Networking installations make + use of a messaging queue to route information between the + neutron-server and various agents as well as a database to store + networking state for particular plug-ins. + + + OpenStack Networking interacts mainly with OpenStack +Compute, where it provides networks and connectivity for its +instances. +
+
+ Metering/Monitoring Service + The Metering Service is designed to: + + + + Efficiently collect the metering data about the CPU and network costs. + + Collect data by monitoring notifications sent from services or by polling the + infrastructure. + + Configure the type of collected data to meet various operating requirements. + Accessing and inserting the metering data through the REST API. + + Expand the framework to collect custom usage data by additional + plug-ins. + Produce signed metering messages that cannot be + repudiated. + + + The system consists of the following basic components: + + + A compute agent. Runs on each compute node and polls for resource utilization + statistics. There may be other types of agents in the future, but for now we will + focus on creating the compute agent. + + A central agent. Runs on a central management server to poll for resource + utilization statistics for resources not tied to instances or compute nodes. + + A collector. Runs on one or more central management servers to monitor the + message queues (for notifications and for metering data coming from the agent). + Notification messages are processed and turned into metering messages and sent back + out onto the message bus using the appropriate topic. Metering messages are written + to the data store without modification. + + A data store. A database capable of handling concurrent writes (from one or more + collector instances) and reads (from the API server). + + An API server. Runs on one or more central management servers to provide access to the data + from the data store. These services communicate using the standard OpenStack messaging + bus. Only the collector and API server have access to the data store. + + + These services communicate by using the standard OpenStack messaging bus. Only the collector and API server have access to the data store. +
+
+ Orchestration Service + The Orchestration Service provides a template-based + orchestration for describing a cloud application by running + OpenStack API calls to generate running cloud applications. The + software integrates other core components of OpenStack into a + one-file template system. The templates enable you to create most + OpenStack resource types, such as instances, floating IPs, + volumes, security groups, users, and so on. Also, provides some + more advanced functionality, such as instance high availability, + instance auto-scaling, and nested stacks. By providing very tight + integration with other OpenStack core projects, all OpenStack core + projects could receive a larger user base. + Enables deployers to integrate with the Orchestration Service + directly or through custom plug-ins. + The Orchestration Service consists of the following + components: + + heat tool. A CLI that communicates with the + heat-api to run AWS CloudFormation APIs. End developers could + also use the heat REST API directly. + + heat-api component. Provides an OpenStack-native + REST API that processes API requests by sending them to the + heat-engine over RPC. + + heat-api-cfn component. Provides an AWS Query API that is compatible with AWS CloudFormation + and processes API requests by sending them to the heat-engine over RPC. + heat-engine. Orchestrates the launching of templates and provides events back to the API + consumer. + + +
+
+
+ Feedback + To provide feedback on documentation, join and use the +openstack-docs@lists.openstack.org mailing list + at OpenStack Documentation Mailing List, or report a bug. +
diff --git a/doc/src/docbkx/common/figures/openstack_havana_conceptual_arch.png b/doc/src/docbkx/common/figures/openstack_havana_conceptual_arch.png new file mode 100644 index 0000000000000000000000000000000000000000..2754d2ffcf4bb266bfdb058604f14048571a4776 GIT binary patch literal 42024 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 J3{h>*{{g@SdVBx? literal 0 HcmV?d00001