 a1e8fc6dd9
			
		
	
	a1e8fc6dd9
	
	
	
		
			
			* Explain these docs are for trunk (copied from ironic) * All the docs in this repo are meant to be developer docs, so having a devref inside of the docs is redundant and just makes the docs more complicated to navigate. Move everything out of the devref folder and link to everything from main index. * Move man pages into separate section. The man pages are pretty sparse * right now, we should either make them useful or just delete them * Remove dead docs from unused_docs list in doc/source/conf.py * Shuffle docs landing page, move common referees to the top (API, hypervisor support matrix), Add a introduction section and more. The hope is the updated layout makes this document easier to navigate. * Use maxdepth of 1 * Rename a few sections with what are hopefully better names The next step is to prune out outdated documents and further cleanup this page. Change-Id: Iff453e47ccc902a0e72b1a5f6ce1ee939ff3a1a0
		
			
				
	
	
		
			302 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			302 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| ..
 | |
|       Licensed under the Apache License, Version 2.0 (the "License"); you may
 | |
|       not use this file except in compliance with the License. You may obtain
 | |
|       a copy of the License at
 | |
| 
 | |
|           http://www.apache.org/licenses/LICENSE-2.0
 | |
| 
 | |
|       Unless required by applicable law or agreed to in writing, software
 | |
|       distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | |
|       WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | |
|       License for the specific language governing permissions and limitations
 | |
|       under the License.
 | |
| 
 | |
| Scope of the Nova project
 | |
| ==========================
 | |
| 
 | |
| Nova is focusing on doing an awesome job of its core mission.
 | |
| This document aims to clarify that core mission.
 | |
| 
 | |
| This is a living document to help record where we agree about what Nova
 | |
| should and should not be doing, and why.
 | |
| Please treat this as a discussion of interesting, and hopefully useful,
 | |
| examples. It is not intended to be an exhaustive policy statement.
 | |
| 
 | |
| Mission
 | |
| --------
 | |
| 
 | |
| Our mission statement starts with:
 | |
| 
 | |
|     To implement services and associated libraries to provide massively
 | |
|     scalable, on demand, self service access to compute resources.
 | |
| 
 | |
| Our official mission statement also includes the following examples of
 | |
| compute resources: bare metal, virtual machines, and containers.
 | |
| For the full official mission statement see:
 | |
| http://governance.openstack.org/reference/projects/nova.html#mission
 | |
| 
 | |
| This document aims to help clarify what the mission statement means.
 | |
| 
 | |
| Compute Resources
 | |
| ------------------
 | |
| 
 | |
| Nova is all about access to compute resources. This section looks at the
 | |
| types of compute resource Nova works with.
 | |
| 
 | |
| Virtual Servers
 | |
| ****************
 | |
| 
 | |
| Nova was originally focused purely on providing access to virtual servers
 | |
| running on a variety of different hypervisors.
 | |
| The majority of users use Nova only to provide access to virtual servers
 | |
| from a single hypervisor, however, its possible to have a Nova deployment
 | |
| include multiple different types of hypervisors, while at the same time
 | |
| offering containers and bare metal servers.
 | |
| 
 | |
| Containers
 | |
| ***********
 | |
| 
 | |
| The Nova API is not a good fit for a lot of container use cases.
 | |
| The Magnum project intends to deliver a good container experience built
 | |
| on top of Nova.
 | |
| 
 | |
| Nova allows you to use containers in a similar way to how you would use
 | |
| on demand virtual machines. We want to maintain this distinction, so we
 | |
| maintain the integrity and usefulness of the existing Nova API.
 | |
| 
 | |
| For example, Nova is not designed to spin up new containers for every apache
 | |
| request, nor do we plan to control what goes on inside containers.
 | |
| They get the same metadata provided to them as virtual machines, to do
 | |
| with as they see fit.
 | |
| 
 | |
| Bare Metal Servers
 | |
| *******************
 | |
| 
 | |
| Ironic project has been pioneering the idea of treating physical machines in
 | |
| a similar way to on demand virtual machines.
 | |
| 
 | |
| Nova's driver is able to allow a multi-tenant cloud style use of Ironic
 | |
| controlled resources.
 | |
| 
 | |
| While currently there are operations that are a fundamental part of our
 | |
| virtual machine abstraction that are not currently available in ironic,
 | |
| such as attaching iSCSI volumes, it does not fundamentally change the
 | |
| semantics of our API, and as such is a suitable Nova driver. Moreover,
 | |
| it is expected that gap with shrink over time.
 | |
| 
 | |
| Driver Parity
 | |
| **************
 | |
| 
 | |
| Our goal for the Nova API to provide a consistent abstraction to access
 | |
| on demand compute resources. We are not aiming to expose all features of all
 | |
| hypervisors. Where the details of the underlying hypervisor leak through
 | |
| our APIs, we have failed in this goal, and we must work towards better
 | |
| abstractions that are more interoperable.
 | |
| This is one reason why we put so much emphasis on the use of Tempest in third
 | |
