The upgrade process generally follows these steps:
Perform some "cleaning" of the environment prior to starting the upgrade process to ensure a consistent state. For example, instances not fully purged from the system after deletion may cause indeterminate behavior.
Read the release notes and documentation.
Find incompatibilities between your versions.
Develop an upgrade procedure and assess it thoroughly using a test environment similar to your production environment.
Run the upgrade procedure on the production environment.
You can perform an upgrade with operational instances, but this strategy can be dangerous. You might consider using live migration to temporarily relocate instances to other compute nodes while performing upgrades. However, you must ensure database consistency throughout the process, otherwise your environment may become unstable. Also, don't forget to provide sufficient notice to your users, including giving them plenty of time to perform their own backups.
The following order for service upgrades seems the most successful:
Upgrade the OpenStack Identity Service (keystone).
Upgrade the OpenStack Image Service (glance).
Upgrade OpenStack Compute (nova), including networking components.
Upgrade OpenStack Block Storage (cinder).
Upgrade the OpenStack dashboard.
The general upgrade process includes the following steps:
Create a backup of configuration files and databases.
Update the configuration files according to the release notes.
Upgrade the packages using your distribution's package manager.
Stop services, update database schemas, and restart services.
Verify proper operation of your environment.