| party CI systems.
 | |
| 
 | |
| The key tenant of driver parity is that if a feature is supported in a driver,
 | |
| it must feel the same to users, as if they where using any of the other
 | |
| drivers that also support that feature. The exception is that, if possible for
 | |
| widely different performance characteristics, but the effect of that API call
 | |
| must be identical.
 | |
| 
 | |
| Following on from that, should a feature only be added to one of the drivers,
 | |
| we must make every effort to ensure another driver could be implemented to
 | |
| match that behavior.
 | |
| 
 | |
| Its important that drivers support enough features, so the API actually
 | |
| provides a consistent abstraction. For example, being unable to create a
 | |
| server or delete a server, would severely undermine that goal.
 | |
| In fact, Nova only ever manages resources it creates.
 | |
| 
 | |
| Upgrades
 | |
| ---------
 | |
| 
 | |
| Nova is widely used in production. As such we need to respect the needs of our
 | |
| existing users. At the same time we need evolve the current code base,
 | |
| including both adding and removing features.
 | |
| 
 | |
| This section outlines how we expect people to upgrade, and what we do to help
 | |
| existing users that upgrade in the way we expect.
 | |
| 
 | |
| Upgrade expectations
 | |
| *********************
 | |
| 
 | |
| Our upgrade plan is to concentrate on upgrades from N-1 to the Nth release.
 | |
| So for someone running juno, they would have to upgrade to kilo before
 | |
| upgrading to liberty.
 | |
| This is designed to balance the need for a smooth upgrade, against having to
 | |
| keep maintaining the compatibility code to make that upgrade possible.
 | |
| We talk about this approach as users consuming the stable branch.
 | |
| 
 | |
| In addition, we also support users upgrading from the master branch.
 | |
| Technically, between any two between any two commits within the
 | |
| same release cycle. In certain cases, when crossing release boundaries, you
 | |
| must upgrade to the stable branch, before then upgrading to the tip of master.
 | |
| This is to support those that are doing some level of
 | |
| "Continuous Deployment" from the tip of master into production.
 | |
| Many of the public cloud provides running OpenStack use this approach so they
 | |
| are able to get access to bug fixes and features they work on into production
 | |
| sooner.
 | |
| 
 | |
| This becomes important when you consider reverting a commit that turns out to
 | |
| have been bad idea. We have to assume any public API change may have already
 | |
| been deployed into production, and as such cannot be reverted.
 | |
| In a similar way, a database migration may have been deployed.
 | |
| 
 | |
| Any commit that will affect an upgrade gets the UpgradeImpact tag added to
 | |
| the commit message, so there is no requirement to wait for release notes.
 | |
| 
 | |
| Don't break existing users
 | |
| ****************************
 | |
| 
 | |
| As a community we are aiming towards a smooth upgrade process, where users
 | |
| must be unaware you have just upgraded your deployment, except that there
 | |
| might be additional feature available and improved stability and performance
 | |
| of some existing features.
 | |
| 
 | |
| We don't ever want to remove features our users rely on. Sometimes we need to
 | |
| migrate users to a new implementation of that feature, which may require extra
 | |
| steps by the deployer, but the end users must be unaffected by such changes.
 | |
| However there are times when some features become a problem to maintain, and
 | |
| fall into disrepair. We aim to be honest with our users and highlight the
 | |
| issues we have, so we are in a position to find help to fix that situation.
 | |
| Ideally we are able to rework the feature so it can be maintained, but in some
 | |
| rare cases, the feature no longer works, is not tested, and no one is stepping
 | |
| forward to maintain that feature, the best option can be to remove that
 | |
| feature.
 | |
| 
 | |
| When we remove features, we need warn users by first marking those features as
 | |
| deprecated, before we finally remove the feature. The idea is to get feedback
 | |
| on how important the feature is to our user base. Where a feature is important
 | |
| we work with the whole community to find a path forward for those users.
 | |
| 
 | |
| API Scope
 | |
| ----------
 | |
| 
 | |
| Nova aims to provide a highly interoperable and stable REST API for our users
 | |
| to get self-service access to compute resources.
 | |
| 
 | |
| No more API Proxies
 | |
| ********************
 | |
| 
 | |
| Nova API current has some APIs that are now (in kilo) mostly just a proxy
 | |
| to other OpenStack services. If it were possible to remove a public API, these
 | |
| are some we might start with. As such, we don't want to add any more.
 | |
| 
 | |
| The first example is the API that is a proxy to the Glance v1 API.
 | |
| As Glance moves to deprecate its v1 API, we need to translate calls
 | |
| from the old v1 API we expose, to Glance's v2 API.
 | |
| 
 | |
| The next API to mention is the networking APIs, in particular the
 | |
| security groups API. If you are using nova-network, Nova is still the only
 | |
| way to perform these network operations.
 | |
| But if you use Neutron, security groups has a much richer Neutron API,
 | |
| and if you use both Nova API and Neutron API, the miss match can lead to
 | |
| some very unexpected results, in certain cases.
 | |
| 
 | |
| Our intention is to avoid adding to the problems we already have in this area.
 | |
| 
 | |
| No more Orchestration
 | |
| **********************
 | |
| 
 | |
| Nova is a low level infrastructure API. It is plumbing upon which richer
 | |
| ideas can be built. Heat and Magnum being great examples of that.
 | |
| 
 | |
| While we have some APIs that could be considered orchestration, and we must
 | |
| continue to maintain those, we do not intend to add any more APIs that do
 | |
| orchestration.
 | |
| 
 | |
| Third Party APIs
 | |
| *****************
 | |
| 
 | |
| Nova aims to focus on making a great API that is highly interoperable across
 | |
| all Nova deployments.
 | |
| 
 | |
| We have historically done a very poor job of implementing and maintaining
 | |
| compatibility with third party APIs inside the Nova tree.
 | |
| 
 | |
| As such, all new efforts should instead focus on external projects that
 | |
| provide third party compatibility on top of the Nova API. Where needed, we
 | |
| will work this those projects to extending the Nova API such that its
 | |
| possible to add that functionality on top of the Nova API. However, we do
 | |
| not intend to add API calls for those services to persist third party API
 | |
| specific information in the Nova database. Instead we want to focus on
 | |
| additions that enhance the existing Nova API.
 | |
| 
 | |
| Scalability
 | |
| ------------
 | |
| 
 | |
| Our mission includes the text "massively scalable". Lets discuss what that
 | |
| means.
 | |
| 
 | |
| Nova has three main axises of scale: Number of API requests, number of compute
 | |
| nodes and number of active instances.
 | |
| In many cases the number of compute nodes and active instances are so closely
 | |
| related, you rarely need to consider those separately.
 | |
| There are other items, such at the number of tenants, and the number of
 | |
| instances per tenant. But, again, these are very rarely the key scale issue.
 | |
| Its possible to have a small cloud with lots of requests for very short
 | |
| lived VMs, or a large cloud with lots of longer lived VMs.
 | |
| These need to scale out different components of the Nova system to reach
 | |
| their required level of scale.
 | |
| 
 | |
| Ideally all Nova components are either scaled out to match the number of API
 | |
| requests and build requests, or scaled out to match the number of running
 | |
| servers. If we create components that have their load increased relative to
 | |
| both of these items, we can run into inefficiencies or resource contention.
 | |
| Although it is possible to make that work in some cases, this should always
 | |
| be considered.
 | |
| 
 | |
| We intend Nova to be usable for both small and massive deployments.
 | |
| Where small involves 1-10 hypervisors and massive deployments are single
 | |
| regions with greater than 10,000 hypervisors. That should be seen as our
 | |
| current goal not an upper limit.
 | |
| 
 | |
| There are some features that would not scale well for either the small scale
 | |
| or the very large scale. Ideally we would not accept these features, but if
 | |
| there is a strong case to add such features, we must work hard to ensure
 | |
| you can run without that feature at the scale you are required to run.
 | |
| 
 | |
| IaaS not Batch Processing
 | |
| --------------------------
 | |
| 
 | |
| Currently Nova focuses on providing on-demand compute resources in the style
 | |
| of classic Infrastructure-as-a-service clouds. A large pool of compute
 | |
| resources that people can consume in a self-service way.
 | |
| 
 | |
| Nova is not currently optimized for dealing with a larger number of requests
 | |
| for compute resources compared with the amount of compute resource thats
 | |
| currently available.
 | |
| We generally assume a level of spare capacity is maintained for future
 | |
| requests. This is needed for users that want to quickly scale out, and extra
 | |
| capacity becomes available again as users scale in.
 | |
| While spare capacity is also not required, we are not optimizing for a
 | |
| system that aims to run at 100% capacity at all times.
 | |
| As such our quota system is more focused on limiting the current level of
 | |
| resource usage, rather than ensuring a fair balance of resources between all
 | |
| incoming requests.
 | |
| This doesn't exclude adding features to support making a better use of spare
 | |
| capacity, such as "spot instances".
 | |
| 
 | |
| There have been discussions around how to change Nova to work better for
 | |
| batch job processing.
 | |
| But the current focus is on how to layer such an abstraction on top of the
 | |
| basic primitives Nova currently provides, possibly adding additional APIs
 | |
| where that makes good sense. Should this turn out to be impractical, we may
 | |
| have to revise our approach.
 | |
| 
 | |
| Deployment and Packaging
 | |
| -------------------------
 | |
| 
 | |
| Nova does not plan on creating its own packaging or deployment systems.
 | |
| 
 | |
| Our CI infrastructure is powered by Devstack. This can also be used by
 | |
| developers to test their work on a full deployment of Nova.
 | |
| 
 | |
| We do not develop any deployment or packaging for production deployments.
 | |
| Being widely adopted by many distributions and commercial products, we
 | |
| instead choose to work with all those parties to ensure they are able to
 | |
| effectively package and deploy Nova.
 |